モデルを比較および選択するための実験を実行する

Snowflake ML Experimentsでは、 実験 を設定して、モデルトレーニングの結果の評価を整理できます。これにより、ハイパーパラメーターの調整の結果、異なるターゲットメトリック、異なるモデルタイプの動作を整理された方法ですばやく比較し、ニーズに最適なモデルを選択することができます。各実験は、トレーニングのメタデータとアーティファクトである一連の 実行 で構成されます。Snowflakeは実行アーティファクトについて柔軟であるため、モデルの評価プロセスに役立つものを何でも送信できます。

実験が完了すると、結果は Snowsight によって表示されます。また、Pythonまたは SQL で実行アーティファクトをいつでも取得することができます。

注釈

Snowflake Experiments は snowflake-ml-python バージョン1.19.0以降を必要とします。

アクセス制御の要件

実験の作成には、実行アーティファクトが保存されるスキーマで CREATE EXPERIMENT 権限が必要です。実験の作成には、親データベースとスキーマで USAGE 権限が必要です。

実験を作成する

まず、実験を作成します。これには、実行情報を保存するために使用する既存のデータベースとスキーマが必要です。

実験サポートは snowflake.ml.experiment.ExperimentTracking クラスで利用できます。set_experiment(name: Optional[str]) メソッドを使用して、指定された名前の実験を開き、ログとアーティファクトのアクティブな実験コンテキストを設定します。まだ存在しない実験が作成されます。

次の例は、アクティブなデータベースとスキーマで My_Experiment という名前の実験を作成または開いて、既存の session を使用してアクティブな実験として設定する方法を示しています。

from snowflake.ml.experiment import ExperimentTracking

exp = ExperimentTracking(session=session)
exp.set_experiment("My_Experiment")

重要

ExperimentTracking クラスはシングルトンであり、一度にアクティブにできる実行は1つだけです。実験と実行はスレッドセーフではなく、 ExperimentTracking インスタンスが構成されたスレッドからのみ変更する必要があります。

実験実行を開始する

実験の各実行には、メトリック、パラメーター、アーティファクトの独自のセットがあります。この情報は、モデルのトレーニングとその結果に関する可視化とデータを提供するために、 Snowsight で使用されます。

ExperimentTracking インスタンスで start_run(name: Optional[str]) メソッドを使用して実行を開始します。これにより新しい Run が返されます。これは with ステートメントでの使用をサポートしています。Snowflakeは、実行がクリーンに完了し、実行範囲に関する推論が容易になるよう with ステートメントの使用を推奨しています。

with exp.start_run("my_run"):
  # .. Train your model and log artifacts

トレーニング情報を自動的にログに記録する

モデルトレーニング中に XGBoost 、 LightGBM またはKerasモデルのトレーニング情報を自動的にログに記録できます。自動ログは、トレーニングしているモデルに関する実験と情報を参照するコールバックを登録することによって実行されます。パラメーターまたはメトリックを調整する Model インスタンスでメソッドが呼び出されるたびに、アクティブな実行について実験に自動的にログが記録されます。

次の例は、サポートされているモデルのトレーニングごとに実験のコールバックを構成し、基本的なトレーニング実行を開始してアーティファクトをログに記録する方法を示しています。

# exp: ExperimentTracking

from xgboost import XGBClassifier

from snowflake.ml.experiment.callback.xgboost import SnowflakeXgboostCallback
from snowflake.ml.model.model_signature import infer_signature

sig = infer_signature(X, y)
callback = SnowflakeXgboostCallback(
    exp, model_name="name", model_signature=sig
)
model = XGBClassifier(callbacks=[callback])
with exp.start_run("my_run"):
    model.fit(X, y, eval_set=[(X, y)])

トレーニング情報とアーティファクトを手動でログに記録する

自動ログをサポートしていないモデルや、事前にトレーニング済みのモデルの場合は、Pythonで実験情報とアップロードアーティファクトを手動でログに記録できます。パラメーターはトレーニングモデルへの定数の入力であり、メトリックはモデル ステップ で評価されます。対応するステップとしてトレーニングエポックを表すように選択できます。次の例は、パラメーター、メトリック、アップロードアーティファクトをログに記録する方法を示しています。

注釈

デフォルトのステップ値は 0 です。

# Logging requires an active run for the exp: ExperimentTracker instance.

# Log model parameters with the log_param(...) or log_params(...) methods
exp.log_param("learning_rate", 0.01)
exp.log_params({"optimizer": "adam", "batch_size": 64})

# Log model metrics with the log_metric(...) or log_metrics(...) methods
exp.log_metric("loss", 0.3, step=100)
exp.log_metrics({"loss": 0.4, "accuracy": 0.8}, step=200)

# Log your model to the experiment's model registry with the log_model(...) method.
exp.log_model(model, model_name="my_model", signatures={"predict": model_signature})
exp.log_model(model, model_name="my_model", sample_input_data=data)

