TadaoYamaokaの日記

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

TensorFlowをGPUを有効にしてWindowsでビルドする

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

TensorFlowはビルドツールのBazelがWindowsに対応していないため、Windowsではビルドができなかった。

Bash on Windowsを導入することで、Ubuntuのパッケージをバイナリでインストールすることが可能になったが、Bash on WindowsGPUに対応していないため、CPUでしか実行できなかった。

ながらくそのような状態だったが、とうとうTensorFlowをWindowsGPUを有効にしてビルドできるようになった。

github.com


ビルドツールにCMakeを使用してビルドができる。
まだアルファ版と注釈されているが、問題なくビルドしてMNISTのサンプルを実行することができた。


基本的にREADME.mdの通りの手順でビルドできたが、実施した手順を記しておく。

準備

CMakeのインストール

Windows版のCMakeをインストールする。

インストーラ版のcmake-3.6.2-win64-x64.msiを使用してインストールした。

インストール時に環境変数PATHを設定するオプションを有効にしておく。

Gitのインストール

Git for Windowsをインストールする。

SWIGのインストール

SWIGから、swigwin-3.0.10.zipをダウンロードして、適当な場所に解凍する。
解凍した場所を環境変数PATHに追加する。

C:\に解凍した場合は、「C:\swigwin-3.0.10」をPATHに追加する。

Visual Studio 2015のインストール

Visual Studio 2015 Communityをインストールする。

Python 3.5のインストール

Anaconda 4.1.1 (Python 3.5 64-bit)で、Python 3.5をインストールする。

NVidia CUDA Toolkit 8.0のインストール

NVidia CUDA Toolkit 8.0をインストールする。

NVidia CUDNN 5.1のインストール

NVidia CUDNN 5.1をダウンロードして、解凍したファイルをCUDAをインストールしたディレクトリにコピーする。

ビルド

コマンドプロンプト起動

スタートメニューから、「VS2015 x64 Native Tools コマンド プロンプト」を選択して、コマンドプロンプトを起動する。

TensorFlowをGitからダウンロードしてワークディレクトリを作成

適当な作業ディレクトリに移動して、以下のコマンドを実行する。

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow\tensorflow\contrib\cmake
mkdir build
cd build

ビルドファイル作成

以下のコマンドを実行する。

cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release ^
-DSWIG_EXECUTABLE=C:\swigwin-3.0.10\swig.exe ^
-DPYTHON_EXECUTABLE=C:\Anaconda3\python.exe ^
-DPYTHON_LIBRARIES=C:\Anaconda3\libs\python35.lib ^
-Dtensorflow_ENABLE_GPU=ON ^
-DCUDNN_HOME="%CUDA_PATH%"

※パスの部分は環境に合わせて適切な場所に変更する。

オプションに「-Dtensorflow_ENABLE_GPU=ON」を指定することでGPUが有効になる。

ビルド

以下のコマンドを実行する。

MSBuild /p:Configuration=Release tf_tutorials_example_trainer.vcxproj

ビルドには1時間以上かかった。

Pythonにインストール

以下のコマンドを実行する。

MSBuild /p:Configuration=Release tf_python_build_pip_package.vcxproj

.whlファイルがtf_python\distに作成される。

以下のコマンドで、Pythonにインストールする。

cd tf_python\dist
pip install tensorflow-0.11.0rc1_cmake_experimental-py3-none-any.whl

MNISTサンプル実行

コマンドプロンプトを起動し、TensorFlowをダウンロードした作業ディレクトリに移動し、tensorflow\models\image\mnist\convolutional.pyを実行する。

cd 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
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
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 760
major: 3 minor: 0 memoryClockRate (GHz) 1.0845
pciBusID 0000:01:00.0
Total memory: 2.00GiB
Free memory: 1.65GiB
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:1007] Ignoring visible gpu device (device: 0, name: GeForce GTX 760, pci bus id: 0000:01:00.0) with Cuda compute capability 3.0. The minimum required Cuda capability is 3.5.
Initialized!
Step 0 (epoch 0.00), 5.6 ms
Minibatch loss: 8.334, learning rate: 0.010000
Minibatch error: 85.9%
Validation error: 84.6%
Step 100 (epoch 0.12), 120.8 ms
Minibatch loss: 3.254, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.8%

(省略)

Step 8400 (epoch 9.77), 118.3 ms
Minibatch loss: 1.595, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Step 8500 (epoch 9.89), 118.2 ms
Minibatch loss: 1.619, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.9%
Test error: 0.8%


GPUが、GeForce GTX 760だったため、capabilityが足りずCPUでの実行となってしまった。
TensorFlowをGPUで実行するには、capability 3.5以上が必要である。
capability 3.5以上であれば、WindowsでもGPUで実行できるはずである。
GPUを交換して試してみる予定。