Snowflake Container Runtime

概要

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

実行環境

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

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

Container Runtimeはバージョン管理されており、特定のランタイム環境を選択したり、ワークロードを特定のバージョンに固定したり、更新されたコンテナーランタイム環境に自分のペースで移行したりできます。

分散前処理

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 名前空間にあります。

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

コネクタをインスタンス化したら(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

CPU コンテナランタイムには、GPU コンテナランタイムとは異なるパッケージがあります。以下のセクションに、各コンテナランタイム内で利用可能なパッケージをリストします。

Snowflake Container Runtimeのパッケージ

Snowflake Container Runtimeで利用可能なパッケージの完全なリストは、:doc:`Container Runtimeリリースノート</developer-guide/snowflake-ml/container-runtime/releases>`の一部として管理されています。

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

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

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

XGBoost

XGBoostのプライマリクラスは:class:`snowflake.ml.modeling.distributors.xgboost.XGBEstimator`です。関連するクラスには次が含まれます。

  • :class:``snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig``snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig`

このAPIの使用例については、Snowflake Container RuntimeのGitHubリポジトリにある`XGBoost on GPU<https://github.com/Snowflake-Labs/sfguide-getting-started-with-container-runtime-apis/blob/main/XGBoost_on_GPU_Quickstart.ipynb>`_サンプルノートブックをご参照ください。

LightGBM

LightGBMのプライマリクラスは:class:`snowflake.ml.modeling.distributors.lightgbm.LightGBMEstimator`です。関連するクラスには次が含まれます。

  • :class:``snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig``snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig`

このAPIの使用例については、Snowflake Container RuntimeのGitHubリポジトリにある`LightGBM on GPU<https://github.com/Snowflake-Labs/sfguide-getting-started-with-container-runtime-apis/blob/main/LightGBM_on_GPU_Quickstart.ipynb>`_サンプルノートブックをご参照ください。

PyTorch

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

  • :class:``snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig``snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig`

  • :class:``snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig``snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig`

  • :class:``snowflake.ml.modeling.distributors.pytorch.Context``snowflake.ml.modeling.distributors.pytorch.Context`

  • :class:``snowflake.ml.modeling.distributors.pytorch.get_context``snowflake.ml.modeling.distributors.pytorch.get_context`

このAPIの使用例については、Snowflake Container RuntimeのGitHubリポジトリにある`PyTorch on GPU<https://github.com/Snowflake-Labs/sfguide-getting-started-with-container-runtime-apis/blob/main/PyTorch_on_GPU_Quickstart.ipynb>`_サンプルノートブックをご参照ください。

次のステップ

  • Container Runtimeを使用してSnowflake Notebookを試すには、:doc:`/developer-guide/snowflake-ml/notebooks-on-spcs`をご参照ください。