まわ

勉強したことや遊びのこと

機械学習環境構築 Windows GPUgtx1080設定メモ vol.3(最終章)(CUDA〜tensorflow-gpuセットアップ編)

はじめに

これは、Win10にGPUを利用して、tensorflow-gpuを扱えるようにするまでのセッティングの手順記録です。手順にそって紹介します。

これは前回の続きで 3回目(最終)です

1回目 k-mawa.hateblo.jp

2回目 k-mawa.hateblo.jp

最後はCUDAなどの機械学習を支えるソフトウェアのセッティングです。この記事の終わりまで行けばWin10でGPUを使ってtensorflow-gpuが動かせます。一番大変に感じましたが、あと一息です^^

手順

今回が一番心が折れやすいです。が、ひとつひとつやっていけば大丈夫です。多分去年はもっと大変だったっぽいです・・・

1-1:下準備1:何をインストールするか明確にしておく

  • VisualStudio2013
  • VisualStudio2015
  • CUDA8.0
  • cuDNN 6
  • anaconda
  • tensorflow-gpu

上記パッケージの各バージョンはミスったらやり直しになるのでくれぐれもお気をつけて・・・CUDA(執筆時点でCUDA9.0)やcuDNN(執筆時点でcuDNN7)は最新バージョンではないです。最新バージョンだとうまく動かない(動かす方法もあるのかもしれませんが・・・)ので注意ください

VisualStudioが2個あって「?」かもしれません。併存できますので大丈夫です。(VisualStudio2013は不要っぽい記事も見つかるのですが、必要というツイートもあったりしたので、安牌切るために両方いれました。動いたのでまあOKです。)

1-2:下準備2:色々なパターンでGPUでtensorflow動いた記事があり、試行錯誤記事があることを認識しておく

色々なチュートリアル記事がありますが、書いた日付や、保有PC特有の事情で上手く行ったパターン、同じパターンでうまくいかないやり方がありました。それを認識しておけば心が折れにくいです。

自分もいくつか参考記事を見ましたが、そのとおりにやってうまくいかないものもいくつか有りました。

2:Anacondaをダウンロード

www.anaconda.com

こんな感じのページです f:id:k_mawa:20180117003833j:plain

Win向けのPython3.6verのほうをダウンロードください。 f:id:k_mawa:20180117003846j:plain

ダウンロード終わったら、インストーラーをいじってセットアップしてください。

※完了したら、すぐにはtensorflowなど入れないでください。これでtennsorflowを入れようとすると、

エラー==>no wheel platform

とでます。アナコンダがpython3.6だからの模様です。なので仮想環境を作ってpython3.5の環境にしましょうAnacondaの場合は次のコードです。virtualenvではなくcondaを使います。

anacondaプロンプトを開きます(一般のコマンドプロントではないので注意)

>conda create -n tensor python=3.5
>activate tensor

仮想環境内でpythonバージョン確認すると、
下記のようにでます
(tensor)>python -V
Python 3.5.4 :: Anaconda custom (64-bit)

3:VisualStudio2013を入れる

VS2013、2015の取得は、アカウント登録(無料)が必要です

自分が入れたバージョンは、以下です。

Visual Studio Community 2013 with Update 5 をダウンロード

www.visualstudio.com

f:id:k_mawa:20180117004101j:plain

インストールください。(時間かかります。1時間〜2時間くらい?)

下記が出ればインストール完了です。 f:id:k_mawa:20180117004123j:plain

ちゃんと入ったか、LAUNCHしてみました。ちゃんと動いてます。

[NOTE]VS2013は、CUDAのconfigulation中でコンソールに現れたのでCUDAのセッティングの何かで使われている模様です。

こんな感じ(CUDA8.0インストール時) f:id:k_mawa:20180117004514j:plain

4:VisualStudio2015を入れる

自分が入れたバージョンは、以下です。

VS2015にあるC++のパッケージがビルドに必要らしいので、C++がつくものはとりあえず全部入れてください。

インストールを"Custom"を選択肢、"SelectALL"を選べばOKでした。(C++がつくモジュールが4〜5個くらいありました)

ダウンロードして、インストールください。(これも時間かかります。1時間〜2時間くらい?)

完了したらこんな感じででます。 f:id:k_mawa:20180117004254j:plain

何個か入ってないパッケージがありますが、C++に関連するものはなかったので無視で結果OKでした。

5:CUDA8.0を入れる

CUDAは単にグラフィックボードとしてgtxを使うだけでなく、機械学習などのGPUコンピューティングを実現するためのツールと思われます。

自分が入れたバージョンは、以下です。

  • CUDA Toolkit 8.0 GA1 (Sept 2016)

