Notebooks on Container Runtime for ML

概要

Snowflake Notebooksは、Container Runtime for ML で実行できます。 Snowpark Container Services 搭載のContainer Runtime for ML は、柔軟なコンテナインフラストラクチャを提供し、さまざまなワークフローの構築と運用を完全にSnowflake内でサポートします。Container Runtime for ML は、高度なデータサイエンスと機械学習のワークロードをサポートするソフトウェアとハードウェアのオプションを提供します。 仮想ウェアハウス と比較して、Container Runtime for ML は、より柔軟な計算環境を提供します。この環境では、複数のソースからパッケージをインストールし、 GPU マシンタイプを含むコンピューティングリソースを選択することができる一方で、引き続き SQL クエリを実行しながら、パフォーマンスを最適化できます。

このドキュメントでは、 Container Runtime for ML 上でノートブックを使用する際の考慮事項について説明します。また、 Getting Started with Snowflake Notebook Container Runtime クイックスタートで、開発におけるContainer Runtime for ML の使用について詳しく学ぶことができます。

前提条件

Container Runtime for ML 上でのSnowflake Notebooksの使用に先立ち、 ACCOUNTADMIN ロールは、必要なリソースを作成し、それらのリソースに権限を付与するためのノートブックのセットアップ手順を完了する必要があります。詳細な手順については、 Snowflake Notebooks のユーザーセットアップ手順 をご参照ください。

Container Runtime for ML 上でのノートブックの作成

Container Runtime for ML 上でノートブックを作成する際は、ノートブックを実行するためのリソースを提供するウェアハウス、ランタイム、コンピューティングプールを選択します。選択したランタイムによって、ユースケースに応じて異なるPythonパッケージにアクセスできます。ウェアハウスのサイズやコンピューティングプールが異なれば、コストやパフォーマンスへの影響も異なります。これらの設定はすべて、必要に応じて後で変更することができます。

注釈

ACCOUNTADMIN、 ORGADMIN、 SECURITYADMIN のロールを持つユーザーは、Container Runtime for ML でノートブックを直接作成したり、所有したりすることはできません。これらのロールが作成したNotebooksや直接所有するNotebooksは実行できません。しかし、 ACCOUNTADMIN、 ORGADMIN、 SECURITYADMIN のロールが権限を継承するロール(PUBLIC ロールなど)がノートブックを所有している場合、それらのロールを使用してそのノートブックを実行することができます。

Container Runtime for ML 上で実行するSnowflake Notebookを作成するには、以下の手順に従います。

  1. Snowsight にサインインします。

  2. Notebooks を選択します。

  3. + Notebook を選択します。

  4. ノートブックの名前を入力します。

  5. ノートブックを格納するデータベースとスキーマを選択します。これらはノートブック作成後に変更することはできません。

    注釈

    データベースとスキーマは、ノートブックを格納するためだけに必要です。ノートブック内で、自分のロールがアクセスできるデータベースやスキーマをクエリすることができます。

  6. Python環境として Run on container を選択します。

  7. Runtime のタイプを選択します。 CPU または GPU のいずれかです。

  8. Compute pool を選択します。

  9. SQL クエリとSnowparkクエリを実行するために使用する選択済みのウェアハウスを変更します。

    使用するウェアハウスのサイズについては、 Snowflakeノートブックを実行するためのウェアハウスの推奨事項 をご参照ください。

  10. ノートブックを作成して開くには、 Create を選択します。

Runtime:

このプレビューは、 CPU と GPU の2種類のランタイムを提供します。それぞれのランタイムの画像には、Snowflakeによって検証・統合されたPythonパッケージとバージョンの基本セットが含まれています。すべてのランタイムの画像は、Snowpark Python、Snowflake ML、およびStreamlitによるデータ解析、モデリング、およびトレーニングをサポートします。

パブリックリポジトリから追加パッケージをインストールするには、pipを使用することができます。Snowflake Notebooksが外部エンドポイントからパッケージをインストールするには、外部アクセス統合(EAI)が必要です。EAIs を構成するには、 Snowflake Notebooks の外部アクセスの設定 をご参照ください。ただし、パッケージがすでにベース画像の一部になっている場合、pipインストールで異なるバージョンをインストールしても、パッケージのバージョンを変更することはできません。プリインストールパッケージのリストについては、 ML のContainer Runtime をご参照ください。

