Container Runtime für ML

Überblick

Container Runtime für ML besteht aus einer Reihe von vorkonfigurierten, anpassbaren Umgebungen für maschinelles Lernen auf Snowpark Container Services, die interaktive Experimente und Batch-ML-Workloads wie Modelltraining, Hyperparameter-Tuning, Batch-Inferenz und Fine-Tuning abdecken. Dazu gehören die beliebtesten Frameworks für maschinelles Lernen und Deep Learning. In Verbindung mit Snowflake-Notebooks bieten sie ein umfassendes ML-Erlebnis.

Ausführungsumgebung

Container Runtime for ML bietet eine Umgebung mit Paketen und Bibliotheken, die eine Vielzahl von ML-Entwicklungsaufgaben innerhalb von Snowflake unterstützen. Zusätzlich zu den vorinstallierten Paketen können Sie Pakete aus externen Quellen importieren, z. B. aus öffentlichen PyPI-Repositorys oder intern gehosteten Paket-Repositorys, die eine Liste von Paketen bereitstellen, die für die Verwendung in Ihrer Organisation zugelassen sind.

Die Ausführung Ihrer benutzerdefinierten Python-ML-Workloads und der unterstützten Training-APIs erfolgt innerhalb von Snowpark Container Services, das die Möglichkeit bietet, auf CPU- oder GPU-Computepools zu laufen. Bei der Verwendung der Snowflake-ML APIs verteilt Container Runtime für ML die Verarbeitung über die verfügbaren Ressourcen.

Verteilte Verarbeitung

Die Modellierung und das Laden von Daten in Snowflake-ML APIs basieren auf dem verteilten Verarbeitungssystem von Snowflake-ML, das die Auslastung der Ressourcen maximiert, indem es die verfügbare Rechenleistung voll ausschöpft. Dieses Framework verwendet standardmäßig alle GPUs auf mehrerenGPU-Knoten, was im Vergleich zu Open-Source-Paketen erhebliche Leistungsverbesserungen bietet und die Laufzeit insgesamt verkürzt.

Das Diagramm zeigt, wie die Workload bei der Verarbeitung von ML verteilt wird.

Die Machine Learning-Workloads, einschließlich des Ladens von Daten, werden in einer von Snowflake verwalteten Rechenumgebung ausgeführt. Das Framework ermöglicht eine dynamische Skalierung der Ressourcen auf der Grundlage der spezifischen Anforderungen der jeweiligen Aufgabe, wie z. B. dem Training von Modellen oder dem Laden von Daten. Die Anzahl der Ressourcen, einschließlich GPU und die Zuweisung von Speicher für jede Aufgabe, kann einfach über die bereitgestellte APIs konfiguriert werden.

Optimiertes Laden von Daten

Die Container Runtime bietet eine Reihe von Datenkonnektoren APIs, die es ermöglichen, Snowflake-Datenquellen (einschließlich Tabellen, DataFrames und Datensets) mit gängigen ML-Frameworks wie PyTorch und TensorFlow zu verbinden und dabei die Vorteile mehrerer Kerne oder GPUs voll auszunutzen. Sobald die Daten geladen sind, können sie mit Open-Source-Paketen oder einer der ML-APIs von Snowflake verarbeitet werden. Diese APIs finden Sie im Namespace snowflake.ml.data.

Die Klasse snowflake.ml.data.data_connector.DataConnector verbindet die Snowpark-DataFrames oder Snowflake ML-Datensets mit TensorFlow oder PyTorch-DataSets oder Pandas-DataFrames. Klasse Instanziieren Sie einen Konnektor mit einer der folgenden Methoden der Klasse:

  • DataConnector.from_dataframe: Akzeptiert einen Snowpark-DataFrame.

  • DataConnector.from_dataset: Akzeptiert ein Snowflake-ML-Datenset, das durch Name und Version spezifiziert ist.

  • DataConnector.from_sources: Akzeptiert eine Liste von Quellen, von denen jede eine DataFrame oder ein Datenset sein kann.

Sobald Sie den Konnektor instanziiert haben (indem Sie die Instanz, zum Beispiel data_connector aufrufen), rufen Sie die folgenden Methoden auf, um die gewünschte Art von Ausgabe zu erzeugen.

  • data_connector.to_tf_dataset: Liefert ein TensorFlow-Datenset, das für die Verwendung mit TensorFlow geeignet ist.

  • data_connector.to_torch_dataset: Liefert ein PyTorch-Datenset, das für die Verwendung mit PyTorch geeignet ist.

