wandb.init() を呼び出したプロセスからのハートビートを受信しなくなり、かつそのプロセスが wandb.finish() を呼び出していない場合、その run を Crashed としてマークします。これは、トレーニングプロセスが強制終了された場合、予期せず終了した場合、または正常終了を報告する前に接続が失われた場合に発生します。
一般的な原因
- メモリ不足 (OOM) エラー: 使用可能なメモリを超えると、OS または GPU ドライバーによってプロセスが強制終了されます。
output.logでCUDA out of memoryまたはKilledというメッセージを確認してください。 - 未処理の例外: Python の未処理例外により、
wandb.finish()を呼び出さないままプロセスが終了します。例外はoutput.logに記録されます。 - ジョブスケジューラによるプリエンプション: SLURM などのクラスター スケジューラでは、ジョブが予告なくプリエンプトされて強制終了されることがあります。その場合、run は正常終了する機会を得られません。
- ネットワーク切断: まれに、ネットワークの長時間の停止により、W&B バックエンドがハートビート待機中にタイムアウトし、プロセスがまだ実行中でも run が crashed とマークされることがあります。
- プロセスの手動終了:
kill -9またはSIGKILLを使用すると、Python のシグナルハンドラがバイパスされ、wandb.finish()が呼び出されません。
- プロジェクトのサイドバーで Runs をクリックします。
- run の名前をクリックし、Files タブをクリックします。
- stdout/stderr を確認するために
output.logをダウンロードします。通常、このファイルにはクラッシュの原因となったエラーが含まれています。 - W&B レベルの診断情報 (接続の問題、アップロード エラー) を確認するために、
debug.logとdebug-internal.logをダウンロードします。 - run がクラスター上で実行されていた場合は、プリエンプションや OOM シグナルがないか、スケジューラのジョブ ログも確認してください。
wandb sync を使ってバッファされたデータを同期してください。[TIMESTAMP] と [ID] は、対象の run の値に置き換えてください。
wandb.init() をコンテキストマネージャーとして使用すると、スクリプトで例外が発生した場合でも run を正常に終了できます。run は Crashed ではなく Failed としてマークされ、バッファリングされたデータがフラッシュされます。
Runs run のクラッシュ