きっとラボ

プログラミングや自然科学などの話題がメイン

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.0tensorflow-gpu 2.0.0 を使う場合、cupy-cuda100 は最新の 7.7.0 を使えば、当該エラーは発生しないと思う。

(面倒ですからバージョン下げる方は試しませんでした)

所感

今回のは業務とかではなく個人的な利用でしたから「仕方ないから Numpy 使おう」とか「何か更新してるし試してみるかな」という手段が取れました。仕事だと場合によっては面倒な問題ですよね。

検索しても出てこなかったのは、「そんなの自力で解決できて当たり前」「解説するまでもない」「そんな使い方するの?」ということですかね ...。それか単に探し方を間違えただけかも。

仕事で使う場合は、各種バージョンを(時に複数の組み合わせを)試したりして検証しないと問題の言い訳が通らないと思いますが、皆目検討がつかないよりはマシかなと思います。

 

以上です。