Weitere Informationen zu diesen APIs finden Sie in der Snowflake ML API-Referenz.

Entwicklung mit Open Source

Mit den grundlegenden CPU- und GPU-Images, die bereits mit gängige ML-Pakete enthalten, und der Flexibilität, zusätzliche Bibliotheken über pip zu installieren, können Benutzer vertraute und innovative Open-Source-Frameworks innerhalb von Snowflake Notebooks einsetzen, ohne Daten aus Snowflake herauszubewegen. Sie können die Verarbeitung skalieren, indem Sie die verteilten APIs von Snowflake für das Laden von Daten, das Training und die Optimierung von Hyperparametern verwenden – mit den vertrauten APIs von gängigen-OSS Paketen und kleinen Änderungen an der Weboberfläche zur Konfiguration der Skalierung.

Der folgende Code veranschaulicht die Erstellung eines XGBoost-Klassifikators unter Verwendung dieser APIs:

from snowflake.snowpark.context import get_active_session
from snowflake.ml.data.data_connector import DataConnector
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()

# Use the DataConnector API to pull in large data efficiently
df = session.table("my_dataset")
pandas_df = DataConnector.from_dataframe(df).to_pandas()

# Build with open source

X = df_pd[['feature1', 'feature2']]
y = df_pd['label']

# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)

# Train in memory
model = xgb.XGBClassifier()
model.fit(X_train, y_train)

# Predict
y_pred = model.predict(X_test)
Copy

Optimiertes Training

Container Runtime for ML bietet eine Reihe von APIs für verteiltes Training, einschließlich verteilter Versionen von LightGBM, PyTorch und XGBoost, die die verfügbaren Ressourcen in der Container-Umgebung voll ausnutzen. Diese finden Sie im Namespace snowflake.ml.modeling.distributors. Die APIs der verteilten Klassen sind ähnlich wie die der Standard Versionen.

Weitere Informationen zu diesen APIs finden Sie in der API-Referenz.

XGBoost

Die primäre Klasse XGBoost ist snowflake.ml.modeling.distributors.xgboost.XGBEstimator. Verwandte Klassen sind:

  • snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig

Ein Beispiel für die Arbeit mit diesem API finden Sie im XGBoost auf GPU Beispiel-Notebook im Snowflake Container Runtime für ML GitHub-Repository.

LightGBM

Die primäre Klasse LightGBM ist snowflake.ml.modeling.distributors.lightgbm.LightGBMEstimator. Verwandte Klassen sind:

  • snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig

Ein Beispiel für die Arbeit mit diesem API finden Sie im LightGBM auf GPU Beispiel-Notebook im Snowflake Container Runtime für ML GitHub-Repository.

PyTorch

Die primäre Klasse PyTorch ist snowflake.ml.modeling.distributors.pytorch.PyTorchDistributor. Verwandte Klassen und Funktionen sind:

  • snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig

  • snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig

  • snowflake.ml.modeling.distributors.pytorch.Context

  • snowflake.ml.modeling.distributors.pytorch.get_context

Ein Beispiel für die Arbeit mit diesem API finden Sie im PyTorch auf GPU Beispiel-Notebook im Snowflake Container Runtime für ML GitHub-Repository.

Snowflake ML Modeling APIs

Wenn Snowflake ML APIs in einem Notebook verwendet werden, erfolgt die gesamte Ausführung in Container Runtime und nicht im Abfrage-Warehouse, mit Ausnahme der snowflake.ml.modeling.preprocessing APIs, die im Abfrage-Warehouse ausgeführt werden.

Einschränkungen

  • Die Snowflake ML Modeling API unterstützt nur predict-, predict_proba- und predict_log_proba- Inferenzmethoden auf Container Runtime for ML. Andere Methoden werden im Abfrage-Warehouse ausgeführt.

  • Die Snowflake ML Modeling API unterstützt nur sklearn-kompatible Pipelines auf Container Runtime for ML.

  • Snowflake ML Modeling API unterstützt keine Vorverarbeitungs- oder Metrikklassen auf Container Runtime for ML. Diese APIs werden im Abfrage-Warehouse ausgeführt.

  • Die Methoden fit, predict und score werden auf Container Runtime für ML ausgeführt. Andere Snowflake-ML-Methoden werden im Abfrage-Warehouse ausgeführt.

  • sample_weight_cols wird für die XGBoost- oder LightGBM- nicht unterstützt.

Nächste Schritte