PyTorchのNaNはサイレントに学習を壊す——正確な層で検知できる3msのフックを作った

Towards Data Science / 2026/4/28

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical Usage

要点

  • PyTorchの学習中に発生するNaNは、すぐにはクラッシュせずに学習を静かに破壊してしまう可能性がある。
  • 著者は、問題が最初に現れた「正確な層」と「バッチ」を特定するNaN検知の軽量手法を紹介している。
  • その解決策は、フォワードフックとチェック処理を組み合わせ、通常の学習フローの中でも数値的不具合を早期に捕捉する。
  • 訓練のオーバーヘッドは最小限(約3msと報告)に設計されており、学習速度を大きく落とさないことを狙っている。
  • 本記事は、ResNetのような深いネットワークで数値安定性の問題を診断できずに数時間を失うことを防ぐための実践的デバッグに焦点を当てている。

NaN はトレーニングをクラッシュさせるわけではありません――静かにそれを破壊します。
ResNet の学習実行で、無音の失敗により何時間も失った後、私は、どの層のどのバッチで問題が起きているのかを正確に特定する軽量な検出器を作りました。フォワードフックと勾配チェックを使うことで、最小限のオーバーヘッドで問題を早期に検出します。しかも、モデルをのろのろに遅くすることはありません。

記事 PyTorch の NaN はサイレントキラー――なので私は、特定の層でそれらを捕まえるための 3ms のフックを作りました は、Towards Data Science に初めて掲載されました。