Windows10でTensorflow 1.7をマルチGPUで動かす方法を書きます。
Installing TensorFlow on Windows を参考にインストールします。
環境
Windows 10
Intel Core i7 7700K
メモリ 32GB
NVIDIA GeForce GTX 1070 8GB * 5
NVIDIA GeForce GTX 1060 6GB * 1
注意点??? tensorflow-gpu はCPUの拡張命令セットが使われているので、CPUが古いと実行できないかも。(未確認) AVX2あたりに対応していれば問題ないはず。
実行時に CUDA_ERROR_OUT_OF_MEMORY
(メモリのアロケートに失敗した的なエラー)が出る場合は、マシンのメモリが不足しているかも。GPUと同じ量のメモリを割り当てる必要がある?46GB-32GB=14GB分の仮想メモリを設定したらエラーが出なくなった。
ディスプレイはグラボに繋がずにマザボード側に繋げておくこと。tensorflowを実行するとGPUからディスプレイへの出力がなくなるので、マザーボードのチップセット側から出力することをオススメします。
Windows10の制約かNvidiaのドライバの制約かどちらかはわからないが、接続できるGPUは最大8台までらしい。
CUDAインストール まず、CUDAとか必要なものをインストールします。バージョンは結構シビアなのか指定されたものをインストールしないと動かないみたいです。
Visual C++ 15.0 CUDA Toolkit 9.0をインストールするために必要なのでインストールします。
https://www.visualstudio.com/downloads/ からVisual Studio Community 2017のインストーラをダウンロードして VC++ 15.0
をインストールします。
2GBくらいのファイルのダウンロードが必要で、更にダウンロードスピードが100KB/sくらいしか出ないので、かなり時間がかかります。
9.0をインストールします。現時点では9.1がありますがtensorflowのimportでDLLのロードに失敗するので9.0をインストールする必要がありました。
CUDA Toolkit 9.0 download からダウンロードしてインストールします。
これも、1GB以上のファイルのダウンロードが必要です。
Patchもダウンロードしてインストールします。
Driverがインストールされていない場合は、Toolkitをインストールすると自動的に385.54がインストールされるので、必要があれば別途ダウンロードしてアップデートすると良いかも。
cuDNN 7.0 https://developer.nvidia.com/rdp/cudnn-download から cuDNN をダウンロードします。 ※ユーザ登録が必要です。
cuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0
をダウンロードして解凍します。解凍したらパスを通すか、 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
の下にある同じフォルダにコピーします。
動作確認 nvccとGPUが認識されているか確認します。
C:\Users\ishiis>nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2017 NVIDIA Corporation Built on Fri_Sep__1_21:08:32_Central_Daylight_Time_2017 Cuda compilation tools, release 9.0, V9.0.176
C:\Users\ishiis>"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe" Sat Apr 07 13:57:24 2018 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 391.35 Driver Version: 391.35 | |-------------------------------+----------------------+----------------------+ | GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 1070 WDDM | 00000000:02:00.0 Off | N/A | | 30% 30C P8 7W / 150W | 111MiB / 8192MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 GeForce GTX 1070 WDDM | 00000000:03:00.0 Off | N/A | | 0% 34C P8 5W / 195W | 111MiB / 8192MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 2 GeForce GTX 1070 WDDM | 00000000:04:00.0 Off | N/A | | 0% 33C P8 5W / 195W | 111MiB / 8192MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 3 GeForce GTX 1070 WDDM | 00000000:06:00.0 Off | N/A | | 0% 39C P8 5W / 151W | 111MiB / 8192MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 4 GeForce GTX 1070 WDDM | 00000000:07:00.0 Off | N/A | | 0% 33C P8 4W / 151W | 111MiB / 8192MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 5 GeForce GTX 106... WDDM | 00000000:08:00.0 Off | N/A | | 27% 28C P8 5W / 120W | 98MiB / 6144MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
よさそう。
tensorflow-gpuインストール Anacondaを使っても良いですが、今回はpythonのみインストールします。
Python3.6 からインストーラをダウンロードしてインストール。
$ python --version Python 3.6.2 $ python -m ensurepip --upgrade $ pip3 -V pip 9.0.1
最後に tensorflow-gpu
をインストールします。
$ pip3 install --upgrade tensorflow $ pip3 freeze | grep tensorflow-gpu tensorflow-gpu==1.7.0
動作確認 サンプルを実行してみる。
$ python >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!' ) >>> sess = tf.Session() >>> print (sess.run(hello)) b'Hello, TensorFlow!'
正しくインストールされてない場合はimportでエラーが出ると思います。
マルチGPUで動かしてみる。
https://github.com/tensorflow/models.git のcifar10にマルチGPUのサンプルがあるのでそれを実行してみる。
$ git clone https://github.com/tensorflow/models.git $ cd models $ git checkout remotes/origin/r1.8.0 -b r1.8.0 $ python tutorials/image/cifar10/cifar10_multi_gpu_train.py \ --num_gpus=6 --max_steps=5000 --train_dir=./cifar10_train (...) 2018-04-07 09:07:54.550640: step 4980, loss = 0.94 (7021.0 examples/sec; 0.018 sec/batch) 2018-04-07 09:07:55.425736: step 4990, loss = 0.91 (9829.0 examples/sec; 0.013 sec/batch)
正しく動いていそうなので終わり。
参考
https://www.tensorflow.org/versions/r1.7/install/install_windows
http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/