Win10, tensorflow-gpu 2.0.0, CUDA 10.0 で CuDNN の初期化に失敗するケースを新たに見つけた
最近 tensoflow を使うために Python を少し触っています。(バージョンは 3.7)
tensorflow の導入で色々ずっこける事が多かったのですが、検索すれば必ず正解が見つかり、前に進むことができていました。
しかし、先日検索しても中々ヒットしない問題に直面しました。今回はそれについてお話します。
目次
状況
僕以外にも出くわす方が多いかもしれませんが、tensorflow で GPU と共に実験しようとしたときに、CuDNN の初期化に失敗する(そして CNN の初期化にも失敗する)ケースがあります。その原因の殆どは CuDNN 自体を入れていないか(僕)、パスを通し忘れているかだと思います。検索すれば手順がたくさん出てきます。
調べた手順で解決して作業を勧めたのですが、またしても同じエラーが発生しました。
Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
{{node model/conv_lst_m2d/while/body/_1/convolution_4}} [Op:__inference_distributed_function_3889]
実装を1行ずつ丁寧に調べた結果、cupy がトリガーとなっていました。当時の利用状況は
- GeForce GTX 1660 Ti 6GB
- Windows 10 Pro
- Python 3.7
- tensorflow-gpu 2.0.0
- CUDA 10.0
- cupy-cuda100 7.6.0
- tensorflow-gpu の CuDNN 初期化前に cupy が import されている
でした。最後のですが、tensorflow-gpu 側の CuDNN 初期化が完了した後では問題なく、inport して両者利用できていました。
解決
tensorflow-gpu と cupy の同居について検索したのですが中々ヒットせず、とりあえず cupy の利用をやめたのですが、先日 cupy のバージョンが 7.7.0 に上がっていたので、試しにアップデートしてみたところ、この問題は出なくなりました。
cupy-cuda100 (7.7.0) - CuPy: NumPy-like API accelerated with CUDA
INSTALLED: 7.6.0
LATEST: 7.7.0
とりあえず古いものを消して、
pip uninstall cupy-cuda100
新しいものを入れる
pip install cupy-cuda100
これでエラーは出なくなりました。
結論
少なくとも CUDA 10.0 で tensorflow-gpu 2.0.0 を使う場合、cupy-cuda100 は最新の 7.7.0 を使えば、当該エラーは発生しないと思う。
(面倒ですからバージョン下げる方は試しませんでした)
所感
今回のは業務とかではなく個人的な利用でしたから「仕方ないから Numpy 使おう」とか「何か更新してるし試してみるかな」という手段が取れました。仕事だと場合によっては面倒な問題ですよね。
検索しても出てこなかったのは、「そんなの自力で解決できて当たり前」「解説するまでもない」「そんな使い方するの?」ということですかね ...。それか単に探し方を間違えただけかも。
仕事で使う場合は、各種バージョンを(時に複数の組み合わせを)試したりして検証しないと問題の言い訳が通らないと思いますが、皆目検討がつかないよりはマシかなと思います。
以上です。