TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

TensorFlowをGPUを有効にしてWindowsでビルドする(続き)

公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。

GPUGeForce 1080に交換したので、前回の日記WindowsGPUを有効にしてビルドしたTensorFlowを動かしてみた。

結果は以下の通り、GPUで実行できた。

tensorflow\models\image\mnist>python convolutional.py
I h:\src\tensorflow\tensorflow\stream_executor\dso_loader.cc:125] successfully opened CUDA library cublas64_80.dll locally
I h:\src\tensorflow\tensorflow\stream_executor\dso_loader.cc:125] successfully opened CUDA library cudnn64_5.dll locally
I h:\src\tensorflow\tensorflow\stream_executor\dso_loader.cc:125] successfully opened CUDA library cufft64_80.dll locally
I h:\src\tensorflow\tensorflow\stream_executor\dso_loader.cc:125] successfully opened CUDA library nvcuda.dll locally
I h:\src\tensorflow\tensorflow\stream_executor\dso_loader.cc:125] successfully opened CUDA library curand64_80.dll locally
Extracting data\train-images-idx3-ubyte.gz
Extracting data\train-labels-idx1-ubyte.gz
Extracting data\t10k-images-idx3-ubyte.gz
Extracting data\t10k-labels-idx1-ubyte.gz
I h:\src\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:944] Found device 0 with properties:
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.8225
pciBusID 0000:01:00.0
Total memory: 8.00GiB
Free memory: 6.66GiB
I h:\src\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:965] DMA: 0
I h:\src\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] 0:   Y
I h:\src\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1034] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
E h:\src\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:662] Could not identify NUMA node of /job:localhost/replica:0/task:0/gpu:0, defaulting to 0.  Your kernel may not have been built with NUMA support.
Initialized!
Step 0 (epoch 0.00), 12.3 ms
Minibatch loss: 8.334, learning rate: 0.010000
Minibatch error: 85.9%
Validation error: 84.6%
Step 100 (epoch 0.12), 5.3 ms
Minibatch loss: 3.247, learning rate: 0.010000
Minibatch error: 4.7%
Validation error: 7.4%
Step 200 (epoch 0.23), 5.3 ms
Minibatch loss: 3.363, learning rate: 0.010000

(省略)

Step 8300 (epoch 9.66), 5.3 ms
Minibatch loss: 1.611, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Step 8400 (epoch 9.77), 5.3 ms
Minibatch loss: 1.596, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Step 8500 (epoch 9.89), 5.3 ms
Minibatch loss: 1.606, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Test error: 0.8%
実行時間の比較
Step 100 (epoch 0.12), 5.3 ms

といった行で、100ステップの実行時間が表示されている。

前回のCPUでの実行時間は、

Step 100 (epoch 0.12), 120.8 ms

と表示されており、約120msかかっていた。

それに比べ、今回は5.3msで実行されており、22.8倍高速に計算できている。

GPUで実行されていることの確認

実行結果に、

E h:\src\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:662] Could not identify NUMA node of /job:localhost/replica:0/task:0/gpu:0, defaulting to 0.  Your kernel may not have been built with NUMA support.

という行が出力されているのが気になるが、実行時間からGPUで実行されていると考えて問題はなさそうである。


ビデオカードの付属ソフトで、GPUのクロックが表示できるので確認したところ、アイドル時はGPUクロックが200MHzくらいであるが、実行中は2GHzくらいになっていたので、ちゃんとGPUで実行できているようである。


これで、WindowsでもGPUでTensorFlowを動かせることが確認できた。