W&B Python SDK を使用して、機械学習の実験をトラッキングできます。結果はインタラクティブなダッシュボードで確認できるほか、W&B Public API を使用してプログラムからアクセスできるよう、データを Python にエクスポートすることもできます。
このガイドでは、W&B の構成要素を使用して W&B Experiment を作成する方法を説明します。
4 つの step で W&B Experiment を作成します。
- W&B run を初期化する
- ハイパーパラメーターの 辞書 を記録する
- トレーニングループ内でメトリクスをログする
- Artifact を W&B にログする
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 中にデータをログするを参照してください。
必要に応じて、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 ダッシュボードを、機械学習モデルの結果を整理し、可視化するための中心的な場所として使用します。数回クリックするだけで、平行座標プロット、パラメーター重要度分析、その他のチャートタイプ などの、豊富でインタラクティブなチャートを作成できます。
実験や特定の run を表示する方法の詳細については、実験結果を可視化する を参照してください。
以下は、Experiments を作成する際に考慮すべき推奨ガイドラインです。
- run を終了する:
with 文で wandb.init() を使用すると、コードの実行が完了したとき、または例外が発生したときに、run が自動的に終了済みとしてマークされます。
-
Jupyter ノートブックでは、Run オブジェクトを自分で管理したほうが便利な場合があります。この場合は、Run オブジェクトで
finish() を明示的に呼び出して、完了としてマークできます。
# ノートブックのセル内:
run = wandb.init()
# 別のセル内:
run.finish()
- Config: モデルを再現するために使用したいハイパーパラメーター、アーキテクチャ、データセット、そのほかの情報をトラッキングします。これらは column として表示され、アプリでは設定 column を使って run を動的にグループ化、並べ替え、フィルターできます。
- Project: プロジェクトは、まとめて比較できる Experiments の集合です。各プロジェクトには専用のダッシュボードページがあり、異なるモデル バージョンを比較できるように、run のさまざまなグループを簡単にオン/オフできます。
- Notes: スクリプトから直接、簡単なコミットメッセージを設定します。メモは W&B App の run の Overview セクションで編集および確認できます。
- Tags: ベースラインの run や重要な run を識別します。tags を使って run をフィルターできます。tags は、後から W&B App のプロジェクトのダッシュボードにある Overview セクションで編集できます。
- 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 ドキュメントを参照してください。