Windows版TensorFlow+CUDA+cuDNNでGPUを使用してみたら思ったより速度が出なかった

ヨメレバCSS

 Windows版TensorFlowでは、CUDAを使用したGPUサポート版があります。

 今度はそちらをインストールしてみます。

 ただ結果としては…思っていたパフォーマンスは出ませんでした…

スポンサーリンク
GoogleAdSence レクタングル(大)

環境

OS Windows10 64bit Home
GPU

GeForce GTX 1070 / Intel Graphics 530

ノートPCで、Intelグラフィックスも搭載しているものです。

CUDAのインストール

 まずCUDA、そしてcuDNNをインストールする必要があります。

 CUDAのサイトから、CUDA 8.0をダウンロードしてインストール。

Join us online Oct. 5-9 for the GPU Technology Conference (GTC), featuring live and on-demand sessions, discounted NVIDIA Deep Learning Institute training, and ...

 で、最初のシステムチェックで

This graphics driver could not find compatible graphics hardware. You may continue installation, but you may not be able to run CUDA application with this driver. This may occur with graphics hardware that is newer than this toolkit. In that case, it is suggessted that you keep your existing driver and intall the remaining portions of the CUDA Toolkit.

…という嫌な警告が…

 ひとまず入れてみないとなんともなので入れてみることにします。

インストールオプションは「高速」で。あとは「次へ」ばかりでOKかと。

cuDNNのインストール

 次にcuDNNもインストールします。

NVIDIA cuDNN The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tun...

より、「Download cuDNN v5.1 (August 10, 2016), for CUDA 8.0」を選択して、

「cuDNN v5.1 Library for Windows 10」をダウンロード。

これはzipファイルになっているので、解凍した中身(bin, include, libディレクトリ)をCUDAをインストールした先に上書きします。

 CUDAはデフォルトでは「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0」にインストールされていると思いますので、そちらの同名ファイルに上書きします。

TensorFlow (GPU版)のインストール

 TensorFlowのインストール。

 今回はGPU版のほうをpipでインストールします。

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

とするとインストールが完了します。

 しかし、とりあえず前回のMNISTを実行してみると、

> python .\MNIST.py
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cublas64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cudnn64_5.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cufft64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library curand64_80.dll locally
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
WARNING:tensorflow:From .\MNIST.py:28 in <module>.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 1070
major: 6 minor: 1 memoryClockRate (GHz) 1.645
pciBusID 0000:01:00.0
Total memory: 8.00GiB
Free memory: 6.68GiB
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:906] DMA: 0
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:916] 0:   Y
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
Failed to get the number of CUDA devices: CUDA driver version is insufficient for CUDA runtime version
Failed to initialize CUDA device #0: CUDA driver version is insufficient for CUDA runtime version
(略)
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_blas.cc:372] failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED
W c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\stream.cc:1390] attempting to perform BLAS operation using StreamExecutor without BLAS support

 となってしまい動きませんでした。

ドライバのアップデート

 NVIDIAのサイトでドライバを見てみると、2017/1/8時点で、376.33が出ていました。

インストールされていたドライバをNVIDA コントロールパネルより「ヘルプ > システム情報」から確認すると、368.83だったのでアップデートしました。

 これをインストールして、再度実行してみると

> python .\MNIST.py
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cublas64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cudnn64_5.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cufft64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library curand64_80.dll locally
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
WARNING:tensorflow:From .\MNIST.py:28 in <module>.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 1070
major: 6 minor: 1 memoryClockRate (GHz) 1.645
pciBusID 0000:01:00.0
Total memory: 8.00GiB
Free memory: 6.67GiB
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:906] DMA: 0
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:916] 0:   Y
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
0.9189

一応動くようになりました。ちゃんとGPUを使っているようです。

…でも、期待していたほど速度が出ていないような…?

CPU版と比較してみる

 なので、実行速度を測ってみることにします。

 Linuxだとtimeコマンドというツールがあるのですが、Windowsは何かないか…と思ってみていると、powershellの Measure-Commandというのが使えそう。

それで比較してみると、CPU版は

> Measure-Command {python .\MNIST.py }
WARNING:tensorflow:From .\MNIST.py:28 in <module>.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 9
Ticks             : 40096865
TotalDays         : 4.64084085648148E-05
TotalHours        : 0.00111380180555556
TotalMinutes      : 0.0668281083333333
TotalSeconds      : 4.0096865
TotalMilliseconds : 4009.6865

約4秒。で、GPU版は、

> Measure-Command {python .\MNIST.py }
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cublas64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cudnn64_5.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cufft64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library curand64_80.dll locally
WARNING:tensorflow:From .\MNIST.py:28 in <module>.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 1070
major: 6 minor: 1 memoryClockRate (GHz) 1.645
pciBusID 0000:01:00.0
Total memory: 8.00GiB
Free memory: 6.67GiB
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:906] DMA: 0
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:916] 0:   Y
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 9
Milliseconds      : 92
Ticks             : 90920690
TotalDays         : 0.000105232280092593
TotalHours        : 0.00252557472222222
TotalMinutes      : 0.151534483333333
TotalSeconds      : 9.092069
TotalMilliseconds : 9092.069

約9秒…

 うーん…むしろ遅くなってしまっている…

 以前、Linux版でGPUの仕様を試したときは、GPUのほうが速度出ていたと思うので、Windows固有の何かなのか、このノートPCが悪いのか(Intelグラフィックスも積んでいるし、CUDAインストール時に警告も出ていたし)、ちょっと原因はわからないのですが…

ひとまず手順メモということで残しておきます。

スポンサーリンク
GoogleAdSence レクタングル(大)

コメント

  1. […] Windows版TensorFlow+CUDA+cuDNNでGPUを使用してみたら思ったより速度が出なかった2017/1/8http://scriptlife.hacca.jp/contents/programming/2017/01/08/post-2025/ […]