ニューラルネットワークで遊んでいたらなんか処理が遅かったんですが、よくよく調べていたら (python の)tensorflow パッケージは CPU で処理するものであって、 GPU で処理するものは tensorflow-gpu という別パッケージになってるんですな。

というわけでサクッとググって見つけた Windows で GPU 対応の TensorFlow を使う記事を参考にインストールしようとしたんですが、ちゃんと読んでなかったこともありいろいろハマりました。

まず前提として作業前には tensorflow-1.8.0 がインストールされていました。CUDA は古い 7.0 がインストールされており、cuDNN はインストールされていません。

GPU 対応版をインストールしようとして最初に pip install tensorflow-gpu としたのがまず間違い。tensorflow と tensorflow-gpu は同居できません(微妙に期待と異なる動作になる)。同居できないのにインストールできてしまうのはパッケージシステムの欠陥(= conflict を記述できない)なのか tensorflow パッケージの依存性の記述がイケてないだけなのか分かりませんが、とにかく困ったものです。

この状態で Keras を使うプログラムを実行すると Using TensorFlow backend. と出た後に cudart64_90.dll が見つからないと言われます。 CUDA が古いので当たり前なのですが、 NVIDIA のサイトに行って CUDA の最新版をダウンロードしてインストールします。ディスプレイドライバも一緒にインストールされてウィンドウ配置が吹っ飛んで大変でした。また cuDNN の最新版もダウンロードして、 CUDA の bin ディレクトリに DLL をコピーします(DLL 以外は要らない)。ちなみに CUDA の bin ディレクトリはインストーラによって自動的に PATH に追加されます。

インストール後にまた Keras を使うプログラムを実行すると、また同じエラーが出ます。あれっ?と思って CUDA の bin ディレクトリを見ると、 cudart64_92.dll はあるけど cudart64_90.dll はありません。マイナーバージョンも一致させないといかんのかい(現在の最新版は CUDA 9.2)。

気を取り直して Legacy Releases のところから CUDA 9.0 を取ってきてインストールします。ここで何も考えずに OK を押していたらディスプレイドライバが古いものに置き換えられてしまいました(当然またウィンドウ配置も吹っ飛ぶ)。まったくもー と思いながらディスプレイドライバを入れるためにもう1回 CUDA 9.2 のインストーラを起動します。時間ばかりが過ぎていきます。

ここまでやってようやく DLL がロードできて学習とか推論とかできるようになるわけですが、よく見たら速くなってません。タスクマネージャを見ると CPU 負荷がかなり上がっており、GPU を使っていない疑惑がでてきます。 GPU 負荷を表示するツールを探して(Windows 7 なのでタスクマネージャでは表示できない)、 ELSA がリリースしているツールにたどり着き、負荷を見てみたところ、負荷は上がってません(特にGPUメモリ使用量に全く変化がない)。ここでようやく tensorflow と tensorflow-gpu が同居できない(うっかり両方インストールすると CUDA が必要なくせに CPU で処理する)ことに気が付きます。

tensorflow の方は要らないのでアンインストールするために pip uninstall tensorflow とするとアンインストール中にエラーが出て、環境が壊れます。インストールしなおすと元の同居した状態になるのですが、特に解決していません。 tensorflow-gpu の方をアンインストールしようとしても同じです。困った。

エラーを見ると python をインストールしているディレクトリの下の site-packages\tensorflow というディレクトリで何かやっていることが分かるので、 site-packages の下の tensorflow で始まるディレクトリをリネームして横に置いて pip list を実行してみると… tensorflow 関係はすべて消えています。あまりいい方法とは思えませんが、これで一応アンインストールされた状態になっているような気がします。ここから改めて pip install tensorflow-gpu とすると、GPU を使う TensorFlow 環境がようやくできました。

さて、頑張って環境を作って、確かに GPU は使われていて(前述のツールで見ても実行中は GPU メモリ使用量がガツンと増えている)速くはなっているんですが、期待したほどは速くなっていません。まだ簡単なネットワークでしか遊んでないというのもあるのですが、 GeForce GTX 750Ti じゃこの程度なのかなぁ。

Trackback

no comment untill now

Add your comment now