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 ロールは、必要なリソースを作成し、それらのリソースに権限を付与するためのノートブックのセットアップ手順を完了する必要があります。詳細な手順については、 管理者の設定 をご参照ください。
Container Runtime for ML 上でのノートブックの作成¶
Container Runtime for ML 上でノートブックを作成する際は、ノートブックを実行するためのリソースを提供するウェアハウス、ランタイム、コンピューティングプールを選択します。選択したランタイムによって、ユースケースに応じて異なるPythonパッケージにアクセスできます。ウェアハウスのサイズやコンピューティングプールが異なれば、コストやパフォーマンスへの影響も異なります。これらの設定はすべて、必要に応じて後で変更することができます。
注釈
ACCOUNTADMIN、 ORGADMIN、 SECURITYADMIN のロールを持つユーザーは、Container Runtime上でノートブックを直接作成したり、所有したりすることはできません。これらのロールが作成したNotebooksや直接所有するNotebooksは実行できません。しかし、 ACCOUNTADMIN、 ORGADMIN、 SECURITYADMIN のロールが権限を継承するロール(PUBLIC ロールなど)がノートブックを所有している場合、それらのロールを使用してそのノートブックを実行することができます。
Container Runtime上で実行するSnowflake Notebookを作成するには、以下の手順に従います。
Snowsight にサインインします。
Notebooks を選択します。
+ Notebook を選択します。
ノートブックの名前を入力します。
ノートブックを格納するデータベースとスキーマを選択します。これらはノートブック作成後に変更することはできません。
注釈
データベースとスキーマは、ノートブックを格納するためだけに必要です。ノートブック内で、自分のロールがアクセスできるデータベースやスキーマをクエリすることができます。
Python環境として Run on container を選択します。
Runtime のタイプを選択します。 CPU または GPU のいずれかです。
- Compute pool を選択します。
Snowflakeは、各アカウントでノートブック(SYSTEM_COMPUTE_POOL_CPU、 SYSTEM_COMPUTE_POOL_GPU)を実行するための2つの コンピューティングプール を自動的にプロビジョニングします。
SQL クエリとSnowparkクエリを実行するために使用する選択済みのウェアハウスを変更します。
ノートブックを作成して開くには、 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上でノートブックが実行される場合、ロールは、ノートブックウェアハウス上ではなく、コンピューティングプール上で USAGE 権限を必要とします。コンピューティングプールは、Snowflakeによって管理される CPU ベースまたは GPU ベースの仮想マシンです。コンピューティングプールを作成する際には、 MAX_NODES パラメーターを1より大きくセットしてください。 なぜなら、各ノートブックは、実行するために1つのフルノードを必要とするからです。詳細については、 Snowpark Container Services: コンピューティングプールの操作 をご参照ください。
リソースの利用状況を表示できます。詳細については、 Snowflake Notebooksについて をご参照ください。
注釈
AWS では、 GPU コンピューティングプール上で動作するノートブックは、デフォルトのブートデバイスとしてハイパフォーマンスな NVMe ストレージを使用します。
Container Runtimeでノートブックを実行する¶
ノートブックを作成したら、セルを追加して実行することで、すぐにコードを実行し始めることができます。セルの追加については、 Snowflake Notebooks でコードを開発し、実行します。 をご参照ください。
追加パッケージのインポート¶
ノートブックを起動するためのプリインストールパッケージに加え、外部アクセスを設定したパブリックソースからパッケージをインストールすることができます。ステージやプライベートリポジトリに格納されているパッケージを使用することもできます。ACCOUNTADMIN ロール、または外部アクセス統合を作成できるロール(EAIs)を使用して、特定の外部エンドポイントへのアクセスをセットアップし、アクセス権を付与する必要があります。ノートブックの外部アクセスを有効にするには、 ALTER NOTEBOOK コマンドを使用します。アクセス権が付与されると、 Notebook settings に EAIs が表示されます。外部チャンネルからインストールを開始する前に、 EAIs を切り替えます。手順については、 外部アクセスとシークレットを持つノートブックの構成 をご参照ください。
以下の例では、コードセル内でpipインストールを使って外部パッケージをインストールします。
!pip install transformers scipy ftfy accelerate
ノートブック設定の更新¶
どのコンピューティングプールやウェアハウスを使用するかなどの設定は、右上の ノートブックアクション メニューからアクセスできる Notebook settings で随時更新できます。
Notebook settings で更新できる設定の中に、アイドルタイムアウト設定があります。アイドルタイムアウトのデフォルトは1時間で、最大72時間まで設定できます。SQL でこれを設定するには、 CREATE NOTEBOOK または ALTER NOTEBOOK コマンドを使用して、ノートブックの IDLE_AUTO_SHUTDOWN_TIME_SECONDS プロパティを設定します。
プライベートパッケージのインストール¶
Pip は、 基本認証コード を持つプライベートなソース JFrog Artifactory などからのパッケージのインストールをサポートしています。外部アクセス統合 (EAI) 用にノートブックを構成し、リポジトリにアクセスできるようにします。
アクセスするリポジトリを指定するネットワークルールを作成します。たとえば、このネットワークルールは JFrog リポジトリを指定します。
CREATE OR REPLACE NETWORK RULE jfrog_network_rule MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('<your-repo>.jfrog.io');
リポジトリへのアクセスを許可する外部アクセス統合 を作成します。
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION jfrog_integration ALLOWED_NETWORK_RULES = (jfrog_network_rule) ENABLED = TRUE; GRANT USAGE ON INTEGRATION jfrog_integration TO ROLE data_scientist;
外部アクセス構成にアクセスするには、ノートブックの右上にある
(Notebook actions メニュー) を選択します。
Notebook settings を選択し、 External access タブを選択します。
EAI を選択してリポジトリに接続します。
ノートブックが再起動します。
Notebooks が再起動したら、リポジトリからインストールできます。
!pip install hello-jfrog --index-url https://<user>:<token>@<your-repo>.jfrog.io/artifactory/api/pypi/test-pypi/simple
プライベート接続によるプライベートパッケージのインストール¶
プライベートパッケージリポジトリにプライベート接続が必要な場合、以下の手順に従ってアカウントを構成してください。サポートが必要な場合は、アカウント管理者と連携してネットワークルールをセットアップすることができます。
プライベート接続を使用したネットワークエグレス の手順に従って、プライベート接続を使用したネットワーク・イグレスをセットアップしてください。
ステップ1のネットワークルールで EAI を作成します。例:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION private_repo_integration ALLOWED_NETWORK_RULES = (PRIVATE_LINK_NETWORK_RULE) ENABLED = TRUE; GRANT USAGE ON INTEGRATION private_repo_integration TO ROLE data_scientist;
外部アクセス構成にアクセスするには、ノートブックの右上にある
(Notebook actions メニュー) を選択します。
Notebook settings を選択し、 External access タブを選択します。
EAI を選択してプライベートリポジトリに接続します。
ノートブックが再起動します。
Notebooksが再起動したら、リポジトリの
--index-url
をプロバイダーに指定します:!pip install my_package --index-url https://my-private-repo-url.com/simple
ML ワークロードの実行¶
Container Runtime上のNotebooksは、モデルトレーニングやパラメーターチューニングなどの ML ワークロードの実行に適しています。ランタイムは一般的な ML パッケージにプリインストールされています。外部統合アクセスをセットアップすれば、 !pip install
を使って必要なパッケージをインストールすることができます。
最適なエクスペリエンスを得るには、 OSS ライブラリを使用してモデルを開発するか、 OSS コンポーネントを使用するノートブックをインポートしてください。Container Runtimeには、以下のような最適化された APIs があります。
より高速なデータ取り込みのための
DataConnector
スケーラブルなモデルフィッティングのための分散トレーニング APIs
利用可能なすべてのリソースを効率的に活用するための分散ハイパーパラメーターチューニング APIs。
詳細については、 ML のContainer Runtime をご参照ください。
注釈
ランタイムには多くのパッケージがプリインストールされているため、バージョンを変更するにはカーネルの再起動が必要です。詳細については、 Notebooksの調査 をご参照ください。
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)
制限事項¶
Container Runtimeノートブックセッションの開始後、中断することなく最大7日間実行できます。7日経過後、 SPCS サービスメンテナンスイベントが予定されている場合は、中断されシャットダウンされることがあります。ノートブックのアイドル時間設定はそのまま適用されます。SPCS サービスメンテナンスの詳細については、 コンピューティングプールのメンテナンス を参照してください。
コスト/請求の考慮事項¶
Container Runtime上でノートブックを実行する場合、 ウェアハウス計算 と SPCS コンピューティングコスト の両方が発生する可能性があります。ウェアハウスは、クエリを実行するためにも、 Snowflake Notebooks の特定のフロントエンド機能をサポートするためにも必要です。例えば、Pythonの実行にコンピューティングプールを使用する場合、出力のレンダリングやインタラクティブなコンポーネントの処理にウェアハウスが必要になることがあります。
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)
ウェアハウスのコストについては、 ウェアハウスの概要 をご覧ください。