トレーニングモデル¶
Snowflake ML を使用して、一般的なオープンソースフレームワークで機械学習およびディープラーニングモデルを開発します。Snowflake ML は、柔軟な開発環境、効率的なデータアクセス、強力なコンピューティングリソースを、管理のオーバーヘッドなしに提供します。
Snowflake NotebooksまたはSnowflake ML ジョブ内でモデルをトレーニングできます。
Snowflake Notebooksは、機械学習に使用できるインタラクティブな環境です。機械学習ワークフローに Snowflake Notebooksを使用する方法の詳細については、 Notebooks on Container Runtime for ML をご参照ください。
Snowflake ML ジョブにより、どの環境からでも ML ワークフローを実行できます。Snowflake ML を使用する方法の詳細については、 Snowflake MLのジョブ をご参照ください。
With Snowflake Experiments, you can compare your trained models in an organized manner. Use information logged during model training to evaluate the results and select the best model for your needs. For more information, see Run an experiment to compare and select models.
オープンソースでトレーニング¶
Snowflake Notebooksまたは ML ジョブを使用すると、Container Runtime for ML にアクセスできます。Container Runtime for ML は、モデルのトレーニングに使用できる一般的なパッケージやフレームワークを備えた環境です。パッケージにはscikit-learn、numpy、scipyが含まれます。詳細については、 ML のContainer Runtime をご参照ください。
次の例では、scikit-learnを使ってロジスティック回帰モデルをトレーニングします。
import pandas as pd
from snowflake.ml.data.data_connector import DataConnector
from snowflake.snowpark.context import get_active_session
from sklearn.linear_model import LogisticRegression
# Get the active Snowpark session
session = get_active_session()
# Specify training table location
table_name = "TRAINING_TABLE" # Replace with your actual Snowflake table name
# Load table into DataConnector
data_connector = DataConnector.from_dataframe(session.table(table_name))
# Convert to pandas DataFrame
pandas_df = data_connector.to_pandas()
# Assuming 'TARGET' is the label column in your Snowflake table
label_column_name = 'TARGET'
# Separate features (X) and target (y)
X, y = pandas_df.drop(label_column_name, axis=1), pandas_df[label_column_name]
# Initialize and fit a Logistic Regression model
logistic_regression_model = LogisticRegression(max_iter=1000) # Increased max_iter for convergence
logistic_regression_model.fit(X, y)
scikit-learnに加えて、 XGBoost と LightGBM ライブラリを使用して、強力な分類、回帰、ランキングモデルを開発することができます。
以下の例では、Snowflake DataConnector を使用してSnowflakeテーブルからデータをロードし、それをpandas DataFrame に変換し、 XGBoost モデルをトレーニングします。DataConnector は、データのロードとpandasデータフレームの変換を高速化します。DataConnector の詳細については、 Snowflakeテーブルから構造化データをロードする をご参照ください。
from snowflake.ml.data.data_connector import DataConnector
from snowflake.snowpark.context import get_active_session
import xgboost as xgb
session = get_active_session()
# Specify training table location
table_name = "TRAINING_TABLE"
# Load table into DataConnector
data_connector = DataConnector.from_dataframe(session.table(table_name))
pandas_df = data_connector.to_pandas()
label_column_name = 'TARGET'
X, y = pandas_df.drop(label_column_name, axis=1), pandas_df[label_column_name]
clf = xgb.Classifier()
clf.fit(X, y)
ディープラーニングモデルのトレーニング¶
PyTorch 、 TensorFlow 、その他のフレームワークでディープラーニングモデルをトレーニングするために、 GPU を使用したコンテナランタイムイメージを使用することができます。プリインストールされているライブラリを使用することも、パブリックまたはプライベートリポジトリのパッケージを使ってベースイメージを拡張することもできます。
利用可能なコンピューティングプールからオンデマンドで GPU コンピューティングを取得できます。使用したリソースに対してのみ料金を支払います。
GPU コンテナランタイムイメージを使用すると、分散トレーニングなどの機能を使用して、大規模モデルの開発を加速できます。
DataConnector と分散トレーニングによる効率的なデータロードの例については、 Running Distributed PyTorch Models on Snowflake:An End-to-End ML Solution をご参照ください。
以下の例は、効率的にデータをロードしています。
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from snowflake.ml.data.data_connector import DataConnector
example_snowpark_dataframe = session.table("EXAMPLE_TRAINING_DATA")
# Connector from a Snowflake table
data_connector = DataConnector.from_dataframe(example_snowpark_dataframe)
# Load as a torch dataset
torch_dataset = data_connector.to_torch_dataset(batch_size=32)
train_loader = DataLoader(torch_dataset, batch_size=None)
label_col = 'TARGET'
feature_cols = ['FEATURE1', 'FEATURE2']
for batch_idx, batch in enumerate(dataloader):
y = batch_data.pop(label_col).squeeze()
X = torch.stack(
[tensor.squeeze() for key, tensor in batch.items() if key in feature_cols]
)
次の例は、モデルをトレーニングしています。
# ------------------------
# Tiny MLP for binary classification
# ------------------------
input_dim = X.shape[1]
class MLP(nn.Module):
def __init__(self, d_in):
super().__init__()
self.net = nn.Sequential(
nn.Linear(d_in, 64), nn.ReLU(),
nn.Linear(64, 32), nn.ReLU(),
nn.Linear(32, 1) # logits
)
def forward(self, x):
return self.net(x).squeeze(1)
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = MLP(input_dim).to(DEVICE)
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.BCEWithLogitsLoss()
# ------------------------
# Train
# ------------------------
EPOCHS = 5
for epoch in range(1, EPOCHS + 1):
model.train()
for xb, yb in train_loader:
xb, yb = xb.to(DEVICE), yb.to(DEVICE)
logits = model(xb)
loss = criterion(logits, yb)
opt.zero_grad()
loss.backward()
opt.step()
acc = evaluate(val_loader)
print(f"epoch {epoch} val_acc={acc:.3f}")
複雑なトレーニングタスクを処理する¶
大規模なデータセット、複雑なモデルアーキテクチャ、ハイパーパラメーターでモデルをトレーニングするには、多大な時間、コスト、そしてそのような複雑な処理を容易にするリソースへのアクセスが必要です。Snowflake ML を使えば、そのようなモデルを安心してトレーニングできます。
完全に管理されたトレーニングインフラ¶
Snowflake ML は、コンテナランタイム上のNotebooksと ML ジョブを通じて、完全に管理されたトレーニングインフラストラクチャを提供します。カスタムイメージを管理したり、リソースをプロビジョニングしたりする必要はありません。ワークロードを持ち込んで、管理者が決定したリストから適切なコンピュートノードを選択し、トレーニングを開始できます。
効率的かつ高速なデータ移動¶
大量のデータをトレーニングパッケージで処理するためにメモリにロードすると、時間がかかることがあります。特にpandasデータフレームのようなオブジェクトに直接読み込もうとする場合に遅くなります。Snowflake ML は、基盤となるコンピューティングプールの分散処理を使用することで、データのロードを効率化します。Data Connectorを使用して、Snowflakeのテーブルやステージから、pandasデータフレーム、 PyTorch データセット、 TensorFlow データセットなどのオープンソースオブジェクトにロードします。
分散トレーニングとハイパーパラメーターチューニング¶
大規模なデータセットで ML モデルをトレーニングすると、単一ノードのリソースを超えることがあります。Snowflakeの分散型 APIs を使用すると、フィーチャーエンジニアリングとトレーニングのワークフローを複数のノードに拡張し、パフォーマンスを向上させることができます。分散型 APIs を使用して、次のことができます。
snowflake.ml.modeling.preprocessingの分散前処理関数を活用します。ML のContainer Runtime で最適化されたトレーニング APIs を使用して、1つまたは複数のノードでモデルトレーニングをスケールアウトします。
Snowflake ML の 分散型 HPO を使用してハイパーパラメーターのチューニングを高速化します。また、
hyperoptやoptunaのようなオープンソースのライブラリを使用することもできます。
Snowflakeの分散 APIs を使用してワークフローを拡張するだけでなく、Rayを使用することもできます。Rayは、Pythonアプリケーションをスケールするためのシンプルで柔軟な方法を提供するオープンソースのフレームワークです。複数のノードで並列にコードを実行することができます。Snowflake ML でRayを使用する方法の詳細については、 Ray入門ガイド を参照してください。
MLOps との統合¶
Snowflakeは、Snowflake Notebooksおよび ML ジョブからアクセスできる、完全に統合された MLOps プラットフォームを提供します。これにより、本番環境で使用可能な機能を使用してモデルをトレーニングし、実験とモデルを管理し、トレーニングされたモデルを本番環境にデプロイすることができます。
MLOps ワークフローでは、以下の機能を使用できます。
フィーチャーストアを通じた機能の作成と管理
OSS と SnowflakeML APIs を使用したフィーチャー前処理を大規模に実行する
組み込みの実験追跡で実験を管理する
トレーニング済みモデルを登録して管理する
登録されたモデルに対して推論パイプラインを実行する
デプロイされたモデルのドリフトと精度を監視する
次のステップ¶
モデルをトレーニングした後、次のことができます。
パフォーマンスを最適化するために ハイパーパラメーターをチューニングする
大規模なモデルトレーニングのために パーティション全体でトレーニングする
モデルレジストリで モデルを登録する
推論のために モデルをデプロイする