Verwenden von Drittanbieter-Paketen¶
Stagingbereiche können verwendet werden, um Pakete von Drittanbietern zu importieren. Sie können auch Anaconda-Pakete angeben, die installiert werden sollen, wenn Sie Python-UDFs erstellen.
Unter diesem Thema:
Importieren von Paketen über eine Snowflake-Stagingbereiche¶
Snowflake-Stagingbereiche können zum Import von Paketen verwendet werden. Sie können beliebigen Python-Code einbringen, der den unter Allgemeine Einschränkungen definierten Richtlinien folgt. Weitere Informationen dazu finden Sie unter Erstellen eines Python-UDF mit aus einem Stagingbereich hochgeladenem Code.
Verwenden von Drittanbieterpaketen aus Anaconda¶
Eine Reihe beliebter Open-Source-Python-Pakete von Drittanbietern, die von Anaconda erstellt und zur Verfügung gestellt werden, sind in virtuellen Snowflake-Warehouses sofort einsatzbereit. Für die derartige Nutzung der Anaconda-Pakete fallen außer den üblichen verbrauchsabhängigen Preisen von Snowflake keine weiteren Kosten an. Anaconda-Pakete können derzeit nicht innerhalb von Snowpark Container Services (SPCS) verwendet werden. Wenn Sie Python-Pakete in einem Containerimage für SPCS verwenden möchten, können Sie diese Pakete von PyPi mit pip installieren.
Eine Liste der Drittanbieterpakete von Anaconda finden Sie im Anaconda-Snowflake-Kanal.
Um das Hinzufügen neuer Pakete anzufordern, gehen Sie auf die Seite Snowflake-Ideen der Snowflake-Community. Wählen Sie die Kategorie Python Packages & Libraries aus, und prüfen Sie, ob bereits jemand anderes dieses Paket angefordert hat. Wenn ja, geben Sie Ihre Stimme ab. Wenn nicht, klicken Sie auf New Idea, und reichen Ihren Vorschlag ein.
Erste Schritte¶
Bevor Sie die von Anaconda in Snowflake bereitgestellten Pakete verwenden können, müssen Sie die Bedingungen für externe Angebote anerkennen.
Bemerkung
Sie müssen der Administrator der Organisation sein (Rolle ORGADMIN), um die Bedingungen akzeptieren zu können. Sie müssen die Bedingungen nur einmal für Ihr Snowflake-Konto akzeptieren. Siehe Aktivieren der ORGADMIN-Rolle für ein Konto.
Melden Sie sich bei Snowsight an.
Wählen Sie Admin » Billing & Terms aus.
Wählen Sie im Abschnitt Anaconda die Option Enable aus.
Klicken Sie im Anaconda Packages-Dialog auf den Link, um die Bedingungen für externe Angebote zu prüfen.
Wenn Sie mit den Bedingungen einverstanden sind, klicken Sie auf Acknowledge & Continue.
Wenn Sie beim Versuch, die Nutzungsbedingungen zu akzeptieren, eine Fehlermeldung erhalten, fehlt in Ihrem Benutzerprofil möglicherweise ein Vorname, ein Nachname oder eine E-Mail-Adresse. Wenn Sie eine Administratorrolle haben, finden Sie unter Benutzerdetails zum Benutzerprofil hinzufügen entsprechende Informationen zum Aktualisieren Ihres Profils in Snowsight. Wenden Sie sich andernfalls an einen Administrator, um Ihr Konto zu aktualisieren.
Anzeigen und Verwenden von Paketen¶
Anzeigen verfügbarer Pakete¶
Sie können alle verfügbaren Pakete und deren Versionsinformationen anzeigen, indem Sie die Ansicht PACKAGES des Information Schema abfragen.
select * from information_schema.packages where language = 'python';
Um Versionsinformationen über ein bestimmtes Paket, z. B. numpy
, anzuzeigen, verwenden Sie folgenden Befehl:
select * from information_schema.packages where (package_name = 'numpy' and language = 'python');
Bemerkung
Einige Pakete im Anaconda-Snowflake-Kanal sind nicht für die Verwendung in Snowflake-UDFs vorgesehen, da UDFs innerhalb einer eingeschränkten Engine ausgeführt werden. Weitere Informationen dazu finden Sie unter Einsetzen von bewährten Sicherheitsmethoden.
Wenn Sie dann in einem Snowflake-Warehouse Abfragen ausführen, die gespeicherte Python-UDFs aufrufen, werden die Anaconda-Pakete nahtlos installiert und in dem virtuellen Warehouse für Sie zwischengespeichert.
Anzeigen installierter Pakete¶
Sie können eine Liste der Pakete und Module anzeigen, die eine UDF oder UDTF verwendet, indem Sie den Befehl DESCRIBE FUNCTION ausführen. Die Ausführung des Befehls DESCRIBE FUNCTION für eine UDF, dessen Handler in Python implementiert ist, gibt die Werte mehrerer Eigenschaften zurück, darunter eine Liste der importierten Module und Pakete sowie der installierten Pakete, der Funktionssignatur und des Rückgabetyps.
Wenn Sie den Bezeichner für die UDF angeben, müssen Sie auch die Typen der Funktionsparameter angeben, falls vorhanden.
desc function stock_sale_average(varchar, number, number);
Verwenden von Anaconda-Paketen¶
Ein Beispiel für die Verwendung eines importierten Anaconda-Pakets in einer Python-UDF finden Sie unter Importieren eines Pakets in einen Inline-Handler.
Festlegen von Paketrichtlinien¶
Sie können eine Paketrichtlinie verwenden, um auf Kontoebene Zulassungslisten und Sperrlisten für Python-Pakete von Drittanbietern aus Anaconda zu erstellen. Auf diese Weise können Sie strengere Auditing- und Sicherheitsanforderungen erfüllen und haben eine genauere Kontrolle darüber, welche Pakete in Ihrer Umgebung verfügbar oder gesperrt sind. Weitere Informationen dazu finden Sie unter Paketrichtlinien.
Performance von Warehouses im kalten Zustand¶
Für eine effizientere Ressourcenverwaltung werden neu eingerichtete virtuelle Warehouses nicht mit Anaconda-Paketen vorinstalliert. Stattdessen werden die Anaconda-Pakete bei Bedarf installiert, wenn eine UDF erstmals verwendet wird. Die Pakete werden für eine spätere UDF-Ausführung im selben Warehouse im Cache zwischengespeichert. Der Cache wird gelöscht, wenn das Warehouse angehalten wird. Dies kann bei der erstmaligen Verwendung einer UDF oder nach dem Fortsetzen des Warehouses zu einer langsameren Performance führen. Die zusätzliche Latenz könnte etwa 30 Sekunden betragen.
Lokale Entwicklung und Testen¶
Um das Erstellen einer Conda-Umgebung auf Ihrem lokalen Rechner für Entwicklung und Testen zu unterstützen, hat Anaconda einen Snowflake-Kanal eingerichtet, der eine Teilmenge der Pakete und Versionen spiegelt, die in der Snowflake-Python-UDF-Umgebung unterstützt werden. Sie können den Snowflake-Conda-Kanal für lokale Tests und Entwicklung kostenlos auf Grundlage der ergänzenden Bedingungen für eingebettete Software in den Anaconda-Nutzungsbedingungen verwenden.
Um z. B. eine neue Conda-Umgebung lokal über den Snowflake-Kanal zu erstellen, geben Sie in der Befehlszeile in etwa Folgendes ein:
conda create --name py38_env -c https://repo.anaconda.com/pkgs/snowflake python=3.8 numpy pandas
Beachten Sie, dass aufgrund von Plattformunterschieden Ihre lokale Conda-Umgebung möglicherweise nicht genau mit der Serverumgebung übereinstimmt.
Best Practices¶
Innerhalb der create function
-Anweisung sollte die Paketspezifikation (z. B. packages = ('numpy','pandas')
) nur die Top-Level-Pakete angeben, die die UDF direkt verwendet. Anaconda verwaltet die Abhängigkeiten der Pakete und installiert die erforderlichen Abhängigkeiten automatisch. Aus diesem Grund sollten Sie keine Abhängigkeitspakete angeben.
Wenn Sie keine Paketversion angeben, wird Anaconda die aktuelle Version des Pakets und dessen Abhängigkeiten installieren. Im Allgemeinen ist es nicht notwendig, eine bestimmte Paketversion anzugeben. Beachten Sie, dass die Versionsauflösung nur einmal beim Erstellen der UDF mit dem Befehl create function
ausgeführt wird. Danach wird die resultierende Versionsauflösung eingefroren, und es wird wieder dasselbe Set von Paketen verwendet, wenn diese UDF ausgeführt wird.
Ein Beispiel für die Verwendung der Paketspezifikation innerhalb der create function
-Anweisung finden Sie unter Importieren eines Pakets in einen Inline-Handler.
Bekannte Probleme mit Paketen von Drittanbietern¶
Performance bei einzeiligen Vorhersagen¶
Einige Data Science-Frameworks wie Scikit-learn und TensorFlow können bei einzeiligen ML-Vorhersagen langsam sein.
Um die Leistung zu verbessern, führen Sie anstelle einer einzeiligen Vorhersage eine Batchvorhersage aus. Konvertieren Sie dazu das Eingabe-Dataset in Snowflake-Arrays, und stellen Sie die Arrays im Vorhersagecode bereit. Die Batchverarbeitung kann mit tabellarischen Python-UDTFs, mit der ARRAY_AGG-Funktion Tabellarische Java-UDFs (UDTFs) oder mit Tabellarische JavaScript-UDFs (UDTFs) erfolgen.
Sie können auch vektorisierte Python-UDFs verwenden, um Python-Funktionen zu definieren, die Eingabezeilen in Batches empfangen, die für maschinelles Lernen und Data Science optimiert sind. Weitere Informationen dazu finden Sie unter Vektorisierte Python-UDFs.
Herunterladen von Daten auf Abruf aus Data Science-Bibliotheken¶
Einige Data Science-Bibliotheken wie NLTK, Keras und spaCy bieten Funktionen, mit denen bei Bedarf zusätzlicher Korpora, Daten und Modelle heruntergeladen werden können.
Das Herunterladen auf Abruf funktioniert jedoch bei Python-UDFs nicht, da einige Funktionen wie der Netzwerkzugang und das Schreiben in Dateien aufgrund von Snowflake-Sicherheitseinschränkungen deaktiviert sind.
Um dieses Problem zu umgehen, laden Sie die Daten in Ihre lokale Umgebung herunter, und stellen Sie diese dann der UDF über einen Snowflake-Stagingbereich bereit.
XGBoost¶
Bei Verwendung von XGBoost in einer UDF oder UDTF für parallele Vorhersagen oder Training muss die Parallelität für jede XGBoost-Instanz auf 1 gesetzt werden. Dadurch wird sichergestellt, dass XGBoost bei der Ausführung in der Snowflake-Umgebung für eine optimale Performance konfiguriert ist.
Beispiele:
import xgboost as xgb
model = xgb.Booster()
model.set_param('nthread', 1)
model.load_model(...)
import xgboost as xgb
model = xgb.XGBRegressor(n_jobs=1)
TensorFlow/Keras¶
Wenn Sie Tensorflow/Keras für die Vorhersage verwenden, benutzen Sie Model.predict_on_batch und nicht Model.predict.
Beispiel:
import keras
model = keras.models.load_model(...)
model.predict_on_batch(np.array([input]))