Compute pool:

コンピューティングプールは、ノートブックカーネルとPythonコードにコンピューティングリソースを提供します。より小さな CPU ベースのコンピューティングプールの使用からスタートし、コンピュータービジョンや LLMs/VLMs などの負荷の高い GPU 使用シナリオに最適化するために、より高メモリの GPU ベースのコンピューティングプールを選択するようにします。

各コンピュートノードが一度に実行できるノートブックは、ユーザー当たり1つに制限されています。ノートブックのコンピューティングプールを作成する際には、 MAX_NODES パラメーターを1より大きい値に設定する必要があります。例については、 コンピューティングリソースの作成 をご参照ください。 Snowpark Container Services コンピューティングプールの詳細については、 Snowpark Container Services: コンピューティングプールの操作 をご参照ください。

ノートブックが使用されていないときは、ノードのリソースを解放するためにシャットダウンすることを検討してください。接続ドロップダウンボタンで End session を選択すると、ノートブックをシャットダウンできます。

Container Runtime for ML 上でのノートブックの実行

ノートブックを作成したら、セルを追加して実行することで、すぐにコードを実行し始めることができます。セルの追加については、 Snowflake Notebooks でコードを開発し、実行します。 をご参照ください。

追加パッケージのインポート

ノートブックを起動するためのプリインストールパッケージに加え、外部アクセスを設定したパブリックソースからパッケージをインストールすることができます。ステージやプライベートリポジトリに格納されているパッケージを使用することもできます。ACCOUNTADMIN ロールまたは外部アクセス統合を作成できるロール(EAIs)を使用して、特定の外部エンドポイントへのアクセス権を設定し、付与する必要があります。ノートブックの外部アクセスを有効にするには、 ALTER NOTEBOOK コマンドを使用します。アクセス権が付与されると、 Notebook settings に EAIs が表示されます。外部チャンネルからインストールを開始する前に、 EAIs を切り替えます。手順については、 外部アクセス統合のプロビジョニング をご参照ください。

以下の例では、コードセル内でpipインストールを使って外部パッケージをインストールします。

!pip install transformers scipy ftfy accelerate
Copy

ノートブックの設定の更新

どのコンピューティングプールやウェアハウスを使用するかなどの設定は、右上の ワークシートのその他のアクション ノートブックアクション メニューからアクセスできる Notebook settings で随時更新できます。

Notebook settings で更新できる設定の中に、アイドルタイムアウト設定があります。アイドルタイムアウトのデフォルトは1時間で、最大72時間まで設定できます。SQL でこれを設定するには、 CREATE NOTEBOOK または ALTER NOTEBOOK コマンドを使用して、ノートブックの IDLE_AUTO_SHUTDOWN_TIME_SECONDS プロパティを設定します。

ML ワークロードの実行

Container Runtime for ML 上のNotebooksは、モデルトレーニングやパラメーターチューニングなどの ML ワークロードの実行に適しています。ランタイムには、一般的な ML パッケージがプリインストールされています。EAI をセットアップすれば、 !pip install を使って必要な他のパッケージをインストールできます。

注釈

Pythonプロセスによって、ロードされたモジュールがキャッシュされます。コードでパッケージをインポートする前に、インストールされているパッケージのバージョンを変更します。そうしないと、セッションを更新するためにノートブックセッションを切断し、再接続する必要が生じる場合があります。

以下の例では、 ML のワークロードに利用可能なライブラリのいくつかを使用する方法を示します。

OSS ML ライブラリの使用

以下の例では、 OSS ML ライブラリ、 xgboost、アクティブなSnowparkセッションを使用して、トレーニングのためにデータをメモリに直接フェッチします。

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
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

Snowflake ML モデリング APIs の使用

Snowflakeの ML モデリング APIs をContainer Runtime for ML 上で使用する場合、すべての実行(トレーニングと予測を含む)は、クエリウェアハウス上ではなく、コンテナランタイム上で直接行われます。Container RuntimeのSnowflake ML は、より高速にデータを引き出すことができ、大規模なトレーニングに推奨されます。GPU ランタイムにより、Snowflake ML はデフォルトですべての GPUs を使用してトレーニングを加速します。

