FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

GPU対応TensorFlowをWindowsにインストールする方法まとめ(試行錯誤した結果)

ずいぶん昔の話だが、TensorFlowがWindowsに対応した。どうやらコマンドプロンプト経由でインストールする形式のようだ。

今回初めてTensorFlowをWindowsに導入してみたので、その手順を記録しておく。

msys2経由でのWindows版TensorFlowは難しい(不可能だったので諦めた)

msys2経由でpythonをインストールし、Windows版あるいはLinux版TensorFlowを導入しようとしたのだが、pip installの段階でエラーが出てしまい、ネットで情報を調べてもわからなかったので諦めてしまった。

Windowsコマンドライン経由でのインストールでも、Pythonのツールを間違えるとインストール出来ない

Windowsコマンドライン経由でのインストールでも最初につまずいた。Pythonの公式ホームページからPython 3.5.2のパッケージをインストールしたのだが、TensorFlowをインストールしようとしてもどうしてもうまくインストールできなかった。

> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
tensorflow_gpu-0.12.1rc0-cp35-cp35m-win_amd64.whl is not a supported wheel on th is platform.

のようなエラーメッセージが表示され、どうしてもインストール出来ない。

stackoverflow.com

いろいろ調査した結果、Pythonのインストールは公式パッケージではなく、Anacondaのパッケージを使用しなければならないようだ。

:: Anaconda Cloud

Anacondaのパッケージを利用してPython 3.5.2をインストールし、TensorFlowをインストールした結果、インストールが開始された。

f:id:msyksphinz:20170103132339p:plain

ありゃ、失敗してしまった。どうやら、さらにオプションを追加しないとダメらしい。

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

Collecting tensorflow-gpu==0.12.1 from https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
  Using cached https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
Collecting protobuf>=3.1.0 (from tensorflow-gpu==0.12.1)
  Using cached protobuf-3.1.0.post1-py2.py3-none-any.whl
Collecting numpy>=1.11.0 (from tensorflow-gpu==0.12.1)
  Using cached numpy-1.11.3-cp35-none-win_amd64.whl
Collecting six>=1.10.0 (from tensorflow-gpu==0.12.1)
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting wheel>=0.26 (from tensorflow-gpu==0.12.1)
  Using cached wheel-0.29.0-py2.py3-none-any.whl
Collecting setuptools (from protobuf>=3.1.0->tensorflow-gpu==0.12.1)
  Using cached setuptools-32.3.1-py2.py3-none-any.whl
Installing collected packages: six, setuptools, protobuf, numpy, wheel, tensorflow-gpu
Successfully installed numpy-1.11.3 protobuf-3.1.0.post1 setuptools-27.2.0 six-1.10.0 tensorflow-gpu-0.12.1 wheel-0.29.0

おおお、上手くいった。

動作テストをする

以下のようにしてTensorFlowをインポートした。

C:\Users\masayuki>python
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
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

GPUが認識されているかチェック

>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
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 780 Ti
major: 3 minor: 5 memoryClockRate (GHz) 1.0845
pciBusID 0000:01:00.0
Total memory: 3.00GiB
Free memory: 2.56GiB
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 780 Ti, pci bus id: 0000:01:00.0)
>>> print(sess.run(hello))
b'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42

これは動作している、という理解でいいのかな?