メインコンテンツへスキップ
W&B の Python SDK を使って、メトリクス、メディア、またはカスタムオブジェクトの辞書を各 step にログします。W&B は各 step でキーと値のペアを収集し、wandb.Run.log() でデータをログするたびに、それらを 1 つの統一された辞書に保存します。スクリプトからログされたデータは、まずローカルマシン上の wandb というディレクトリに保存され、その後 W&B クラウドまたはあなたの プライベートサーバー に同期されます。
キーと値のペアが 1 つの統一された辞書に保存されるのは、各 step に対して同じ値を渡した場合のみです。step に異なる値をログした場合、W&B は収集したすべてのキーと値をメモリ上に保持します。
wandb.Run.log() を呼び出すたびに、デフォルトでは新しい step が作成されます。W&B はチャートやパネルを作成する際、デフォルトの x 軸として step を使用します。必要に応じて、カスタムの x 軸を作成して使用したり、カスタムのサマリーメトリクスを記録したりできます。詳細は ログ軸をカスタマイズする を参照してください。
step(0、1、2、…)の連続した値を記録するには wandb.Run.log() を使用してください。履歴の特定の step に書き込むことはできません。W&B は「現在」の step と「次」の step にのみ書き込みます。

自動的に記録されるデータ

W&B は、W&B Experiment の実行中に次の情報を自動的に記録します。
  • システムメトリクス: CPU と GPU の使用率、ネットワークなど。GPU については、nvidia-smi を使って取得します。
  • コマンドライン: stdout と stderr が取得され、run ページの Logs タブに表示されます。
アカウントの Settings ページCode Saving を有効化すると、次の情報も記録されます。
  • Git commit: 最新の git commit を取得し、run ページの Overview タブに表示します。未コミットの変更がある場合は、diff.patch ファイルも保存されます。
  • 依存関係: requirements.txt ファイルがアップロードされ、run ページの Files タブに表示されます。加えて、その run 用に wandb ディレクトリに保存したファイルも表示されます。

特定の W&B API 呼び出しでどのようなデータがログされますか?

W&B では、ログする対象を細かく制御できます。以下は、よくログされる一般的なオブジェクトの一覧です:
  • Datasets: 画像やその他のデータセットサンプルを W&B にストリーミングするには、それらを明示的にログする必要があります。
  • Plots: wandb.plot()wandb.Run.log() を組み合わせて使うとチャートを追跡できます。詳細は Log Plots を参照してください。
  • Tables: wandb.Table を使ってデータをログし、W&B 上で可視化およびクエリできます。詳細は Log Tables を参照してください。
  • PyTorch の勾配: wandb.Run.watch(model) を追加すると、UI 上で重みの勾配をヒストグラムとして確認できます。
  • 設定情報: ハイパーパラメータ、データセットへのリンク、使用しているアーキテクチャ名などを config パラメータとしてログします。次のように渡します: wandb.init(config=your_config_dictionary)
  • Metrics: wandb.Run.log() を使ってモデルからのメトリクスを確認できます。学習ループ内から accuracy や loss などのメトリクスをログすると、UI 上のグラフがリアルタイムに更新されます。

メトリクス名の制約

GraphQL の制約により、W&B のメトリクス名は特定の命名規則に従う必要があります。
  • 使用可能な文字: 英字 (A-Z, a-z)、数字 (0-9)、アンダースコア (_)
  • 先頭文字: 名前は英字またはアンダースコアで始まる必要があります
  • パターン: メトリクス名は /^[_a-zA-Z][_a-zA-Z0-9]*$/ に一致する必要があります
コンマ、スペース、特殊記号などの無効な文字をメトリクス名に使用しないでください。これらを使用すると、W&B UI でのソート、クエリ、表示に問題が発生する可能性があります。
有効なメトリクス名:
with wandb.init() as run:
  run.log({"accuracy": 0.9, "val_loss": 0.1, "epoch_5": 5})
  run.log({"modelAccuracy": 0.95, "learning_rate": 0.001})
無効なメトリクス名(以下の名前は使用しないでください):
with wandb.init() as run:
  run.log({"acc,val": 0.9})  # カンマを含む
  run.log({"loss-train": 0.1})  # ハイフンを含む
  run.log({"test acc": 0.95})  # スペースを含む
  run.log({"5_fold_cv": 0.8})  # 数字で始まる

一般的なワークフロー

  1. 最高精度を比較する: run 間で特定のメトリクスの最高値を比較するには、そのメトリクスのサマリー値を設定します。デフォルトでは、サマリーには各キーに対して最後にログした値が設定されます。これは UI のテーブルで役立ちます。サマリーのメトリクスに基づいて run をソートおよびフィルタリングできるため、最終精度ではなく 最高 精度に基づいて、テーブルや棒グラフで run を比較できます。例: wandb.run.summary["best_accuracy"] = best_accuracy
  2. 複数のメトリクスを 1 つのチャートで表示する: 同じ log 呼び出しで複数のメトリクスをログします。例:
    with wandb.init() as run:
      run.log({"acc": 0.9, "loss": 0.1})
    
    その後、UI で両方のメトリクスをプロットできます。
  3. x 軸をカスタマイズする: 同じ log 呼び出しでカスタム x 軸を追加して、W&B ダッシュボードで別の軸に対するメトリクスを可視化します。例:
    with wandb.init() as run:
      run.log({'acc': 0.9, 'epoch': 3, 'batch': 117})
    
    特定のメトリクスのデフォルトの x 軸を設定するには、Run.define_metric() を使用します。
  4. リッチメディアとチャートをログする: wandb.Run.log() は、画像や動画などのメディアから、テーブルチャートまで、さまざまなデータ型のログに対応しています。

ベストプラクティスとヒント

Experiments とロギングに関するベストプラクティスやヒントについては、ベストプラクティス:Experiments とロギングを参照してください。