Skip to main content
wandb.init() の実行が遅い場合やメトリクスのアップロードが遅い場合、原因としては通常、ネットワーク遅延、大きなメディア ペイロード、ログ頻度が高いこと、または W&B service プロセスの起動が遅いことが挙げられます。

wandb.init() が遅い

wandb.init() は W&B API にアクセスして run を作成し、認証情報を確認します。数秒以上応答しない場合は、次を確認してください。
  • 接続を確認する: curl -I https://api.wandb.ai を実行して、お使いのマシンから W&B API に到達できることを確認してください。クラスター上のファイアウォールルールやプロキシ設定が一般的な原因です。
  • init のタイムアウトを延長する: 接続が断続的な場合は、wandb.init() がタイムアウトするまでの時間を長くしてください。
    import os
    os.environ["WANDB_INIT_TIMEOUT"] = "120"   # 秒
    
  • テスト中はオフラインモードを使用する: 試行錯誤の際にリアルタイム同期が不要であれば、オフラインで実行して後で sync してください。[TIMESTAMP][ID] は、run のタイムスタンプと ID に置き換えてください。
    WANDB_MODE=offline python train.py
    wandb sync wandb/run-[TIMESTAMP]-[ID]
    

トレーニング中のメトリクスのアップロードが遅い

W&B はメトリクスをバックグラウンドスレッドで非同期にアップロードするため、トレーニングループがブロックされることはありません。次のような場合は、アップロードが追いつかなくなることがあります。
  • ログする頻度が高すぎる: 高速な GPU で毎ステップ wandb.log() を呼び出すと、バックグラウンドスレッドがアップロードできる量を上回るデータが生成されることがあります。代わりに、N ステップごとにログしてください。
    if step % 50 == 0:
        wandb.log({"loss": loss}, step=step)
    
  • 毎ステップ大きなメディアをログしている: wandb.Imagewandb.Tablewandb.Video オブジェクトは、スカラーのメトリクスよりも大幅にサイズが大きくなります。リッチメディアは毎ステップではなく、エポックごと、または N ステップごとにログしてください。
  • レート制限: 429 Rate limit exceeded エラーが発生する場合は、rate limit exceeded エラーを修正するにはどうすればよいですか?を参照してください。

run の終了処理が遅い

スクリプトで wandb.finish() を呼び出した後 (またはスクリプトが終了した後) 、W&B はバッファリングされた残りのデータをフラッシュします。トレーニング中に大量のバックログがたまっている場合は、これに時間がかかることがあります。最後にまとめて処理するのではなく、トレーニング全体を通して適切な頻度でログするようにしてください。

デバッグログを使った診断

デバッグログを有効にすると、どこに時間がかかっているかを確認できます。
WANDB_DEBUG=true python train.py
これにより、詳細なタイミング情報が wandb/debug.logwandb/debug-internal.log に書き込まれます。 詳細は、Experiments の制限とパフォーマンス および ネットワークの問題に対処するにはどうすればよいですか? を参照してください。
Runs Experiments 接続性