# Log local artifacts to an experiment run with the log_artifact(...) method.
exp.log_artifact('/tmp/file.txt', artifact_path='artifacts')

stdoutおよびstderr出力をログに記録する

Snowflake Notebookまたは MLジョブ のような他の SPCS ワークロードで実行がアクティブな場合、実行の一部としてstdoutとstderrの出力をログに記録できます。ライブログを有効にするには、以下のメソッドを呼び出します。

experiment.set_live_logging_status(True)

ライブログが有効な場合、ノートブックからのstdoutとstderr出力はSnowflakeのデフォルト :doc:` イベントテーブル </developer-guide/logging-tracing/event-table-setting-up>` に書き込まれます。キャプチャされた出力を表示するには、実験 UI に移動して実行を選択します。出力は Logs タブに表示されます。

この機能はレガシーノートブックでは機能しないことに注意してください。

実行を完了する

実行を完了すると、変更できなくなり、 Snowsight で終了したものとして表示されます。

with ステートメントの一部として実行を開始すると、スコープを終了した時に実行が自動的に完了します。それ以外の場合は、実験の end_run(name: Optional[str]) メソッドと完了する実行の名前を呼び出して、実行を終了できます。

experiment.end_run("my_run")

実験内の実行を比較する

実験の評価は Snowsight によって行われます。ナビゲーションメニューで、 AI & ML » Experiments を選択し、リストから調べる実験を選択します。

実行リストには、各メトリックの Run nameStatusCreated の日付、および列が表示されます。追加の列としてパラメーターを切り替えることもできます。実行ビューと実行比較ビューから、アーティファクト、メトリックチャート、リンクされたモデルバージョンなどの詳細を表示します。

注釈

リンクされたモデルのバージョンの表示は、 Modeling Lineage機能 の一部であり、Enterprise Edition以上のお客様のみ利用可能です。

実験では最大5回の実行を選択できます。実行を比較するには、:ui:`Compare`ボタンを選択します。比較ビューが表示され、実行メタデータ、パラメーター、メトリック、モデルのバージョン情報が表示されます。

Search and filter runs

You can programmatically search and filter runs using the list_metrics and list_params methods. Each method returns a Snowpark DataFrame with one row per run: list_metrics includes a run_name column and one float column per logged metric, while list_params includes a run_name column and one string column per logged parameter.

Because the results are Snowpark DataFrames, you can join, filter, and sort them using Snowpark expressions, or convert them to pandas for local analysis.

from snowflake.ml.experiment import ExperimentTracking
from snowflake.snowpark import functions as F

exp = ExperimentTracking(session)
exp.set_experiment("my_experiment")

run_names = ["RUN_1", "RUN_2"]

metrics = exp.list_metrics()
params  = exp.list_params()
runs    = metrics.join(params, on='"run_name"')

results = runs.filter(
  (F.col('"run_name"').isin(run_names))
  & (F.col('"loss"') > 0.3)
  & (F.col('"f1 score"') < 0.5)
  & (F.col('"model"').like("GPT%"))
)

results.show()

You can also retrieve metrics or parameters for a single run by passing a run_name argument:

single_run_metrics = exp.list_metrics(run_name="RUN_1")

実行からアーティファクトを取得する

実行中または実行後はいつでも、アーティファクトを取得できます。次の例は、 logs パスで実行の利用可能なアーティファクトを一覧表示し、実験 my_experiment における実行 my_runlogs/log0.txt アーティファクトをローカルディレクトリ /tmp にダウンロードする方法を示しています。

# exp: ExperimentTracking
exp.set_experiment("my_experiment")

exp.list_artifacts("my_run", artifact_path="logs")
exp.download_artifacts("my_run", artifact_path="logs/log0.txt", target_path="/tmp")

実行と実験を削除する

実験の終了後、実験とそれに関連する実行アーティファクトをすべて削除することができます。次の例では、実験 my_experiment を削除しています。

# exp: ExperimentTracking
exp.delete_experiment("my_experiment")

実験から個々の実行を削除することもできます。次の例では、実験 my_experiment から実行 my_run を削除しています。

# exp: ExperimentTracking
exp.set_experiment("my_experiment")
exp.delete_run("my_run")

制限事項

Snowflake Experimentsには以下の制限があります。

  • 各スキーマは500の実験に制限されています。

  • 各実験は500の実行に制限されています。

  • 実行は1000個の一意のパラメーターと200個の一意のメトリクスに制限されています。

コストの考慮事項

Snowflake Experimentsを使用するための追加コストはありません。標準的なSnowflake消費ベースのコストが発生します。これらには次が含まれます。

  • 実行アーティファクトを保存するためのコスト。ストレージコストに関する一般情報については、 ストレージコストの調査 をご参照ください。

  • データ可視化のコスト。UIのチャートは仮想ウェアハウスによって生成されます。詳細については、 クレジット使用状況の表示 をご参照ください。