これをダウンロード ダウンロードしてインストーラーを起動して進めてください。 (これも結構時間かかります 30分〜1時間?)

昔のバージョンのCUDAはトップページにはないのでご注意を。 developer.nvidia.com

これバージョン絶対に間違えないようにしたほうがいいです。 f:id:k_mawa:20180117005024j:plain

f:id:k_mawa:20180117004948j:plain

ドライバー設定時に画面が暗くなったりします(そのまま回復しないことがありました。そのときは残念ながらやり直しです。(やり直しの仕方後述します))

6:cuDNN v6.0を入れる

自分が入れたバージョンは、以下です。

  • cuDNN v6.0 Library for Windows 10

昔のバージョンのcuDNNはここにあります。(無料会員登録必要) https://developer.nvidia.com/rdp/cudnn-download

ここの f:id:k_mawa:20180117005411j:plain

これです。 f:id:k_mawa:20180117005148j:plain

[NOTE]cuDNN v5.1 が必要という記事もあったのですが、自分の場合は5.1で初めやると、エラーになりました。cuDNN6.0で通りました。

これもバージョンを絶対に間違えないようにしたほうがいいです。

これはただのコードファイル群なので、zipをダウンロードして展開したら、パスを次の段階のように通すだけでOKです。時間かかりません。

7:cuDNNのパスを通す

path環境変数にcuDNNのパスが通っていればどこに配置しても良いはずですが、なんかうまく行かなかったので色々検索したところ

NVIDIA GPU Computing Toolkit/ に NVIDIA GPU Computing Toolkit/CUDA/bin・・・となるように配置する意見もあり、

私の場合、試行錯誤中に、path環境変数に独自ディレクトリを設定し、cuDNNのパスが通したものと、NVIDIA GPU Computing Toolkit/CUDA/bin・・・となるようにコピーして配置したもの、どっちかが有効になってる状態です。(検証は後日。とりあえず動いているのでそのままにしました。)

8:tensorflow-gpuを入手

これは公式マニュアル(Githubのもの。下記掲載。github以外の公式マニュアルもあるので注意!)

anacondaプロンプトを開きます(一般のコマンドプロントではないので注意)

(仮想環境(tensor←仮の名称)に移動してから)
>activate tensor
(tensor)>pip install --ignore-installed --upgrade tensorflow-gpu

[NOTE]ちょっと前は

pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.0.0-cp35-cp35m-win_amd64.whl

がインストール最新版になったようですが、今現在は上記のpipコマンドが公式マニュアルでも最新版のようです。(実際動きました。)

9:tensorflow起動時のcudnn64_5.dllエラー解決

上記の手続きを経て、tensorflow-gpuを動かしてもエラーが出ます。これがちょっとやっかいでした。

cudnn64_5.dllがないというエラーが出る。

cudnn64_6.dllはあるので、同じディレクトリ内でコピペして名前を"cudnn64_5.dll"に変えると動くという記事(下記参考記事)があったので、そのとおりにしたら動いた・・・荒技〜(計算速度は速いので問題はなし)

f:id:k_mawa:20180117005746j:plain

これで直りました(ということはpath環境変数に独自ディレクトリを設定したほうのcuDNNを読み取ってるっぽいですね・・・)

10:テストコードを打ってみる

まずは公式マニュアルにあるhello worldから

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))

f:id:k_mawa:20180117010045j:plain 問題がある場合は謎のエラーがでます。(最新版じゃないtensorflow-gpuだと、print時にOpKernelなんとかが大量に出た後標準出力とか、CUDAが開けませんでした とか)

あと一度再起動するとよかったという人もいたので、再起動一度僕もかけました。

kerasで同じモデルでMNISTをやると差がでました。

tensorflow@CPU@mac mini MNISTテスト 

f:id:k_mawa:20180117010002p:plain

tensorflow@GPU(NVIDAIAgtx1080)@win10 MNISTテスト(同じコード) f:id:k_mawa:20180117010102j:plain

3倍程度なので、これだけだとあんまり恩恵少ないですが、CNNとかになるとパワー発揮しそうですね^^

11:chainerはうまくいかない

このようにtensorfloe-gpuはうまくいきましたが、chainerは上手く行きませんでした・・・chainerはWindowsサポートしてない?(検索途中で読んだ噂です。)

import cupyは行けましたが、import cupy.cudnnがエラーになってしまいました・・・まあkerasを今までよく使ってきたので、当面tensorflow-gpuとkerasで実装していこうと思います。

12:参考にした記事

qiita.com

h-sao.com

公式マニュアル(GitHubgithub.com