ML のContainer Runtime

概要

Container Runtime for ML は、 Snowpark Container Services 上の機械学習用に構築された、設定済みのカスタマイズ可能な環境のセットであり、モデルのトレーニング、ハイパーパラメータのチューニング、バッチ推論、ファインチューニングなどのインタラクティブな実験やバッチ ML ワークロードをカバーします。これらのフレームワークには、最も人気のある機械学習やディープラーニングのフレームワークが含まれています。Snowflakeノートブックと併用することで、エンド・ツー・エンドで ML のエクスペリエンスを提供します。

実行環境

Container Runtime for ML は、Snowflake 内でのさまざまな開発タスク(ML)をサポートするパッケージとライブラリを備えた環境を提供します。プリインストールされているパッケージに加えて、公開されている PyPI リポジトリや、組織内での使用を承認されたパッケージのリストを提供する内部でホストされているパッケージリポジトリなどの外部ソースからパッケージをインポートすることができます。

カスタム Python ML ワークロードおよびサポートされるトレーニング APIs の実行は、 Snowpark Container Services 内で行われ、 CPU または GPU のコンピュートプール上で実行できます。Snowflake ML APIs を使用する場合、Container Runtime for ML は利用可能なリソースに処理を分散します。

分散前処理

Snowflake ML モデリングとデータのロード APIs は、Snowflake ML の分散処理フレームワークの上に構築されており、利用可能なコンピュートパワーをフルに活用することで、リソースの利用率を最大化します。デフォルトでは、このフレームワークはマルチ-GPU ノードのすべての GPUs を使用し、オープンソースパッケージと比較してパフォーマンスが大幅に向上し、全体的な実行時間が短縮されます。

ML 処理における作業負荷の分散を示す図。

データのロード中を含む機械学習ワークロードは、Snowflakeが管理するコンピュート環境で実行されます。このフレームワークは、モデルのトレーニングやデータのロードなど、手元のタスクの特定の要件に基づいてリソースを動的にスケーリングすることができます。各タスクの GPU 、メモリ割り当てを含むリソース数は、提供される APIs を使って簡単に設定できます。

データのロード中の最適化

Container Runtimeは、Snowflakeデータソース(テーブル、 DataFrames 、およびDatasetsを含む)を、 PyTorch や TensorFlow などの一般的な ML フレームワークに接続できるデータコネクターセット APIs を提供し、マルチコアや GPUs を最大限に活用します。データのロード後は、オープンソースパッケージ、または以下に説明する分散バージョンを含む Snowflake ML APIs のいずれかを使用してデータを処理できます。これらの APIs は、 snowflake.ml.data 名前空間にあります。

snowflake.ml.data.data_connector.DataConnector クラスは、Snowpark DataFrames または Snowflake ML Datasets を TensorFlow または PyTorch DataSets または Pandas DataFrames に接続します。以下のクラスメソッドのいずれかを使用して、コネクタをインスタンス化します。

  • DataConnector.from_dataframe: Snowpark を受け入れます DataFrame。

  • DataConnector.from_dataset: 名前とバージョンで指定されたSnowflake ML データセットを受け入れます。

  • DataConnector.from_sources: ソースのリストを受け入れます。各ソースは、 DataFrame またはデータセットです。

コネクタをインスタンス化したら(data_connector などでインスタンスを呼び出します)、以下のメソッドを呼び出して、希望する種類の出力を生成します。

  • data_connector.to_tf_dataset: TensorFlow で使用するのに適した TensorFlow データセットを返します。

  • data_connector.to_torch_dataset: PyTorch で使用するのに適した PyTorch データセットを返します。

これらの APIs の詳細については、 Snowflake ML API リファレンス をご参照ください。

オープンソースによる構築

基礎となる CPU および GPU イメージには、一般的な ML パッケージがあらかじめ含まれており、 pip を使用して追加ライブラリをインストールする柔軟性もあるため、ユーザーは Snowflake からデータを移動することなく、Snowflake Notebooks 内で使い慣れた革新的なオープンソースフレームワークを使用することができます。データのロード、トレーニング、およびハイパーパラメータの最適化にSnowflakeの分散 APIs 、一般的な OSS パッケージの使い慣れた APIs 、インターフェイスを少し変更するだけで構成をスケーリングできるようにすることで、処理をスケーリングできます。

次のコードは、これら APIs を用いて XGBoost 分類器を作成す る例です:

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

最適化されたトレーニング

Container Runtime for ML は、コンテナー環境の可用性リソースを最大限に活用する分散トレーニング APIs のセット(分散バージョン LightGBM、 PyTorch、 XGBoost を含む)を提供します。これらは、 snowflake.ml.modeling.distributors 名前空間にあります。分散クラスの APIs は標準バージョンのものと類似しています。

これらの APIs の詳細については、 API リファレンス をご参照ください。

XGBoost

プライマリ XGBoost クラスは snowflake.ml.modeling.distributors.xgboost.XGBEstimator になります。関連するクラスには次が含まれます。

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

この API の操作例については、Snowflake Container Runtime for ML GitHub リポジトリの XGBoost on GPU ノートブック例をご参照ください。

LightGBM

プライマリ LightGBM クラスは snowflake.ml.modeling.distributors.lightgbm.LightGBMEstimator になります。関連するクラスには次が含まれます。

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

この API の操作例については、Snowflake Container Runtime for ML GitHub リポジトリの LightGBM on GPU ノートブック例をご参照ください。

PyTorch

プライマリ PyTorch クラスは snowflake.ml.modeling.distributors.pytorch.PyTorchDistributor になります。関連クラスと関数は以下の通りです。

  • 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

この API の操作例については、Snowflake Container Runtime for ML GitHub リポジトリの PyTorch on GPU ノートブック例をご参照ください。

Snowflake ML モデリング APIs

Snowflake ML のモデリング APIs が Notebooks で使用される場合、 snowflake.ml.modeling.preprocessing APIs を除いて、すべての実行はクエリウェアハウスではなくコンテナーランタイム上で行われます。

制限事項

  • Snowflake ML Modeling API は、 predictpredict_probapredict_log_proba の推論メソッドのみを Container Runtime for ML でサポートしています。その他のメソッドはクエリウェアハウスで実行されます。

  • Snowflake ML Modeling API は、Container Runtime for ML 上で sklearn 互換パイプラインのみをサポートします。

  • Snowflake ML Modeling API は、Container Runtime for ML の前処理やメトリクスクラスをサポートしていません。これら APIs はクエリウェアハウスで実行されます。

  • fitpredictscore のメソッドは、Container Runtime for ML 上で実行されます。その他のSnowflake ML メソッドはクエリウェアハウスで実行されます。

  • XGBoost または LightGBM では sample_weight_cols はサポートされていません。

次のステップ