メインコンテンツへスキップ
run は、W&B によってログされる 1 回分の計算処理です。W&B の run は、プロジェクト全体を構成する最小単位の要素と考えることができます。言い換えると、それぞれの run は「特定の計算処理」の記録であり、たとえばモデルの学習とその結果のログ、ハイパーパラメータスイープなどが該当します。 run を初期化してログを記録する、代表的なユースケースは次のとおりです。 W&B の run を初期化するには、W&B Python SDK から wandb.init() メソッドを呼び出します。これにより新しい run が開始され、メトリクスやアーティファクト、その他の情報をその run にログするために使用できる wandb.Run オブジェクトが返されます。run の初期化について詳しくは、Initialize runs を参照してください。 各 run オブジェクトには、run ID と呼ばれる一意の識別子が付与されます。一意の ID を自分で指定してもよいですしW&B にランダムに生成させることもできます。各 run オブジェクトには、ユーザーが読みやすい非一意の run name もあります。run の名前も、自分で指定するか、W&B にランダムに生成させることができます。run の初期化後に名前を変更することも可能です。 W&B は、run をプロジェクトにログします。wandb.init(project="") で run を初期化する際に、プロジェクトを指定します。指定したプロジェクトが存在しない場合、W&B は新しいプロジェクトを作成します。すでに存在する場合は、そのプロジェクトに run をログします。
プロジェクト名を指定しない場合、W&B は run を Uncategorized というプロジェクトに保存します。
wandb.init() は、その ID、名前、設定、状態など、run のプロパティを含む wandb.Run オブジェクトを返します。wandb.Run.log()wandb.Run.log_code()wandb.Run.use_artifact() などのメソッドを使って、この run オブジェクトに対してメトリクス、アーティファクト、その他の情報をログします。 各 run には、その時点の状態を表すステートがあります。取りうる run のステート一覧については、Run states を参照してください。 W&B App では、run の属するプロジェクトの Workspace 内で、run とそのプロパティを確認できます。また、wandb.Api.Run オブジェクトを使用して、プログラムから run のプロパティにアクセスすることもできます。 次のコードスニペットは、W&B の run を初期化し、いくつかのメトリクスをログする例です。
以降のコードスニペットを実際に試したい場合は、entity 変数にあなたの W&B エンティティを指定してください。エンティティはあなたの W&B ユーザー名またはチーム名で、W&B App のワークスペース URL に含まれています。たとえばワークスペースの URL が https://wandb.ai/nico/awesome-project の場合、エンティティは nico です。
import wandb

entity = "nico"  # あなたの W&B エンティティに置き換えてください
project = "awesome-project"

with wandb.init(entity=entity, project=project) as run:
    run.log({"accuracy": 0.9, "loss": 0.1})
最初の行では、W&B の Python SDK をインポートしています。2 行目では、エンティティ nico 配下のプロジェクト awesome-project で run を初期化しています。3 行目では、その run にモデルの正解率 (accuracy) と損失 (loss) を記録しています。 ターミナル上では、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 は プロジェクト ページへのリンクです。
単一の run の Workspace
単一の時点でメトリクスを 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 という名前の単一の run 内に、シミュレートされた学習ループを記録します。これは、スクリプトが wandb.init() メソッドを 1 回だけ呼び出しているためです。 前の出力で W&B が表示した URL をコピーしてブラウザに貼り付けます。URL は、W&B アプリの UI にあるその run の Workspace にアクセスします。たとえば、次の画像は run jolly-haze-4 の Workspace を示しています:
学習 run とログされたメトリクス