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 がクラッシュとしてマークされることがあります。
- プロセスの手動強制終了:
kill -9またはSIGKILLを使用すると、Python のシグナルハンドラが実行されず、wandb.finish()が呼び出されません。
- プロジェクトのサイドバーで Runs をクリックします。
- run の名前をクリックし、Files タブをクリックします。
- 標準出力と標準エラー出力を確認するために
output.logをダウンロードします。このファイルには通常、クラッシュの原因となったエラーが記録されています。 - Weights & Biases レベルの診断情報 (接続の問題、アップロードエラー) を確認するために、
debug.logとdebug-internal.logをダウンロードします。 - run がクラスター上で実行されていた場合は、スケジューラーのジョブログでプリエンプションや OOM の兆候も確認します。
wandb sync を使用して、ローカルの run ディレクトリからバッファ内のデータを送信してください。[TIMESTAMP] と [ID] を run の値に置き換えます:
wandb.init() をコンテキストマネージャーとして使用すると、スクリプトが例外を送出したときに run が正常に終了します。run は Crashed ではなく Failed としてマークされ、バッファ内のデータが書き出されます。
Runs run のクラッシュ