最近タイトルのエラーで嵌ったのでメモを残します。
結論=versionを戻す
最初に出現したエラー
The total norm of order 2.0 for gradients from parameters
is non-finite, so it cannot be clipped. To disable this error and scale the gradients by the non-finite norm anyway, set error_if_nonfinite=False
torch.nn.utils.clip_grad_norm_() が吐いたエラーです。
最初は勾配爆発かな?とも思ったのですが、ちがいました。
modelのパラメータやlossを細かく調べても原因不明で、大きなモデルで突然発生します。
weight値のオーバーフロー、アンダーフローも無しでした。
(BP中の挙動は大変そうで調べられませんでした・・・)
大元のエラー
torch.autograd.set_detect_anomaly(True) にして調べたところ、原因のエラーがこれでした。
Function 'ScaledDotProductEfficientAttentionBackward0' returned nan values in its 0th output.
調べたらバグか?ということでフォーラムにトピックが立っていました。
自分で解決できるレベルではなさそうだな・・・と思ったので、バージョンを戻してみました。
こういう時にdocker(NGC)は便利ですねw
バージョンを戻した結果
NGC ver. | PyTorch ver. | CUDA ver. | 結果 |
24-01.py3 | 2.2.0a0+81ea7a4 | 12.3.2 | NG |
23-12.py3 | 2.2.0a0+81ea7a4 | 12.3.2 | NG |
23-11.py3 | 2.2.0a0+6a974be | 12.3.0 | NG |
23-10.py3 | 2.1.0a0+32f93b1 | 12.2.2 | ?(*1) |
23-09.py3 | 2.1.0a0+32f93b1 | 12.2.1 | ?(*1) |
23-08.py3 | 2.1.0a0+29c30b1 | 12.2.1 | NG |
23-07.py3 | 2.1.0a0+b5021ba | 12.1.1 | OK |
*1):原因不明の実行時エラーが発生するが、面倒なのでスキップ。
なおテスト中のソース修正は無し。
NGCのバージョン詳細はこちら
結論
バージョン変更により挙動が変わったのは明らかなようです。
(最近久しぶりにNGCのバージョンを上げました)
挙動が変わった=不具合 とは必ずしも断定できません。
また、原因はPyTorchなのか、CUDAなのか、あるいはそれ以外なのかも不明です。
が目的は不具合を探ることではないので、素直に23-07に戻して研究を進めることにしました・・・
何の解決にもなっていませんが、とりあえず回避はできるので残しておきます。
(じきに解決されるとは思いますが)