Snowflake ML Jobs¶
Verwenden Sie Snowflake ML Jobs, um Workflows des maschinellen Lernens (ML) innerhalb von Snowflake ML Container-Laufzeiten auszuführen. Sie können sie von jeder Entwicklungsumgebung aus ausführen. Sie müssen den Code nicht in einem Snowflake-Arbeitsblatt oder -Notizbuch ausführen. Verwenden Sie Jobs, um die Infrastruktur von Snowflake für ressourcenintensive Aufgaben innerhalb Ihres Entwicklungsworkflows zu nutzen. Informationen zur lokalen Einrichtung von Snowflake ML finden Sie unter Lokale Verwendung von Snowflake ML.
Wichtig
Snowflake ML-Jobs sind in snowflake-ml-python Version 1.9.2 und höher verfügbar.
Mit Snowflake ML Jobs können Sie Folgendes tun:
Führen Sie ML-Workloads auf Snowflake Computepools aus, einschließlich GPU- und CPU-Instanzen mit hohem Speicherbedarf.
Verwenden Sie Ihre bevorzugte Entwicklungsumgebung wie VS Code oder Jupyter Notebooks.
Installieren und verwenden Sie benutzerdefinierte Python-Pakete in Ihrer Laufzeitumgebung.
Nutzen Sie Snowflakes verteilte APIs, um das Laden von Daten, das Training und die Abstimmung der Hyperparameter zu optimieren.
Integrieren Sie mit Orchestrierungstools wie Apache Airflow.
Überwachen und verwalten Sie Aufträge mit Hilfeder Snowflake-APIs.
Mit diesen Funktionen können Sie Folgendes tun:
Führen Sie ressourcenintensives Training auf großen Datensätzen durch, die GPU-Beschleunigung oder erhebliche Rechenressourcen erfordern.
Bringen Sie ML-Workflows in Produktion, indem Sie ML-Code von der Entwicklung zur Produktion mit programmatischer Ausführung durch Pipelines verschieben.
Behalten Sie Ihre bestehende Entwicklungsumgebung bei und nutzen Sie gleichzeitig die Rechenressourcen von Snowflake.
Heben und verschieben Sie OSS ML-Workflows mit minimalen Codeänderungen.
Arbeiten Sie direkt mit großen Snowflake-Datensätzen, um Datenbewegungen zu reduzieren und teure Datenübertragungen zu vermeiden.
Voraussetzungen¶
Installieren Sie das Snowflake ML Python-Paket in Ihrer Python 3.10 Umgebung.
Die Standardgröße des Computepools verwendet die Instanzfamilie CPU_X64_S. Die minimale Anzahl von Knoten ist 1 und die maximale ist 25. Sie können den folgenden SQL-Befehl verwenden, um einen benutzerdefinierten Computepool zu erstellen:
Snowflake ML Jobs erfordern eine Snowpark-Sitzung. Verwenden Sie den folgenden Code, um sie zu erstellen:
Informationen zum Erstellen einer Sitzung finden Sie unter Erstellen einer Sitzung.
Führen Sie einen Snowflake ML Job aus¶
Sie können einen Snowflake ML Job auf eine der folgenden Arten ausführen:
Verwenden eines Funktions-Decorators in Ihrem Code
Übermittlung ganzer Dateien oder Verzeichnisse mit Python-API.
Python-Funktion als Snowflake ML-Job ausführen¶
Verwenden Sie Function Dispatch, um einzelne Python-Funktionen mit dem Decorator @remote auf den Rechenressourcen von Snowflake auszuführen.
Mithilfe von @remote können Sie Folgendes tun:
Serialisieren Sie die Funktion und ihre Abhängigkeiten.
Laden Sie sie in einen bestimmten Snowflake Stagingbereich hoch.
Führen Sie sie innerhalb einer bestimmten Container-Laufzeit aus.
Der folgende beispielhafte Python-Code verwendet den Decorator @remote, um einen Funktionsaufruf als Snowflake-ML-Job zu übermitteln:
Bemerkung
Für das Übermitteln eines Jobs ist eine vorhandene Snowpark-Session erforderlich; siehe:ref:label-snowflake_ml_jobs_prerequisites für Details.
Der Aufruf einer dekorierten @remote-Funktion gibt ein Snowflake MLJob-Objekt zurück, das zur Verwaltung und Überwachung der Jobausführung verwendet werden kann. Weitere Informationen dazu finden Sie unter Verwalten von ML-Jobs.
Eine Python-Datei als Snowflake ML Job ausführen¶
Führen Sie Python-Dateien oder Projektverzeichnisse auf Snowflake-Rechenressourcen aus. Dies ist nützlich, wenn:
Sie komplexe ML-Projekte mit mehreren Modulen und Abhängigkeiten haben.
Sie die Trennung zwischen lokaler Entwicklung und Produktionscode aufrechterhalten wollen.
Sie Skripte ausführen müssen, die Befehlszeilenargumente verwenden.
Sie mit bestehenden ML-Projekten arbeiten, die nicht speziell für die Ausführung auf Snowflake Compute entwickelt wurden.
Die Snowflake Job-API bietet drei Hauptmethoden für die Übermittlung von dateibasierten Nutzlasten:
:meth:
submit_file()`submit_file: Für die Ausführung einzelner Python-Dateiensubmit_directory(): Für die Ausführung von Python-Projekten, die mehrere Dateien und Ressourcen umfassen:meth:
submit_from_stage()`submit_from_stage: Für die Ausführung von Python-Projekten, die in einem Snowflake-Stagingbereich gespeichert sind
Beide Methoden unterstützen Folgendes:
Übergabe von Argumenten in der Befehlszeile
Konfiguration der Umgebungsvariablen
Benutzerdefinierte Abhängigkeitsangaben
Verwaltung der Projektressourcen über die Snowflake-Stagingbereiche
File Dispatch ist besonders nützlich, um bestehende ML-Workflows zu produzieren und eine klare Trennung zwischen Entwicklungs- und Ausführungsumgebung aufrechtzuerhalten.
Der folgende Python-Code übermittelt eine Datei als Snowflake ML-Job:
Der folgende Python-Code übermittelt ein Verzeichnis als Snowflake ML-Job:
Der folgende Python-Code übermittelt ein Verzeichnis aus einem Snowflake-Stagingbereich als Snowflake ML-Job:
Die Übermittlung einer Datei oder eines Verzeichnisses gibt ein Snowflake MLJob-Objekt zurück, das zur Verwaltung und Überwachung der Jobausführung verwendet werden kann. Weitere Informationen dazu finden Sie unter Verwalten von ML-Jobs.
Ausführen eines Snowflake-ML-Jobs für eine bestimmte Container-Laufzeit¶
Der Decorator @remote sowie die Funktionen functions submit_directory(), submit_from_stage() und submit_file() unterstützen alle das Schlüsselwort runtime_environment. Wenn Sie dieses Schlüsselwort nicht in Ihrem Decorator-Element oder Funktionsaufruf angeben, verwendet Snowflake automatisch die neueste verfügbare Version von Snowflake Container Runtime in Ihrem Computepool.
Um eine Container-Laufzeit für Ihren ML-Job anzugeben, verwenden Sie das Schlüsselwort runtime_environment mit einem Zeichenfolgenwert der zu verwendenden Container Runtime-Version. Die vollständige Liste der verfügbaren Versionen und die standardmäßig in diesen Umgebungen enthaltenen Informationen finden Sie unter :doc:` Container Runtime-Releases </developer-guide/snowflake-ml/container-runtime/releases>`.
Das folgende Beispiel zeigt, wie Sie eine Funktion mit dem Decorator @remote an Snowflake Container Runtime Version 2.3 anheften:
Unterstützung zusätzlicher Nutzlasten in Übermittlungen¶
Beim Übermitteln einer Datei, eines Verzeichnisses oder aus einem Stagingbereich werden zusätzliche Nutzdaten für die Verwendung während der Jobausführung unterstützt. Der Importpfad kann explizit angegeben werden. Andernfalls wird er vom Speicherort der zusätzlichen Nutzlast abgeleitet.
Wichtig
Sie können nur einzelne Python-Dateien aus einem Stagingbereich laden.
Zugriff auf Snowpark-Sitzung über ML-Jobs¶
Beim Ausführen von ML-Jobs in Snowflake ist eine Snowpark-Sitzung im Ausführungskontext automatisch verfügbar. Sie können über die folgenden Ansätze auf das Sitzungsobjekt aus Ihrer ML-Job-Nutzlast zugreifen:
Die Snowpark-Sitzung kann für den Zugriff auf Snowflake-Tabellen, -Stagingbereiche und andere Datenbankobjekte innerhalb Ihres ML-Jobs verwendet werden.
Rückgabe von Ergebnissen aus ML-Jobs¶
Snowflake ML-Jobs unterstützen die Rückgabe von Ausführungsergebnissen an die Clientumgebung. So können Sie berechnete Werte, trainierte Modelle oder andere Artefakte abrufen, die durch Ihre Job-Nutzlasten erzeugt werden.
Für das Dispatching von Funktionen geben Sie einfach einen Wert aus Ihrer dekorierten Funktion zurück. Der zurückgegebene Wert wird serialisiert und über die result()-Methode zur Verfügung gestellt.
Für dateibasierte Jobs verwenden Sie die spezielle __return__-Variable zur Angabe des Rückgabewerts.
Sie können das Ergebnis der Jobausführung über die MLJob.result()-API abrufen. Die API blockiert den aufrufenden Thread, bis der Job einen Endzustand erreicht hat, und gibt dann den Rückgabewert der Nutzlast zurück oder löst bei fehlgeschlagener Ausführung eine Ausnahme aus. Wenn die Nutzlast keinen Rückgabewert definiert, ist das Ergebnis None bei Erfolg.
ML-Jobdefinitionen¶
Eine ML-Jobdefinition erfasst die wiederverwendbaren Komponenten einesML-Jobs – Speicherort der Nutzlast, Computepool und zugehörige Konfiguration. So können Sie mehrere Jobs aus derselben Nutzlast mit unterschiedlichen Argumenten übermitteln, ohne die Nutzlast erneut hochladen zu müssen.
Bemerkung
ML-Jobdefinitionen sind in snowflake-ml-python Version 1.26 und höher verfügbar.
Um eine ML-Jobdefinition zu erstellen, verwenden Sie die MLJobDefinition-Klasse.
Die Funktion register verwendet runtime_environment als optionales Schlüsselwortargument zur Auswahl des Container-Image, das auf dem von Ihnen ausgewählten Computepool ausgeführt wird. Standardmäßig verwendet Ihre Jobdefinition die neueste verfügbare Version von Snowflake Container Runtime.
Um eine Container-Laufzeit für Ihren ML-Job anzugeben, verwenden Sie das Schlüsselwort runtime_environment mit einem Zeichenfolgenwert der zu verwendenden Container Runtime-Version. Die vollständige Liste der verfügbaren Versionen und die standardmäßig in diesen Umgebungen enthaltenen Informationen finden Sie unter :doc:` Container Runtime-Releases </developer-guide/snowflake-ml/container-runtime/releases>`.
Verwalten von ML-Jobs¶
Wenn Sie einen Snowflake-ML-Job übermitteln, erstellt die API eine MLJob-Instanz. Damit können Sie Folgendes tun:
Verfolgen des Job-Fortschritts durch Statusaktualisierungen
Probleme anhand detaillierter Ausführungsprotokolle beheben
Abrufen des Ausführungsergebnisses (falls vorhanden)
Mit der get_job() API können Sie ein MLJob-Objekt anhand seiner ID abrufen. Der folgende Python-Code zeigt, wie ein MLJob-Objekt abgerufen werden kann:
Abhängigkeiten verwalten¶
Die API für den Snowflake-ML-Job führt Nutzlasten innerhalb der Snowflake Container-Laufzeitumgebung-Umgebung aus. Die Umgebung enthält die am häufigsten verwendeten Python-Pakete für maschinelles Lernen und Data Science. Die meisten Anwendungsfälle sollten ohne zusätzliche Konfiguration sofort funktionieren. Wenn Sie kundenspezifische Abhängigkeiten benötigen, können Sie pip_requirements verwenden, um sie zu installieren.
Um benutzerdefinierte Abhängigkeiten zu installieren, müssen Sie den externen Netzwerkzugriff mithilfe einer externen Zugriffsintegration aktivieren. Sie können den folgenden SQL-Beispielbefehl verwenden, um den Zugriff zu ermöglichen:
Weitere Informationen zu Integrationen für den externen Zugriff finden Sie unter Erstellen und Verwenden einer Integration für den externen Zugriff.
Nachdem Sie den externen Netzwerkzugang bereitgestellt haben, können Sie die Parameter pip_requirements und external_access_integrations verwenden, um benutzerdefinierte Abhängigkeiten zu konfigurieren. Sie können Pakete verwenden, die in der Container Runtime-Umgebung nicht verfügbar sind oder wenn Sie bestimmte Versionen der Pakete verwenden.
Der folgende Python-Code zeigt, wie Sie benutzerdefinierte Abhängigkeiten für den remote-Decorator angeben können:
Der folgende Python-Code zeigt, wie Sie benutzerdefinierte Abhängigkeiten für die Methode submit_file() angeben können:
Private Paketzuführungen¶
Snowflake ML Jobs unterstützt auch das Laden von Paketen aus privaten Feeds wie JFrog Artifactory und Sonatype Nexus Repository. Diese Feeds werden häufig verwendet, um interne und proprietäre Pakete zu verteilen, die Kontrolle über die Versionen von Abhängigkeiten zu behalten und Sicherheit und Compliance zu gewährleisten.
Um Pakete aus einem privaten Feed zu installieren, müssen Sie Folgendes tun:
Erstellen Sie eine Netzwerkregel, um den Zugriff auf die URL des privaten Feeds zu erlauben.
Für Quellen, die eine einfache Authentifizierung verwenden, können Sie einfach eine Netzwerkregel erstellen.
Um den Zugriff auf eine Quelle über private Konnektivität (d. h. Private Link) zu konfigurieren, folgen Sie den Schritten unter Netzwerkausgang über private Konnektivität.
Erstellen Sie eine externe Zugriffsintegration mit der Netzwerkregel. Erteilen Sie der Rolle, die Aufträge einreichen wird, die Erlaubnis zur Verwendung von EAI.
Geben Sie die URL des privaten Feeds, die externe Zugriffsintegration und das/die Paket(e) an, wenn Sie den Job übermitteln.
Wenn Ihre private Feed-URL sensible Informationen wie Authentifizierungstoken enthält, verwalten Sie die URL durch Erstellen eines Snowflake-Geheimnisses. Erstellen Sie ein Geheimnis mithilfe von CREATE SECRET. Konfigurieren Sie Geheimnisse während der Übermittlung des Jobs mit dem spec_overrides-Argument.
Weitere Informationen über container.secrets finden Sie unter Feld containers.secrets.
Beispiele¶
Siehe Codebeispiele für ML-Jobs; dort finden Sie Beispiele für die Verwendung von Snowflake ML-Jobs.
Hinweise zu Kosten¶
Snowflake ML Jobs laufen auf Snowpark Container Services und werden nach Verbrauch abgerechnet. Informationen zu den Rechenkosten finden Sie unter Kosten von Snowpark Container Services.
Die Nutzdaten des Jobs werden in den Stagingbereich hochgeladen, der mit dem Argument stage_name angegeben wurde. Um zusätzliche Kosten zu vermeiden, müssen Sie diese bereinigen. Weitere Informationen finden Sie unter Erläuterungen zu den Speicherkosten und Untersuchen der Speicherkosten, um mehr über die mit dem Stagingbereich verbundenen Kosten zu erfahren.