以下のコードブロックの例では、モデリングに XGBoost を使用しています。

from snowflake.snowpark.context import get_active_session
from snowflake.ml.modeling.xgboost import XGBClassifier
from snowflake.ml.modeling.metrics import accuracy_score

session = get_active_session()
df = session.table("my_dataset")
feature_cols=['FEATURE1', 'FEATURE2']
label_col = 'LABEL'
predicted_col = [PREDICTED_LABEL]
df = df[features_cols + [label_col]]
# Split is pushed down to associated warehouse
train_df, test_df = df.random_split(weights=[0.85, 0.15], seed=34)

model = XGBClassifier(
    input_cols=feature_cols,
    label_cols=label_col,
    output_cols=predicted_col,
    # This will enable leveraging all GPUs on the node
    tree_method="gpu_hist",
)
# Train
model.fit(train_df)
# Predict
result = model.predict(test_df)

accuracy = accuracy_score(
df=result,
y_true_col_names=label_cols,
y_pred_col_names=predicted_col)
Copy

以下は、Light Gradient Boosting Machine(LightGBM)を使用した例です。

from snowflake.snowpark.context import get_active_session
from snowflake.ml.modeling.lightgbm import LGBMClassifier
from snowflake.ml.modeling.metrics import accuracy_score

session = get_active_session()
df = session.table("my_dataset")
feature_cols=['FEATURE1', 'FEATURE2']
label_col = 'LABEL'
predicted_col = [PREDICTED_LABEL]

df = df[features_cols + [label_col]]
# Split is pushed down to associated warehouse
train_df, test_df = df.random_split(weights=[0.85, 0.15], seed=34)

model = LGBMClassifier(
    input_cols=feature_cols,
    label_cols=label_col,
    ouput_cols=predicted_col,
    # This will enable leveraging all GPUs on the node
    device_type="gpu",
)

# Train
model.fit(train_df)
# Predict
result = model.predict(test_df)

accuracy = accuracy_score(
df=result,
y_true_col_names=label_cols,
y_pred_col_names=predicted_col)
Copy

コンテナに最適化された新しいライブラリの使用

Container Runtime for ML は、コンテナ環境での ML トレーニング用に特別にカスタマイズされた新しい APIs をプリインストールします。

データコネクタ APIs

データコネクタ APIs は、Snowflakeデータソース(テーブル、 DataFrames、データセットを含む)を一般的な ML フレームワーク(PyTorch や TensorFlow など)に接続するための単一インターフェイスを提供します。これらの APIs は、 snowflake.ml.data 名前空間にあります。

snowflake.ml.data.data_connector.DataConnector

Snowpark DataFrames またはSnowflake ML データセットを 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 リファレンス をご参照ください。

分散モデリング APIs

分散モデリング 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 Modeling API は、Container Runtime for ML 上で predictpredict_probapredict_log_proba の推論メソッドのみをサポートしています。その他のメソッドはクエリウェアハウスで実行されます。

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

  • Snowflake ML Modeling API は、Container Runtime for ML 上で preprocessing または metrics クラスをサポートしていません。これらはクエリウェアハウスで実行されます。

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

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

コスト/請求の考慮事項

Container Runtime for ML 上でノートブックを実行する場合、 ウェアハウス計算SPCS コンピューティングコスト の両方が発生する可能性があります。

Snowflake Notebooksは、パフォーマンスを最適化するために、 SQL クエリとSnowparkクエリを実行する仮想ウェアハウスを必要とします。このため、 SQL セルで SQL を使用し、PythonセルでSnowparkのプッシュダウンクエリを実行した場合、仮想ウェアハウスのコンピューティングコストも発生する可能性があります。以下の図は、各セルのタイプについて、どこで計算が発生するかを示しています。

ノートブックセルの計算分布を示す図。

たとえば、以下のPythonの例では、 xgboost ライブラリを使用しています。データはコンテナに取り込まれ、 Snowpark Container Services で計算が発生します。

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
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)
Copy

ウェアハウスのコストの詳細については、 ウェアハウスの概要 および Snowflakeノートブックを実行するためのウェアハウスの推奨事項 をご参照ください。