UbuntuにAnacondaで構築するTensorFlow-GPU環境【4】〜CUDA、cuDNNインストール編〜

#TensorFlowのGPU版（tensorflow-gpu）を動かすために必要なこととは？
1. Deep Learningを行う計算力(compute capability)のある比較的新しいGPU（nvidia社製）を搭載していること。
2. GPUの適切なドライバーがOSに入っていて、使用可能な状態になっていること
3. tensorflow-gpuやGPUのドライバー（CUDA）、Deep Learning用のライブラリ（cuDNN）を入れる環境を作るため、Anacondaがインストールされていること。
4. Pythonや必要なライブラリがバージョンの互換性を持っていること👈**今ここ**

#この記事のゴール
tensorflow-gpuを動かすために必要なライブラリを適切なバージョン関係でインストールされた環境を構築する。

#必要なライブラリ
tensorflow-gpu、cuDNN、CUDAの三つです。
これらを互換性に注意してconda installでインストールしていきます。

#バージョンの互換性について
上にあげた三つとPythonのバージョンを下の表に対してある程度、合わせる必要があります。
Anacondaで環境構築する今回はコンパイラとビルドツールは気にせずに、tensorflow-gpu、Python、cuDNN、CUDAの四つのバージョンを合わせれば良いです。
互換性については<https://www.tensorflow.org/install/source?hl=ja>にて以下の表を確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844955/b0d12ad5-8eeb-5e47-5d38-da2e7c858cbd.png)


「ある程度」というのは、cuDNNやCUDAは表のバージョンがcondaで配布されていないものもあるので必ずしもぴったりのバージョンはインストールできないです。例えば私はPython==3.6.10、tensorflow-gpu==1.13.1、cudnn==7.6.5、CUDA==10.0_0という環境でその組み合わせは表には載っていないですが問題なく動きます。

ちなみに、次のコマンドで配布されているcuDNNとCUDAのバージョンを確認できます（この二つはセットでインストールできる）。例えば、表で指定されているcudnn==7.4でCUDA==10.0はcondaでは配布されていないことが確認できます。

```Bash
(base)$conda search cudnn
Loading channels: done
# Name                       Version           Build  Channel
cudnn                          7.0.5       cuda8.0_0  pkgs/main
cudnn                          7.1.2       cuda9.0_0  pkgs/main
cudnn                          7.1.3       cuda8.0_0  pkgs/main
cudnn                          7.2.1       cuda9.2_0  pkgs/main
cudnn                          7.3.1      cuda10.0_0  pkgs/main
cudnn                          7.3.1       cuda9.0_0  pkgs/main
cudnn                          7.3.1       cuda9.2_0  pkgs/main
cudnn                          7.6.0      cuda10.0_0  pkgs/main
cudnn                          7.6.0      cuda10.1_0  pkgs/main
cudnn                          7.6.0       cuda9.0_0  pkgs/main
cudnn                          7.6.0       cuda9.2_0  pkgs/main
cudnn                          7.6.4      cuda10.0_0  pkgs/main
cudnn                          7.6.4      cuda10.1_0  pkgs/main
cudnn                          7.6.4       cuda9.0_0  pkgs/main
cudnn                          7.6.4       cuda9.2_0  pkgs/main
cudnn                          7.6.5      cuda10.0_0  pkgs/main
cudnn                          7.6.5      cuda10.1_0  pkgs/main
cudnn                          7.6.5      cuda10.2_0  pkgs/main
cudnn                          7.6.5       cuda9.0_0  pkgs/main
cudnn                          7.6.5       cuda9.2_0  pkgs/main
```
[【３】UbuntuにAnacondaで構築するTensorFlow-GPU環境構築〜Anaconda仮想環境作成編〜](https://qiita.com/captain-sadami/items/a026130c2fbb3513b6e2)で作成した仮想環境、ibio_envをactivateします。

```Bash
(base)$ conda activate ibio_env
(ibio_env)$
```
まず、tensorflow-gpuからインストールします(versionは==（バージョン）で指定できる)。
**注意点⚠️：tensorflowとtensorflow-gpuは別物で同じ環境に共存できないのでインストールする際は必ず"-gpu"を忘れずにつけることを気を付けてください。**

```Bash
(ibio_env)$conda install tensorflow-gpu==1.13.1
```

Pythonもバージョンを合わせる。

```Bash
(ibio_env)$conda install python==3.6.10
```
cuDNN、CUDAをインストールします。
先ほど改めて試したら、tensorflow-gpuをインストールしたとき自動でインストールされましたが、一応インストールの方法を示しておきます。
cuDNNとCUDAはセットでインストールします。
cudnn=（バージョン）=（ビルド）で指定します。


```Bash
(ibio_env)$conda install cudnn=7.6.5=cuda10.0_0
```
以上で環境構築は終わりです。

#うまくいかない場合
ライブラリの互換性が問題の場合はconda uninstall (ライブラリ名)でアンインストールは可能なのでバージョンを上げたり下げたりして粘り強くうまくいく場所を探してください。環境が煩雑になったり壊れたりすることもあると思いますが、その都度、作り直して試行錯誤していきましょう。

#最後にGPUが認識できているかを確認
最後にtensorflow-gpuがGPUを認識してくれているかを確認してみましょう。
参照：<https://thr3a.hatenablog.com/entry/20180113/1515820265>
認識しない場合、他のバージョンもアタリをつけて試してみましょう。