W&B Python SDK を使用して機械学習の実験を追跡します。その後、インタラクティブなダッシュボードで結果を確認するか、W&B Public API を使ってデータを Python にエクスポートし、プログラムからアクセスできます。
このガイドでは、W&B のビルディングブロックを使用して W&B Experiment を作成する方法を説明します。
次の 4 つのステップで W&B Experiment を作成します:
- W&B run を初期化する
- ハイパーパラメータの辞書を記録する
- 学習ループ内でメトリクスをログする
- W&B にアーティファクトをログする
wandb.init() を使用して W&B run を作成します。
次のスニペットでは、W&B プロジェクト “cat-classification” に run を作成し、この run を識別しやすくするための説明 “My first experiment” を付与します。また、この run が将来の論文投稿用のベースライン実験であることを思い出せるように、タグ “baseline” と “paper1” を含めています。
import wandb
with wandb.init(
project="cat-classification",
notes="My first experiment",
tags=["baseline", "paper1"],
) as run:
...
wandb.init() は Run オブジェクトを返します。
Note: wandb.init() を呼び出した時点でそのプロジェクトがすでに存在する場合、その Runs は既存のプロジェクトに追加されます。たとえば、すでに “cat-classification” という名前のプロジェクトがある場合、そのプロジェクトはそのまま残り、削除されません。代わりに、新しい run がそのプロジェクトに追加されます。
学習率やモデルの種類などのハイパーパラメータを、辞書として保存します。config に保存したモデル設定は、後から結果を整理したり検索したりする際に役立ちます。
with wandb.init(
...,
config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
...
Experiments の設定方法の詳細については、Configure Experiments を参照してください。
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 アーティファクトをログとして記録します。アーティファクトを使うと、データセットやモデルのバージョン管理が簡単になります。
# ファイルやディレクトリを保存できます。この例では、モデルにONNXファイルを出力する
# save()メソッドがあると仮定します。
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})
# 学習済みモデルをアーティファクトとしてアップロードする。
model.save("path_to_model.onnx")
run.log_artifact("path_to_model.onnx", name="trained-model", type="model")
W&B ダッシュボードを、機械学習モデルから得られた結果を整理・可視化するための中核となる場所として使用してください。数回クリックするだけで、並列座標プロット、パラメータ重要度の分析、その他のチャートの種類 など、リッチでインタラクティブなチャートを作成できます。
実験および特定の run の表示方法については、実験結果の可視化 を参照してください。
実験を作成する際に考慮すべき推奨事項は次のとおりです。
- run を終了する:
wandb.init() を with 文で使用すると、コードが完了するか例外をスローしたときに、自動的に run を完了としてマークできます。
-
Jupyter Notebook では、Run オブジェクトを自分で管理したほうが便利な場合があります。この場合は、Run オブジェクトで
finish() を明示的に呼び出して、完了としてマークします:
# In a notebook cell:
run = wandb.init()
# In a different cell:
run.finish()
- Config: ハイパーパラメータ、アーキテクチャ、データセット、その他モデルの再現に使いたいものを記録します。これらは列として表示されます。config の列を使って、アプリ内で run を動的にグループ化、ソート、フィルタリングできます。
- Project: project は、一緒に比較できる一連の実験です。各 project には専用のダッシュボードページが割り当てられ、さまざまな run のグループを簡単にオン/オフして、異なるモデルバージョンを比較できます。
- Notes: スクリプトから直接、簡単なコミットメッセージを設定します。W&B App の run の Overview セクションで、notes を編集したり参照したりできます。
- Tags: ベースラインの run やお気に入りの run を識別します。tags を使って run をフィルタリングできます。後から、W&B App 上の project のダッシュボードの Overview セクションで tags を編集することもできます。
- 実験を比較するために複数の run セットを作成する: 実験を比較する際は、メトリクスを比較しやすくするために複数の run セットを作成します。同じチャートまたはチャートグループ上で、run セットをオン/オフ切り替えできます。
次のコードスニペットは、上記のベストプラクティスを用いて W&B Experiments を定義する方法を示しています。
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 ドキュメントを参照してください。