TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

TensorFlowの公式Windowsバイナリをインストールして動かす

2017/2/18追記 1.0正式版がリリースされましたので、この記事の内容は古くなっています。正式版のインストールについてこちらの日記に書きました。

先日TensorFlowがWindowsでビルドできるようになったという記事を書いたが、公式からバイナリのインストーラが提供された。

https://www.tensorflow.org/versions/r0.12/get_started/os_setup.html#pip-installation-on-windows

さっそくインストールしてMNISTサンプルを動かすことができたので、手順を示しておく。
基本的に公式のドキュメント通りでインストールできた。

前提ソフトウェアとして、以下のソフトウェアをインストールしておく。

インストール済みのTensorFlowをアンインストール

自分でビルドしたTensorFlowをインストール済みの場合は、アンインストールを行う。

pip uninstall tensorflow

TensorFlowのインストール

GPUを有効にして、TensorFlowをpipでインストールする。

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

※2017/2/14追記 コマンドは古くなっているので、最新の情報は公式を参考にしてください。


自分の環境ではインストール中に以下のエラーがでたが、2回実行すればインストールできた。

Traceback (most recent call last):
  File "c:\anaconda3\lib\runpy.py", line 184, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Anaconda3\Scripts\pip.exe\__main__.py", line 9, in <module>
  File "c:\anaconda3\lib\site-packages\pip\__init__.py", line 233, in main
    return command.main(cmd_args)
  File "c:\anaconda3\lib\site-packages\pip\basecommand.py", line 252, in main
    pip_version_check(session)
  File "c:\anaconda3\lib\site-packages\pip\utils\outdated.py", line 102, in pip_version_check
    installed_version = get_installed_version("pip")
  File "c:\anaconda3\lib\site-packages\pip\utils\__init__.py", line 838, in get_installed_version
    working_set = pkg_resources.WorkingSet()
  File "c:\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 644, in __init__
    self.add_entry(entry)
  File "c:\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 700, in add_entry
    for dist in find_distributions(entry, True):
  File "c:\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1949, in find_eggs_in_zip
    if metadata.has_metadata('PKG-INFO'):
  File "c:\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1463, in has_metadata
    return self.egg_info and self._has(self._fn(self.egg_info, name))
  File "c:\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1823, in _has
    return zip_path in self.zipinfo or zip_path in self._index()
  File "c:\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1703, in zipinfo
    return self._zip_manifests.load(self.loader.archive)
  File "c:\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1643, in load
    mtime = os.stat(path).st_mtime
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。: 'c:\\anaconda3\\lib\\site-packages\\setuptools-27.2.0-py3.5.egg'

MNISTサンプル実行

GitHubから最新のレポジトリをダウンロードする。

git clone https://github.com/tensorflow/tensorflow.git


MNISTサンプルを実行する。

cd tensorflow\models\image\mnist
python convolutional.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
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 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 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.8225
pciBusID 0000:01:00.0
Total memory: 8.00GiB
Free memory: 6.66GiB
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 1080, pci bus id: 0000:01:00.0)
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:586] 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), 13.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.254, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.6%
Step 200 (epoch 0.23), 5.3 ms
Minibatch loss: 3.353, learning rate: 0.010000
Minibatch error: 7.8%
Validation error: 4.5%
Step 300 (epoch 0.35), 5.3 ms
Minibatch loss: 3.127, learning rate: 0.010000
Minibatch error: 1.6%
Validation error: 3.1%

(略)

Step 8100 (epoch 9.43), 5.3 ms
Minibatch loss: 1.630, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Step 8200 (epoch 9.54), 5.3 ms
Minibatch loss: 1.623, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.9%
Step 8300 (epoch 9.66), 5.3 ms
Minibatch loss: 1.610, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.7%
Step 8400 (epoch 9.77), 5.3 ms
Minibatch loss: 1.595, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Step 8500 (epoch 9.89), 5.3 ms
Minibatch loss: 1.600, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.9%
Test error: 0.8%

先日自分でビルドしたTensorFlowでは、100Stepごとの実行時間が約120msだったが、5.3msと実行速度が速くなっている。
速くなりすぎてちゃんと実行できているか不安になるが、error率が順調に減っているので動いていそうである。

なお、以下のエラーがでるのは、自分でビルドした場合と同じであるが、無視してもよさそうである。

E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:586] 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.


ビルドができるようになってから、こんなに早く公式のバイナリが提供されるとは思っていなかった。
これで、WindowsでもLinux並みの機械学習環境が整ったのではないだろうか。