Batch-Inferenzjobs¶
Bemerkung
Vorschau-Feature – Öffentlich
Wird in der öffentlichen Vorschau seit snowflake-ml-python Version 1.26.0 unterstützt.
Verwenden Sie Snowflake Batch-Inferenz, um effiziente, umfangreiche Modell-Inferenzen für statische oder regelmäßig aktualisierte Datensets zu ermöglichen. Die Batch-Inferenz-API nutzt Snowpark Container Services (SPCS), um eine verteilte Verarbeitungsschicht bereitzustellen, die für einen massiven Durchsatz und Kosteneffizienz optimiert ist.
Wann Batch-Inferenz verwendet werden sollte¶
Verwenden Sie die Methode run_batch für folgende Workloads:
Verarbeiten von Bild-, Audio- oder Videodateien oder Verwenden von multimodalen Modellen mit unstrukturierten Daten
Ausführen von Inferenz über Millionen oder Milliarden von Zeilen
Ausführen von Inferenz als diskreter, asynchroner Stagingbereich in einer Pipeline
Integrieren von Inferenz als einen Schritt in einer Airflow DAG oder Snowflake-Aufgabe.
Einschränkungen¶
Bei den multimodalen Anwendungsfällen wird die Verschlüsselung nur auf der Serverseite unterstützt
Partitionierte Modelle werden nicht unterstützt
Erste Schritte¶
Verbinden mit Model Registry¶
Stellen Sie eine Verbindung zur Snowflake Model Registry her und rufen Sie die Modellreferenz ab als:
Batch-Job ausführen¶
Diese API nutzt den Snowpark Container Services (SPCS)-Job, um den Inferenz-Workload zu starten. Nach der Ausführung der Inferenz wird die Berechnung automatisch heruntergefahren, damit Ihnen keine zusätzlichen Kosten entstehen. Allgemein zusammengefasst sieht diese API wie folgt aus:
Jobverwaltung¶
Mit den folgenden Methoden können Sie eine Liste von Jobs abrufen, einen Job abbrechen, das Handle eines Jobs abrufen oder einen Job löschen:
Bemerkung
Die result-Funktion in ML-Job-APIs wird für Batch-Inferenzjobs nicht unterstützt.
Inferenzdaten angeben¶
Sie können strukturierte Daten oder unstrukturierte Daten für die Batch-Inferenz verwenden. Um strukturierte Daten für Ihren Workflow zu verwenden, können Sie entweder eine SQL-Abfrage oder einen Datenframe für die „run_batch“-Methode bereitstellen.
Bei unstrukturierten Daten können Sie auf Ihre Dateien von einem Snowflake-Stagingbereich aus verweisen. Um auf Ihre Dateien zu verweisen, erstellen Sie einen Datenframe mit den Dateipfaden.
Sie stellen Ihren Datenframe der Methode „run_batch“ zur Verfügung. „run_batch“ stellt den Inhalt der Dateien für das Modell bereit.
Strukturierte Eingabe¶
Im Folgenden finden Sie Beispiele, die den Bereich der Eingabemöglichkeiten veranschaulichen:
Unstrukturierte Eingabe (multimodal)¶
Für unstrukturierte Daten kann die run_batch-Methode die Dateien aus den im Eingabe-Datenframe angegebenen vollqualifizierten Stagingbereichspfaden lesen. Das folgende Beispiel zeigt, wie Sie unstrukturierte Eingabedaten angeben:
Um automatisch alle Dateien in einem Stagingbereich als Datenframes aufzulisten, verwenden Sie Code wie den folgenden:
Ausdrücken des Datentyps¶
Run_batch konvertiert Ihre Dateien automatisch in die mit dem Modell kompatiblen Formate.
Ihr Modell kann Daten in einem der folgenden Formate akzeptieren:
RAW_BYTES
BASE64
Beispiel: Wenn Sie Bilder im PNG-Format in Ihrem Stagingbereich gespeichert haben und Ihr Modell RAW_BYTES akzeptiert, können Sie das Argument input_spec verwenden, um anzugeben, wie Snowflake Ihre Daten konvertiert.
Der folgende Beispielcode konvertiert Dateien in Ihrem Stagingbereich in RAW_BYTES:
Das Argument column_handling teilt dem Framework mit, dass die Pfadspalte von X einen vollständigen Stagingbereichspfad enthält, und ruft das Modell mit Raw-Bytes aus dieser Datei auf.
Ausgabe (output_spec)¶
Geben Sie ein Stagingbereichsverzeichnis zum Speichern der Ausgabe der Datei an, wie hier gezeigt:
Snowflake unterstützt derzeit Modelle, die Text ausgeben, und speichert diese als Parquet-Dateien. Sie können die Parquet-Dateien wie folgt in einen Snowpark-Datenframe konvertieren:
Übergeben von Parametern¶
Wenn die Signatur des Modells Parameter enthält, die mit ParamSpec definiert sind, können Sie Parameterwerte zur Inferenzzeit mithilfe des Arguments params in InputSpec übergeben. Jeder Parameter, der nicht im Dictionary enthalten ist, verwendet seinen Standardwert aus der Signatur.
Job-Spezifikation¶
Um Einstellungen auf Jobebene für Ihren Batch-Inferenz-Workload zu konfigurieren (z. B. die Anzahl der Worker, die Ressourcenzuweisung und die Ausführungsparameter), übergeben Sie eine JobSpec-Instanz als job_spec-Argument der run_batch-Methode. Siehe nachfolgendes Beispiel:
Best Practices¶
Verwenden einer Sentinel-Datei¶
Ein Job kann aus verschiedenen Gründen mittendrin fehlschlagen. Das Ausgabeverzeichnis kann daher Teildaten enthalten. Um den Abschluss des Jobs zu markieren, schreibt „run_batch“ eine Sentinel- oder Abschlussdatei mit _SUCCESS in das Ausgabeverzeichnis.
So vermeiden Sie eine teilweise oder falsche Ausgabe:
Die Ausgabedaten werden erst gelesen, nachdem die Sentinel-Datei gefunden wurde.
Geben Sie zunächst ein leeres Verzeichnis an, um zu beginnen.
Führen Sie „run_batch“ mit Modus = SaveMode.ERROR aus.
Beispiele¶
Verwenden eines kundenspezifischen Modells¶
Verwenden des Hugging Face-Modells¶
Verwenden des Hugging Face-Modells mit vLLM¶
Aufgabe: Textgenerierung¶
Aufgabe: Bildtext in Text umwandeln¶
Beispiele für Notebooks¶
Beispiele für durchgängig ausführbare finden Sie unter`Beispiel-Notebooks für Batch-Inferenz<https://github.com/Snowflake-Labs/sf-samples/tree/main/samples/ml/model_serving/batch_inference>`_ auf GitHub.