run は、W&B によってログされる 1 回の計算単位です。W&B Run は、プロジェクト全体を構成する最小単位と考えることができます。つまり、各 run は特定の計算の記録であり、たとえばモデルをトレーニングして結果をログしたものや、ハイパーパラメーター sweeps などが該当します。
run を初期化してログする一般的なユースケースには、次のようなものがあります。
W&B run を初期化するには、W&B Python SDK の wandb.init() method を呼び出します。これにより新しい run が開始され、run にメトリクス、Artifacts、そのほかの情報をログするために使用できる wandb.Run object が返されます。run の初期化の詳細は、Initialize runs を参照してください。
各 run object には、run ID と呼ばれる一意の識別子があります。一意の ID を指定することも、W&B にランダムに生成させることもできます。また、各 run object には、人が読める重複可能な run 名 もあります。run に名前を指定することも、W&B にランダムに生成させることもできます。run 名は初期化後に変更できます。
W&B は run をプロジェクトにログします。run を wandb.init(project="") で初期化するときにプロジェクトを指定します。プロジェクトが存在しない場合、W&B は新しいプロジェクトを作成します。プロジェクトがすでに存在する場合、W&B は指定したプロジェクトに run をログします。
プロジェクト名を指定しない場合、W&B は Uncategorized という名前のプロジェクトに run を保存します。
wandb.init() は、ID、名、設定、state などの run のプロパティを含む wandb.Run object を返します。wandb.Run.log()、wandb.Run.log_code()、wandb.Run.use_artifact() などの methods を使って、run object から run にメトリクス、Artifacts、そのほかの情報をログできます。
各 run には、その run の現在のステータスを表す state があります。利用可能な run state の一覧については、Run states を参照してください。
W&B App の run のプロジェクトワークスペース内で、runs とそのプロパティを表示できます。wandb.Api.Run object を使って、プログラムから run のプロパティにアクセスすることもできます。
例として、W&B run を初期化し、いくつかのメトリクスをログする次のコードスニペットを見てみましょう。
以下のコードスニペットを一緒に試したい場合は、コードスニペット内の entity 変数に W&B entity を指定してください。entity は、W&B のユーザー名またはチーム名です。W&B App ワークスペースの URL で確認できます。たとえば、ワークスペース 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 配下のプロジェクト 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 を返します。1 つ目の URL は 特定の run の Workspace に移動し、2 つ目の URL は プロジェクト ページに移動します。
ある 1 時点だけでメトリクスをログしても、あまり有用ではないことがあります。識別モデルのトレーニングでは、一定間隔でメトリクスをログするほうが、より現実的な例です。たとえば、次のコードスニペットを考えてみましょう。
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']}")
# トレーニングの run をシミュレートする
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 という 1 つの run 内に、シミュレートされたトレーニングループを記録します。これは、スクリプトが wandb.init() method を 1 回しか呼び出さないためです。
前の出力で W&B が表示した URL をブラウザにコピー&ペーストしてください。その URL を開くと、W&B App UI の 해당 run の Workspace が表示されます。たとえば、次の画像は run jolly-haze-4 の Workspace を示しています。