※公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。
TensorFlowはビルドツールのBazelがWindowsに対応していないため、Windowsではビルドができなかった。
Bash on Windowsを導入することで、Ubuntuのパッケージをバイナリでインストールすることが可能になったが、Bash on WindowsはGPUに対応していないため、CPUでしか実行できなかった。
ながらくそのような状態だったが、とうとうTensorFlowをWindowsでGPUを有効にしてビルドできるようになった。
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/cmake/README.mdgithub.com
ビルドツールにCMakeを使用してビルドができる。
まだアルファ版と注釈されているが、問題なくビルドしてMNISTのサンプルを実行することができた。
基本的にREADME.mdの通りの手順でビルドできたが、実施した手順を記しておく。
準備
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をインストールしたディレクトリにコピーする。
ビルド
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%"
※パスの部分は環境に合わせて適切な場所に変更する。
ビルド
以下のコマンドを実行する。
MSBuild /p:Configuration=Release tf_tutorials_example_trainer.vcxproj
ビルドには1時間以上かかった。
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を交換して試してみる予定。