最近タイトルのエラーで嵌ったのでメモを残します。

結論=versionを戻す

最初に出現したエラー

torch.nn.utils.clip_grad_norm_() が吐いたエラーです。

最初は勾配爆発かな?とも思ったのですが、ちがいました。
modelのパラメータやlossを細かく調べても原因不明で、大きなモデルで突然発生します。
weight値のオーバーフロー、アンダーフローも無しでした。
(BP中の挙動は大変そうで調べられませんでした・・・)

大元のエラー 

torch.autograd.set_detect_anomaly(True) にして調べたところ、原因のエラーがこれでした。

調べたらバグか?ということでフォーラムにトピックが立っていました。

自分で解決できるレベルではなさそうだな・・・と思ったので、バージョンを戻してみました。

こういう時にdocker(NGC)は便利ですねw

バージョンを戻した結果

NGC ver.PyTorch ver.CUDA ver.結果
24-01.py32.2.0a0+81ea7a412.3.2NG
23-12.py32.2.0a0+81ea7a412.3.2NG
23-11.py32.2.0a0+6a974be12.3.0NG
23-10.py32.1.0a0+32f93b112.2.2?(*1)
23-09.py32.1.0a0+32f93b112.2.1?(*1)
23-08.py32.1.0a0+29c30b112.2.1NG
23-07.py32.1.0a0+b5021ba12.1.1OK

*1):原因不明の実行時エラーが発生するが、面倒なのでスキップ。
なおテスト中のソース修正は無し。

NGCのバージョン詳細はこちら

結論

バージョン変更により挙動が変わったのは明らかなようです。
(最近久しぶりにNGCのバージョンを上げました)

挙動が変わった=不具合 とは必ずしも断定できません。
また、原因はPyTorchなのか、CUDAなのか、あるいはそれ以外なのかも不明です。

が目的は不具合を探ることではないので、素直に23-07に戻して研究を進めることにしました・・・

何の解決にもなっていませんが、とりあえず回避はできるので残しておきます。
(じきに解決されるとは思いますが)


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です