メインコンテンツへスキップ
W&B Python SDK を使用して、機械学習の実験をトラッキングできます。結果はインタラクティブなダッシュボードで確認できるほか、W&B Public API を使用してプログラムからアクセスできるよう、データを Python にエクスポートすることもできます。 このガイドでは、W&B の構成要素を使用して W&B Experiment を作成する方法を説明します。

W&B Experiment の作成方法

4 つの step で W&B Experiment を作成します。
  1. W&B run を初期化する
  2. ハイパーパラメーターの 辞書 を記録する
  3. トレーニングループ内でメトリクスをログする
  4. Artifact を W&B にログする

W&B run を初期化する

W&B Run を作成するには、wandb.init() を使用します。 次のスニペットは、“cat-classification” という名前の W&B プロジェクトに run を作成し、この run を識別しやすくするために説明として “My first experiment” を設定しています。さらに、“baseline”“paper1” のタグを追加して、この run が将来の論文公開を想定したベースライン実験であることがわかるようにしています。
import wandb

with wandb.init(
    project="cat-classification",
    notes="My first experiment",
    tags=["baseline", "paper1"],
) as run:
    ...
wandb.init()Run オブジェクトを返します。
注: wandb.init() を呼び出した時点ですでにそのプロジェクトが存在する場合、Runs は既存のプロジェクトに追加されます。たとえば、“cat-classification” という名前のプロジェクトがすでにある場合、そのプロジェクトは削除されず、引き続き存在します。代わりに、そのプロジェクトに新しい run が追加されます。

ハイパーパラメーターの辞書を記録する

学習率やモデルタイプなどのハイパーパラメーターを辞書として保存します。config に記録したモデルの設定は、後で結果を整理したりクエリしたりするのに役立ちます。
with wandb.init(
    ...,
    config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
    ...
Experiment の設定方法について詳しくは、Experiments の設定を参照してください。

トレーニングループ内でメトリクスをログする

各トレーニングstepにおける精度や損失などのメトリクスをログするには、run.log() を呼び出します。
model, dataloader = get_model(), get_data()

for epoch in range(run.config.epochs):
    for batch in dataloader:
        loss, accuracy = model.training_step()
        run.log({"accuracy": accuracy, "loss": loss})
W&B でログできるさまざまなデータタイプについて詳しくは、Experiments 中にデータをログするを参照してください。

Artifact を W&B にログする

必要に応じて、W&B Artifact をログできます。Artifacts を使うと、データセットやモデルのバージョン管理が容易になります。
# ファイルやディレクトリを保存できます。この例では、モデルにONNXファイルを出力するsave() methodがあると仮定します。
model.save("path_to_model.onnx")
run.log_artifact("path_to_model.onnx", name="trained-model", type="model")
Artifacts の詳細、または Registry でのモデルのバージョン管理については、こちらをご覧ください。

以上をまとめると

前述のコードスニペットをすべて含む完全なスクリプトを以下に示します。
import wandb

with wandb.init(
    project="cat-classification",
    notes="",
    tags=["baseline", "paper1"],
    # runのハイパーパラメーターを記録する。
    config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
    # モデルとデータを設定する。
    model, dataloader = get_model(), get_data()

    # メトリクスをログしながらトレーニングを実行し、モデル性能を可視化する。
    for epoch in range(run.config["epochs"]):
        for batch in dataloader:
            loss, accuracy = model.training_step()
            run.log({"accuracy": accuracy, "loss": loss})

    # トレーニング済みモデルをArtifactとしてアップロードする。
    model.save("path_to_model.onnx")
    run.log_artifact("path_to_model.onnx", name="trained-model", type="model")

次のステップ: 実験を可視化する

W&B ダッシュボードを、機械学習モデルの結果を整理し、可視化するための中心的な場所として使用します。数回クリックするだけで、平行座標プロットパラメーター重要度分析その他のチャートタイプ などの、豊富でインタラクティブなチャートを作成できます。
クイックスタート Sweeps ダッシュボードの例
実験や特定の run を表示する方法の詳細については、実験結果を可視化する を参照してください。

ベストプラクティス

以下は、Experiments を作成する際に考慮すべき推奨ガイドラインです。
  1. run を終了する: with 文で wandb.init() を使用すると、コードの実行が完了したとき、または例外が発生したときに、run が自動的に終了済みとしてマークされます。
    • Jupyter ノートブックでは、Run オブジェクトを自分で管理したほうが便利な場合があります。この場合は、Run オブジェクトで finish() を明示的に呼び出して、完了としてマークできます。
      # ノートブックのセル内:
      run = wandb.init()
      
      # 別のセル内:
      run.finish()
      
  2. Config: モデルを再現するために使用したいハイパーパラメーター、アーキテクチャ、データセット、そのほかの情報をトラッキングします。これらは column として表示され、アプリでは設定 column を使って run を動的にグループ化、並べ替え、フィルターできます。
  3. Project: プロジェクトは、まとめて比較できる Experiments の集合です。各プロジェクトには専用のダッシュボードページがあり、異なるモデル バージョンを比較できるように、run のさまざまなグループを簡単にオン/オフできます。
  4. Notes: スクリプトから直接、簡単なコミットメッセージを設定します。メモは W&B App の run の Overview セクションで編集および確認できます。
  5. Tags: ベースラインの run や重要な run を識別します。tags を使って run をフィルターできます。tags は、後から W&B App のプロジェクトのダッシュボードにある Overview セクションで編集できます。
  6. Experiments を比較するために複数の run set を作成する: Experiments を比較するときは、メトリクスを比較しやすくするために複数の run set を作成します。同じ チャート または チャート のグループ上で、run set のオン/オフを切り替えられます。
次の コードスニペット は、上記のベストプラクティスに従って W&B Experiment を定義する方法を示しています。
import wandb

config = {
    "learning_rate": 0.01,
    "momentum": 0.2,
    "architecture": "CNN",
    "dataset_id": "cats-0192",
}

with wandb.init(
    project="detect-cats",
    notes="tweak baseline",
    tags=["baseline", "paper1"],
    config=config,
) as run:
    ...
W&B Experiment を定義する際に使用できるパラメーターの詳細については、API リファレンスガイドwandb.init() API ドキュメントを参照してください。