今更DeepLearning用環境をwin10で構築したメモ.

# この記事は.
GPU(NVIDIA GeForce GTX 1080 Ti)付きwin10コンピュータをDL用に購入した際の環境構築メモです.
いろいろと参考記事をまとめたものです.特に,CUDAのインストールでどはまりしました..

# バージョン
* NVIDIA GeForce GTX 1080 Ti
* windows10,64bit
* VisualStudio2015communitiy(インストール時に必要なだけで後でアンインストールしても問題なし)
* python: v3.6.8 (Anaconda: v1.9.6 これはどうでもいいけど)
* keras : v2.2.4
* tensorflow-gpu v1.8.0(v1.12.0でもいけた)

# 事前調べ
## NVIDIA
NVIDIA Corporationは,アメリカ合衆国カリフォルニア州サンタクララにある半導体メーカー.
コンピュータのグラフィックス処理や演算処理の高速化を主な目的とするGPUを開発し販売する.
文章はググっただけ.
https://www.nvidia.com/en-us/

##CUDA(インストール必須)
Compute Unified Device Architecture：クーダ
並列コンピューティングアーキテクチャ

##cuDNN(インストール必須)
CUDAのDNN(deep-neural-network)なライブラリ.NVIDIA社のDL用SDKの1つ.効率良く演算してくれる.
公式サイトの英語を(ちょー)意訳しただけ.

## そもそもグラボ認識してる?
魔法のコマンド : dxdiag
これでグラボのバージョンが分かる.
ディスプレイタブ見れば書いてあるはず>「NVIDIA GeForce GTX 1080 Ti」

#インストール開始
上記でインストールまでの準備は完了.

## visualStudio2015
CUDAをインストールするに当たりc++必要らしい.等価でVisualStudio2015をインストールすることになる.(詳細省略)
__インストール時に1回必要なだけなので無料版でも可能.ただし、CUDAインストール時にVisualStudioが見つからないみたいなアラート文が表示されるけど無視すればいけるはず.__

## CUDA
アーカイブからインストールを行います.今回はv9.0です.
[公式doc](https://developer.nvidia.com/cuda-toolkit-archive)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/283053/0cd320e0-c6f7-6ef2-69ff-c808ccce4908.png)

インストーラはnetworkでも良いですけど,たまに失敗するらしいです.

### 結果は...

いろいろインストールされてませんと出る...
![image.png](https://qiita-image-store.s3.amazonaws.com/0/283053/25f81053-31f7-4fbc-910d-4ead77f03774.png)

調べると全てのNVIDIA製品をアンインストールでいいらしい.しかし,そのままアンインストールでなくレジストリなども削除する必要がある..ココで一度心が折れました..(早いか.)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/283053/cf7c6645-fa9f-1c75-f0b5-37a9087f5425.png)
再度チャレンジすると,以下の投稿を見つけました.
[参考投稿](https://devtalk.nvidia.com/default/topic/1033111/cuda-setup-and-installation/cuda-9-1-cannot-install-due-to-failed-visual-studio-integration/
)

下の方にある__Step B: Uninstall existing NV driver and clean registry__の通りに全てをレジストリを含めてアンインストールする.
その後に再度exeを叩くとインストールできましたー!

## cuDNN
CUDAのバージョンに対応するcuDNNをインストールします.
[対応バージョン](https://omedstu.jimdo.com/2018/06/28/tensorflow-gpu%E3%81%A8cuda%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3/)

インストーラーを取得するにはサイトに登録しないとダメっぽいので素直に登録します.
インストーラーはcuDNN v7.4.2(CUDA9.0対応)

zipを解凍すると,各フォルダにファイルがあるので以下のパスにそれぞれを移動してあげます.
__C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0__
[参考記事](https://qiita.com/spiderx_jp/items/5f733c88e7437bc5e2d4)

ココまで来れれば後は,anacondaの設定のみ

#Anaconda

```python:バージョン指定コマンド
pip install tensorflow-gpu==1.8.0
```

バージョンは参考記事だと, v1.8.0なのでそれに従ったけど、最初最新(v1.12.0)で普通に動いたから大丈夫かもしれない.
(pip install tensorflow==1.8.0 これも必要かもしれない?もしかしたら一緒にインストールされるかもしれない.憶えてない..)

```python:残り
pip install keras
```
kerasはバージョンは特に意識しないでいけた. (keras : v2.2.4)

これで準備は完了!

#実際にやってみる!
* jupyterを起動する.
* ソースをコピペする. [keras公式doc](https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py)
* 実行する.
![image.png](https://qiita-image-store.s3.amazonaws.com/0/283053/82092035-9bd0-a792-0895-1046b739a782.png)

調子に乗って別のソースも試したら,jupyterが動かなくなりました.調べるとメモリがオーバーするので指定しないとダメらしいです.

```python:メモリ制限するコード
import tensorflow as tf
from keras import backend as K

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4 #40%使うよ
sess = tf.Session(config=config)
K.set_session(sess)
```
[参考](https://qiita.com/namakemono/items/12ad8a9f6d0561929056)

#まとめ
これで,GPUの環境構築は終わりです.
お勉強はcpu環境で行っていたので,初回の実行速度を体感すると感動ものです!
同じようなことをする方の参考になれば幸いです.