run は、W&B によってログ記録される計算の単一単位です。W&B の Run は、プロジェクト全体における最小構成要素(アトミックな要素)と考えることができます。言い換えれば、各 Run は、モデルのトレーニングと結果のログ記録、ハイパーパラメータ探索( Sweeps )など、特定の計算の記録です。
Run の初期化とログ記録の一般的なユースケースは以下の通りです。
W&B の Run を初期化するには、W&B Python SDK の wandb.init() メソッドを呼び出します。これにより新しい Run が開始され、メトリクス、 Artifacts 、その他の情報を Run にログ記録するために使用できる wandb.Run オブジェクトが返されます。Run の初期化に関する詳細は、 Run の初期化 を参照してください。
各 Run オブジェクトは、 run ID と呼ばれる一意の識別子 を持ちます。 一意の ID を指定する ことも、 W&B にランダムな ID を生成させる ことも可能です。また、各 Run オブジェクトには、人間が読みやすい非一意な run name もあります。Run の名前を指定することも、W&B にランダムな名前を生成させることもできます。Run の名前は初期化後でも変更可能です。
W&B は Run を Project にログ記録します。Run を初期化する際に wandb.init(project="") で Project を指定します。指定した Project が存在しない場合、W&B は新しく作成します。Project が既に存在する場合は、その Project に Run をログ記録します。
Project 名を指定しない場合、W&B は Uncategorized という名前の Project に Run を保存します。
wandb.init() は、ID、名前、設定、状態などの Run のプロパティを含む wandb.Run オブジェクトを返します。この Run オブジェクトを使用し、 wandb.Run.log() 、 wandb.Run.log_code() 、 wandb.Run.use_artifact() などのメソッドを使って、メトリクス、 Artifacts 、その他の情報を Run にログ記録します。
各 Run には、現在のステータスを示す状態(state)があります。可能なすべての Run の状態については、 Run の状態 を参照してください。
W&B App の Project Workspace 内で、 Runs とそのプロパティを表示 できます。また、 wandb.Api.Run オブジェクトを使用して、プログラムから Run のプロパティにアクセスすることも可能です。
例として、W&B の Run を初期化し、いくつかのメトリクスをログ記録する以下のコードスニペットを見てみましょう。
以下のコードスニペットを試す場合は、 entity 変数にお使いの W&B Entity を指定してください。Entity は、W&B のユーザー名またはチーム名です。これは W&B App Workspace の URL から確認できます。例えば、Workspace の URL が https://wandb.ai/nico/awesome-project であれば、Entity は nico になります。
import wandb
entity = "nico" # お使いの W&B entity に置き換えてください
project = "awesome-project"
with wandb.init(entity=entity, project=project) as run:
run.log({"accuracy": 0.9, "loss": 0.1})
1行目で W&B Python SDK をインポートします。2行目で Entity nico の下の Project awesome-project 内で Run を初期化します。3行目で、その Run に対してモデルの精度と損失をログ記録します。
ターミナル内では、W&B は以下のように出力します。
wandb: Syncing run earnest-sunset-1
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb:
wandb:
wandb: Run history:
wandb: accuracy ▁
wandb: loss ▁
wandb:
wandb: Run summary:
wandb: accuracy 0.9
wandb: loss 0.5
wandb:
wandb: 🚀 View run earnest-sunset-1 at: https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb: ⭐️ View project at: https://wandb.ai/nico/awesome-project
wandb: Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)
wandb: Find logs at: ./wandb/run-20241105_111006-1jx1ud12/logs
W&B はターミナル出力に2つの URL を表示します。最初の URL は 特定の Run の Workspace へ、2番目の URL は Project ページへと誘導します。
単一の時点でのメトリクス記録は、あまり有用ではないかもしれません。判別モデルのトレーニングにおけるより現実的な例は、一定の間隔でメトリクスをログ記録することです。例えば、以下のコードスニペットを考えてみましょう。
import wandb
import random
config = {
"epochs": 10,
"learning_rate": 0.01,
}
with wandb.init(project="awesome-project", config=config) as run:
print(f"lr: {config['learning_rate']}")
# トレーニングランのシミュレーション
for epoch in range(config['epochs']):
offset = random.random() / 5
acc = 1 - 2**-epoch - random.random() / (epoch + 1) - offset
loss = 2**-epoch + random.random() / (epoch + 1) + offset
print(f"epoch={epoch}, accuracy={acc}, loss={loss}")
run.log({"accuracy": acc, "loss": loss})
このトレーニングスクリプトは wandb.Run.log() を10回呼び出します。スクリプトが wandb.Run.log() を呼び出すたびに、W&B はそのエポックの精度と損失をログ記録します。
ターミナルには、以下のような出力が表示されるはずです。
wandb: Syncing run jolly-haze-4
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/pdo5110r
lr: 0.01
epoch=0, accuracy=-0.10070974957523078, loss=1.985328507123956
epoch=1, accuracy=0.2884687745057535, loss=0.7374362314407752
epoch=2, accuracy=0.7347387967382066, loss=0.4402409835486663
epoch=3, accuracy=0.7667969248039795, loss=0.26176963846423457
epoch=4, accuracy=0.7446848791003173, loss=0.24808611724405083
epoch=5, accuracy=0.8035095836268268, loss=0.16169791827329466
epoch=6, accuracy=0.861349032371624, loss=0.03432578493587426
epoch=7, accuracy=0.8794926436276016, loss=0.10331872172219471
epoch=8, accuracy=0.9424839917077272, loss=0.07767793473500445
epoch=9, accuracy=0.9584880427028566, loss=0.10531971149250456
wandb: 🚀 View run jolly-haze-4 at: https://wandb.ai/nico/awesome-project/runs/pdo5110r
wandb: Find logs at: wandb/run-20241105_111816-pdo5110r/logs
W&B は、シミュレーションされたトレーニングループを jolly-haze-4 という単一の Run 内で取得します。これは、スクリプトが wandb.init() メソッドを一度しか呼び出していないためです。
前述の出力で W&B が表示した URL をコピーしてブラウザに貼り付けてください。この URL は、W&B App UI 上の Run の Workspace に移動します。例えば、以下の画像は Run jolly-haze-4 の Workspace を示しています。