Migrieren zwischen Laufzeitumgebungen¶
Sie können eine Streamlit-App zwischen Warehouse-Laufzeiten und Container Runtimes migrieren, indem Sie die Eigenschaften RUNTIME_NAME und COMPUTE_POOL der App aktualisieren. Einige Features werden jedoch nur in einem Typ von Laufzeitumgebung unterstützt, daher gibt es einige Überlegungen zur Migration einer App zwischen Laufzeitumgebungen.
Diese Seite enthält eine Checkliste für die Migration von Warehouse-Laufzeiten zu Container Runtimes. Jedes Element bietet eine kurze Zusammenfassung und bei Bedarf einen Link zu detaillierten Informationen.
Voraussetzungen¶
Bevor Sie beginnen, passen Sie Ihre bestehende Warehouse-Laufzeit-App an, um sich auf die Migration vorzubereiten.
- Optional: Erstellen einer Sicherungskopie vom Code Ihrer App
Wenn der Quellcode Ihrer App nicht bereits in einem Versionskontrollsystem, einem externen Repository oder einem lokalen Verzeichnis gespeichert ist, erstellen Sie eine Sicherungskopie, um einen möglichen Datenverlust während der Migration zu vermeiden.
- Sicherstellen, dass Ihre App nicht mit ROOT_LOCATION erstellt wurde
Apps, die mit dem Parameter ROOT_LOCATION erstellt wurden, können nur Warehouse-Laufzeiten verwenden. Wenn Ihre App mit ROOT_LOCATION erstellt wurde, aktualisieren Sie sie so, dass sie den Parameter FROM verwendet.
Siehe Erläuterungen zu den verschiedenen Typen von Streamlit-Objekten.
- Aktualisieren Ihrer App auf Streamlit 1.50 oder höher
Stellen Sie sicher, dass Ihre App und alle Abhängigkeiten mit Streamlit 1.50 oder kompatibel sind.
- Aktualisieren Ihrer App nur auf Python 3.11
Container Runtimes unterstützen nur Python 3.11, während Warehouse-Laufzeiten Python 3.9, 3.10 und 3.11 unterstützen. Stellen Sie sicher, dass Ihre App und alle Abhängigkeiten mit Python 3.11 kompatibel sind.
- Optional: Lokale Installation von Snowflake CLI 3.14.0 oder höher
Wenn Sie Apps über die Snowflake-CLI bereitstellen, benötigen Sie Version 3.14.0 oder höher, um die Container Runtime-Bereitstellungssyntax zu unterstützen. Überprüfen Sie Ihre Version mit
snow --version. Optional können Sie die Versionen 3.12.0 bis 3.13.1 verwenden, wenn Sie das Flag--experimentalverwenden.Siehe Streamlit-Apps mit Snowflake CLI erstellen und bereitstellen.
Ressourcen und Berechtigungen¶
Ihre App kann weiterhin ihr bestehendes Abfrage-Warehouse verwenden, aber Sie müssen einen Computepool für die Container Runtime einrichten.
- Erstellen eines Computepools und Gewähren des entsprechenden Zugriffs
Die Person mit Eigentumsrechten an der App benötigt USAGE-Berechtigungen für den Computepool, in dem die Container Runtime ausgeführt wird. App-Betrachtende benötigen keine Computepool-Berechtigungen.
Siehe Erforderliche Berechtigungen zum Erstellen und Verwenden einer Streamlit-App.
- Erstellen einer Integration für den externen Zugriff und Gewähren des entsprechenden Zugriffs
Container Runtimes werden mit einem minimalen Satz vorinstallierter Pakete bereitgestellt. Wenn Ihre App zusätzliche Pakete oder andere Versionen der vorinstallierten Pakete benötigt, müssen Sie einen externen Paketindex wie PyPI verwenden. Um Ihrer App den Zugriff auf einen externen Paketindex zu ermöglichen, müssen Sie eine Integration für den externen Zugriff (EAI) erstellen und der Person mit Eigentumsrechten an der App USAGE-Berechtigungen für die EAI gewähren.
Siehe Externer Zugriff auf das Netzwerk in Streamlit in Snowflake.
Verwaltung von Abhängigkeiten¶
- Ersetzen von
environment.ymldurch:file:pyproject.tomloderrequirements.txt Wenn Sie Abhängigkeitsversionen sperren oder zusätzliche Abhängigkeiten angeben müssen, müssen Sie die Datei
pyproject.tomloderrequirements.txtin das Stammverzeichnis Ihres Projektverzeichnisses einfügen. Pakete können zwischen Conda und PyPI unterschiedliche Namen aufweisen. Stellen Sie also sicher, dass Sie die richtigen Paketnamen für Ihr Artefakt-Repository verwenden.- Ändern Ihrer App, um die Integrationen für den externen Zugriff festzulegen
Wenn Ihre Abhängigkeiten Versionsspezifizierer enthalten oder wenn Sie zusätzliche Pakete installieren, müssen Sie Ihrer App eine Integration für den externen Zugriff zuweisen. Dies ist erforderlich, damit auf den in Ihrer Abhängigkeitsdatei angegebenen Paketindex zugegriffen werden kann. PyPI ist der Standard-Paketindex.
Code-Änderungen¶
- Ersetzen von:code:
get_active_session()durchst.connection("snowflake").session() Wenn Sie eine Container Runtime verwenden, verarbeitet der Streamlit-Server mehrere Betrachtende gleichzeitig.
get_active_session()ist nicht thread-sicher, also müssen Siest.connection("snowflake")verwenden, um stattdessen Ihre Verbindung zu verwalten.Siehe Verwalten von Geheimnissen und Konfigurieren der Streamlit-App.
- Überprüfen Ihres Code und Implementieren des Cachings
Da Container Runtimes Festplatten-, Compute- und Arbeitsspeicherressourcen zwischen Betrachtersitzungen gemeinsam nutzen, sollten Sie
st.cache_resourceoderst.cache_dataverwenden, um teure Berechnungen oder Daten zwischenzuspeichern, die sich nicht häufig ändern.Siehe: Erläuterungen zur Client-Server-Architektur von Streamlit und Übersicht zum Caching in der Streamlit-Dokumentation.
- Sicherstellen der Threadsicherheit
Wenn Sie eine Container Runtime verwenden, muss der Code Ihrer App thread-sicher sein, um mehrere Betrachtende gleichzeitig bedienen zu können. Während jeder Betrachtende eine eindeutige Instanz des App-Skripts erhält, sollten Sie jeglichen importierten Code auf gemeinsame Zustandsvariablen oder globale Variablen überprüfen, die zu Racebedingungen oder inkonsistentem Verhalten führen könnten. Wenn Sie neue Threads in eine Streamlit-Anwendung einführen, überprüfen Sie die Streamlit-Architektur und verwenden Sie keine Streamlit-Befehle in Ihren Threads.
Siehe: Multithreading in Streamlit in der Streamlit-Dokumentation.
- Ersetzen der
_snowflake-Nutzung mit nativen Python-Äquivalenten _snowflakeist ein privates Modul, das nur in benutzerdefinierten Funktionen (UDFs) und gespeicherte Prozeduren verfügbar ist. Warehouse-Laufzeitumgebungen erben den Zugriff auf_snowflake, Container Runtimes jedoch nicht. Wenn Ihre App_snowflakeverwendet , ersetzen Sie es durch native Python-Äquivalente, wie z. B. den Snowflake Connector für Python. Verwenden Sie bei Bedarf gespeicherte Prozeduren, um auf Geheimnisse zuzugreifen.Siehe Verwalten von Geheimnissen und Konfigurieren der Streamlit-App.
- Aktualisieren von Dateipfaden und der Organisation
Das Stammverzeichnis Ihres Quellspeicherorts ist das Arbeitsverzeichnis für Ihre App. Bei den meisten Python-Bibliotheken muss Ihre App relative Pfade vom Stammverzeichnis Ihres Quellspeicherorts verwenden. Einige Streamlit-Befehle erfordern jedoch Pfade relativ zur Einstiegspunkt-Datei. Wenn sich Ihre Einstiegspunkt-Datei in einem Unterverzeichnis befindet, überprüfen Sie die Pfade in Ihrem Code entsprechend.
Überprüfen die Speicherorte von
secrets.tomlundconfig.toml.
Konfigurationsänderungen an der App¶
- Ändern Ihrer App, um deren Computepool, Abfrage-Warehouse und Laufzeitumgebung festzulegen
Wenn Sie bereit sind, den Laufzeittyp Ihrer App zu ändern, können Sie Snowsight oder SQL verwenden.
Melden Sie sich bei Snowsight an.
Wählen Sie im Navigationsmenü die Option Projects » Streamlit und dann Ihre App aus.
Wählen Sie in der rechten oberen Ecke das Menü mit den vertikalen Ellipsen
und dann App settings aus.Wählen Sie unter Python environment die Option Run on container aus.
Wählen Sie im Dropdown-Menü Compute pool Ihren Computepool aus.
Wählen Sie im Dropdown-Menü Query warehouse Ihr Abfrage-Warehouse aus.
Um Ihre Änderungen zu speichern und das Dialogfeld zu schließen, wählen Sie Save aus.
ALTER STREAMLIT my_app COMPUTE_POOL = my_compute_pool QUERY_WAREHOUSE = my_warehouse RUNTIME_NAME = SYSTEM$ST_CONTAINER_RUNTIME_PY3_11;
Ihre App benötigt einige Minuten, um neu zu starten und den neuen Container zu erstellen.