Windows7上にTensorFlow1.5.0rc0(GPU版)をインストールする

インストールに四苦八苦したので、備忘録としてQiitaに残しておきます。
Windows上でTensor Flow 1.5.0rc0のGPU版を動かすための組み合わせは以下のとおりです。

|インストール順 |名称                  |バージョン|
|---          |---                   |---|
|1            |Visual Studio         |2012, 2013, 2015, 2017|
|2            |NVIDIA graphics driver|385.54以降|
|3            |CUDA Toolkit          |9.0|
|4            |CuDNN                 |v7.0.5|
|5            |Python                |3.5, 3.6(※)|
|6            |Tensor Flow           |1.5.0rc0(GPU版)|

※：Mac、LinuxだとPython2.7, 3.3, 3.4版のバイナリもある模様。

参考：
https://github.com/tensorflow/tensorflow/issues/15656
https://devtalk.nvidia.com/default/topic/1022648/cuda-9-unsupported-visual-studio-version-error/
https://pypi.python.org/pypi/tensorflow/1.5.0rc0

注意：
このページは2018/1/8時点での情報です。
最新の情報が必要な場合、一次ソースにアクセスして下さい。

# インストール方法

以下の順番でやっていけば間違いないと思います。

## Visual Studio Community 2017
https://docs.microsoft.com/ja-jp/visualstudio/install/install-visual-studio
学生、OSS開発者、個人の開発者であれば無料のCommunity版が利用可能とあります。
ワークロードは"Desktop development with C++"を選択すれば良さそうです。

参考
[CUDA 7.5 をWindows10にインストールし、Sampleコードを実行するまで](https://qiita.com/wazakkyd/items/ab79920b22b24b385487)
[CUDA 9.0のインストール方法 (Visual Studio 2017用)](https://qiita.com/take-iwiw/items/0bf12bec9c3bade2e331)

## NVIDIA graphics driver
http://www.nvidia.co.jp/Download/index.aspx?lang=jp
CUDA9には 385.54以降 が必要です。

## CUDA Toolkit 9.0
https://developer.nvidia.com/cuda-90-download-archive
Tensoflow1.5rc0は最新のCUDA9.1には未対応なので、古めのバージョンを使います。

参考：
[TensorFlowが正式にWindowsサポートしてGPUが使えたので試してみた](https://qiita.com/tilfin/items/24e9491eb8a4ce42eea6)

## CuDNN v7.0.5
https://developer.nvidia.com/rdp/cudnn-download#a-collapse705-9
CUDA 9.0向けのバージョンを使います。
ダウンロードにはNVIDIA Developer Programへの登録が必要です。
こちらはインストーラは無く、zipファイルを解答して出てきた
bin, include, lib の3つディレクトリを以下に上書きします。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0 

### CUDA_PATHの設定
多分やらなくても大丈夫そうですが、Installation Guideに載っていたので、一応和訳しておきます。
コマンドプロンプトを開き"control sysdm.cpl"と入力してEnterし、
詳細設定タブから環境変数に以下を追加します。
* 変数名 : CUDA_PATH
* 変数値 : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0

Visual Studioの設定も載っていますが、こちらは直接CUDAを叩く場合の話っぽいので省略します。

## Anaconda
https://www.continuum.io/downloads
こちらは最新のものを使ってしまって問題ないと思います。
Anacondaの使い方について書かれた記事はたくさんあるので詳細は割愛します。



### Python, Tensor Flow

AnacondaからPythonとTensor flowをインストールします。

```
conda create -n gputf15rc0 python=3.6 anaconda
activate gputf15c0
pip install tensorflow-gpu==1.5.0rc0
```

参考
[Anaconda で Python 環境をインストールする](https://qiita.com/t2y/items/2a3eb58103e85d8064b6)
[Windows版AnacondaでTensorFlow環境構築](https://qiita.com/exy81/items/48314b968d9fad6170c8)
[[Python]Anacondaで仮想環境を作る](https://qiita.com/supersaiakujin/items/50def6f33b79f9a61b18)
[TensorFlowをWindowsにインストール Python初心者でも簡単だった件](https://qiita.com/FukuharaYohei/items/d8f82c827e0bae70096a)
[pipでバージョン指定してインストール](https://qiita.com/matsu911/items/72e0bb6224a30d205739)

# サンプルを動かす

以下のサンプルプログラムを実行します。

```python3
import tensorflow as tf
import os

# 後述のwarningを抑制する
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
```

"CUDA9.0をインストールしろ"といったメッセージが出ず、
b'Hello, TensorFlow!' と出てきたら成功です。

なお、以下の箇所ですが・・・

```python3
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
```

これが無いと以下のwarningが出てきてしまいます。
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

* 直訳
  このCPUはこのTensorFlowバイナリが使わない拡張命令セットAVX, AVX2をサポートしています

* 意訳
  自分でTensorFlowバイナリをビルドし直した方が多分早くなるよ

参考：
https://stackoverflow.com/questions/47068709/your-cpu-supports-instructions-that-this-tensorflow-binary-was-not-compiled-to-u