Deep Learning 用 GPU 環境構築 (CUDA関連インストール編)

## 対象読者
- これから, GPU 環境で Deep Learning を始めようと思っている方で, CUDA 関連の環境構築手順がわからない方.
- 環境構築を昔やったことがあるけれど, どうやるんだったかな・・・？ と記憶が忘却曲線に乗ってどこかに行ってしまった方.

## 本記事を読む上での注意
Windows を前提に環境構築手順を記載しています.   
なるべく Linux と Windows で違う点は補足していますが, 漏れがあるかもしれません. 大きな手順の流れは Windows と違わないので, 適宜 Linux に読み替えてください.

## 私が本記事と同じ方法で環境構築したことがある環境
- 環境1
  - OS : Windows 10, 64 bit, Home
  - GPU : GeForce GTX 1070 Ti  
- 環境2
  - OS : Windows 10, 64 bit, Professional
  - GPU : GeForce GTX 1080
- 環境3
  - OS : Linux Ubuntu 16.04
  - GPU : 名前を忘れました. かなり古いけどギリギリ tensorflow で使える computation capacity のもの

## 作成した CUDA 関連環境 & ターゲットフレームワーク
- CUDA 環境
  - CUDA 9.0
  - cuDNN 7.1.4
- Framework
  - tensorflow 1.8.0
  - pytorch 0.4.0

本文では CUDA 9.0, cuDNN 7.1.4 を例として説明します.
また, CUDA 9.0, cuDNN 7.1.4 を利用可能な Deep Larning Framework として, tensorflow 1.8.0, pytorch 0.4.0 を想定します.

**<font color="Blue">tensorflow 1.4 より前のバージョンでは, 根本的な手順は同じですが CUDA 8.0, cuDNN v6 が必要である点にご留意ください. CUDA 8.0 の場合でも pytorch 0.4.0 は動作するようです.</font>**

## 事前準備

- 本記事で想定している tensorflow, pytorch のバージョンと異なるバージョンを使う場合は, 必ず公式ドキュメントで入れるべき CUDA, cuDNN のバージョンを確認してください.
  - tensorflow
    - [Windows の場合](https://www.tensorflow.org/install/install_windows)
    - [Linux の場合](https://www.tensorflow.org/install/install_linux)
  - pytorch
    - [pytorch](https://pytorch.org/)

- VisualStudio 2015 をインストール（Windows のみ Linux では不要, Community で OK）
  - cuda インストール時に Visual C++ のコンパイラを使うため
  - 必ず C++ にチェック入れる

## 作業
きちんと準備段階で紹介した公式ドキュメントを読み必要なライブラリ依存を確認してから作業開始. 本記事と異なるバージョンの CUDA ライブラリをインストールする場合は, 適宜読み替えてください.

### 1. GPU ドライバの更新
- [cuDNN のインストール手順説明ページ](http://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html) に以下の記載があった

>One of the following supported CUDA versions and NVIDIA graphics driver:  
NVIDIA graphics driver 377.55 or newer for CUDA 8  
NVIDIA graphics driver 385.54 or newer for CUDA 9

- 自身の環境では 388.13 で要件を満たしていたが, 念のため更新しておいた
- 更新する場合は、[ドライバダウンロードページ](http://www.nvidia.co.jp/Download/index.aspx?lang=jp)から最新版のドライバをインストール

### 2. CUDA Tookit 9.0 のインストール
- [nvidia のアーカイブ](https://developer.nvidia.com/cuda-90-download-archive)より Local 版をダウンロード 1.3GB 程度
- ローカルに落とした実行ファイルを実行しインストール開始
- __以下のエラーが出た場合は、カスタムインストールを選択し Driver Components のインストールのチェックを外して他をインストールすれば問題なく使える.__

>This graphics driver could not find compatible graphics hardware. You may continue installation. but you may not be able to run CUDA applications with this driver. This may occur with graphics hardware that is newer than this toolkit. In that case, it is suggested that you keep your existing driver and install the remaining portions of the CUDA Toolkit.

- 参考：[上記エラーメッセージについて他の方が NVIDIA に質問していた TOPIC]( https://devtalk.nvidia.com/default/topic/949449/failed-to-setup-cuda-7-5-with-geforce-940mx/)

### 3. cuDNN v7 のインストール
- [nvidia の cuDNN](https://developer.nvidia.com/cudnn) ページへ行く
- "DOWNLOAD cuDNN" ボタンをクリックするとメンバー登録画面が出るので指示に従いメンバー登録
- sign in して download を進めると最後にバージョンを選べる
- Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0 をクリック
- プルダウンが開くので, cuDNN v7.1.4 Library for Windows 10 を選択してダウンロード（もちろん, Linux の場合は Linux を選択）
- zip ファイルを展開して、Cuda がインストールされたディレクトリの同一名ディレクトリにファイルをコピー

公式ドキュメント（[cuDNN のインストール手順説明ページ](http://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html)）より引用
>  - Copy <installpath>\cuda\bin\cudnn64_7.dll to C:\Program Files\NVIDIA GPU Computing >Toolkit\CUDA\v9.0\bin.
>  - Copy <installpath>\cuda\ include\cudnn.h to C:\Program Files\NVIDIA GPU Computing >Toolkit\CUDA\v9.0\include.
>  - Copy <installpath>\cuda\lib\x64\cudnn.lib to C:\Program Files\NVIDIA GPU Computing >Toolkit\CUDA\v9.0\lib\x64.

### 4. パスの確認
- 以下のパスが追加されていることを確認する
  - Variable Name: CUDA_PATH
  - Variable Value: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
- Linux の場合もパスを通す点は共通で必要な処理です（方法は Web 検索に任せる）

### 5. Deep Learning Framework のインストール
引き続き、[DeepLearning 用 GPU 環境構築 (python framework 環境整備編)](https://qiita.com/kattoyoshi/items/20923cb50951624b312c)　へ