Windows 10にNVIDIA GPUを使用したDeep Learning環境をインストール。（CUDA10、VS2017、Chainerのインストール）

※以下の記事が最新です。（2020年9月）「Windows 10とTensorFlowでGPU Deep Learning学習環境を構築してみた（TensorFlow 2.3 と RTX で Tensor Coreと混合精度）」
https://qiita.com/kekekekenta/items/6df681a5cb735292eb83

こんにちは。2017年2月に Windows 10 の Deep Learning モデル開発環境を紹介しましたが、約2年経過し色々環境が変ってますね。RTX 20-も出ましたし。ですので、今回は最新（2018年11月時点）の環境構築方法を紹介します。NVIDIA GPU が搭載された Windows 10 に Chainer をインストールしていきます。

- 2017年2月の「NVIDIA GPUが搭載されたWindows 10にTensorFlowとChainerをインストールしてDeep Learningの学習環境を構築してみる」
 - https://qiita.com/kekekekenta/items/19972a45025a97330e21

Deep Learning 環境としては Linuxを使用した記事が多く紹介されていますが、Windows 10 は使いやすいディスクトップ環境と NVIDIA GPUを使うことができるので、モデル開発作業環境としては最適だと思います。

# Visual Studio 2017 のインストール
まずは、Visual Studio 2017 のビルド環境を整えます。CUDAのコード（特にChainerが使うcupy）をビルドするときに必要になります。今回紹介するDeep Learning環境で GPU を使わない場合は必要ありません。（たまにビルドが必要なPythonパッケージがありますので、インストールしておいたほうがいいと思います）

注意点としては、インストール時に、「C++ ワークロードを使用したデスクトップ開発」を選択することです。以下のページを参考にしてください。

- Visual Studio 2017 で C++ のサポートをインストール
 - https://docs.microsoft.com/ja-jp/cpp/build/vscpp-step-0-installation?view=vs-2017

- Visual Studio 2017 のダウンロードサイト
 - https://www.visualstudio.com/downloads/

Visual Studio 2017 を使わず、Pythonでビルドだけできればいい人は、以下の Tools for Visual Studio 2017（上と同じサイト）だけでも大丈夫です。インストーラーを立ち上げたら、ワークロードの「Visual C++ Build Tools」を選択します。

- Tools for Visual Studio 2017
 - https://visualstudio.microsoft.com/ja/downloads/
    - 下のほうの「すべてのダウンロード」から「Tools for Visual Studio 2017」の「Build Tools for Visual Studio 2017」をダウンロードします。

# NVIDIA CUDA と cuDNN のインストール
CUDAをインストールする前に最新のNVIDIAドライバをインストールしてください。リリースノートによると CUDA 10.0.130 は、411.31以上のドライバが必要です。

- NVIDIAドライバダウンロード
 - https://www.nvidia.co.jp/Download/index.aspx?lang=jp
- NVIDIA CUDA Toolkit Release Notes
 - https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

Visual Studio 2017をインストールした後に、CUDA のインストールを行います。CUDAのインストーラーはインストールされている Visual Studio を探して最適な追加パッケージをインストールします。GPUを利用しない場合はCUDAと下記のcuDNNは必要ありません。

- CUDA Toolkit 10.0
 - https://developer.nvidia.com/cuda-downloads

次にcuDNNをインストールします。Downloadページから、「Download cuDNN v7.4.1 (Nov 8, 2018), for CUDA 10.0」を選択、次に「cuDNN Library for Windows 10」を選択してダウンロードを行います。ダウンロードしたzipを展開して、CUDAのインストールフォルダ（C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0 ）にコピーします。CUDAのフォルダ名称に合わせてcuDNNのファイルをコピーしてください。なお、cuDNNのダウンロードには、ユーザの登録が必要になりますので、先に登録しておいてください。

- The NVIDIA CUDA® Deep Neural Network library (cuDNN)
 - https://developer.nvidia.com/cudnn

# Pythonのインストール
Chainerを動かすためのプログラミング環境を整えていきます。機械学習をはじめとしたプログラミング言語としてはPythonが人気です。Python環境としてはAnacondaが有名で分析や機械学習を行うためのライブラリも問題なく利用できます。[Azure Machine LearningでもAnacondaが使われている](https://www.continuum.io/blog/company-blog/microsoft-chooses-anaconda-azure-machine-learning-service)ようです。

Anacondaは下記のサイトよりダウンロードします。利用しているOSに合わせて適切なパッケージをインストールしてください。ボタンをそのままクリックし続ける（標準の設定）だけで大丈夫です。

- Anaconda Download
 - https://www.continuum.io/downloads

## python の 環境の作成（Visual Studio 2017対応）

スタートメニューからAnaconda Promptを実行して、環境を作成していきます。環境を作ることで作業環境を分けることができます。

```powershell
conda create -n py36 python=3.6
```

環境を作成したら、Anaconda環境で、Visual Studio 2017 を使えるように設定します。
先ほど作成した環境に変えて

```powershell
activate py36
```

Visual Studio 2017 を使えるようにパッケージをインストール

```powershell
conda install -c anaconda vs2017_win-64
```
これをインストールしておかないと、「 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools 」のようなエラーメッセージが出てcupyをインストールできません。リンクも違っているし、VS2015も簡単にはダウンロードできないし。

# Chainerのインストール
Chainerをインストールします。Chainerは容易に複雑なネットワークを作ることができるDeep Learningのフレームワークです。データによりノードを変えることができる Define by Run が特徴です。あと、質の良いサンプルコードも多く公開されているイメージです。

スタートメニューからAnaconda Promptを実行しますが、Chainerをインストールする前にcupyをインストールします。

インストールする前に環境を先ほど作成した環境に変えておきます。

```powershell
activate py36
```

そして、インストール。インストール時に、Visual Studio 2017でビルドされます。

```powershell
set INCLUDE=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include;%INCLUDE%
set LIB=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64;%LIB%
pip install cupy --no-cache-dir
```

次に、下記のコマンドでChainerをインストールします。

```powershell
pip install chainer --no-cache-dir
```

ChainerやCuPyが正しくインストールされたことを確認します。

```powershell
python -c "import chainer; chainer.print_runtime_info()"
```

以下のように Runtime Virsion などが取得できれば大丈夫です。

```
Platform: Windows-10-10.0.17134-SP0
Chainer: 5.0.0
NumPy: 1.15.4
CuPy:
  CuPy Version          : 5.0.0
  CUDA Root             : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
  CUDA Build Version    : 10000
  CUDA Driver Version   : 10000
  CUDA Runtime Version  : 10000
  cuDNN Build Version   : 7401
  cuDNN Version         : 7401
  NCCL Build Version    : None
iDeep: Not Available
```

# NVIDIA GPUの状態を知る
実際にDeep Learningの学習を始めるとGPUが熱くなりますが、下記のコマンドを使うことによりGPUの状態を知ることができます。

```powershell
cd C:\Program Files\NVIDIA Corporation\NVSMI
nvidia-smi.exe
```

実行すると下記のようにGPUの状態を知ることができます。寒い時期は安心してガンガンぶん回すことができますね。

```
(py36) C:\Program Files\NVIDIA Corporation\NVSMI>nvidia-smi.exe
Sun Nov 11 09:23:39 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 416.81       Driver Version: 416.81       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1070   WDDM  | 00000000:01:00.0  On |                  N/A |
| 27%   24C    P8     7W / 151W |    243MiB /  8192MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
```

# さいごに
最近は、Windows 10 ディスクトップ環境で動くことを確認してから、多くのGPUが使えるAzure DSVMなどのクラウド環境で学習させてます。（2日ぐらいの学習であればディスクトップ環境でもいですが、他のことができなくなるので）LinuxでもWindowsでも動くPythonコードを書くように心がけるのが大事です。

あと、画像を使う場合はOpenCVなどを使いますが、下記のコマンドでインストールすることができます。

```powershell
conda install opencv
```

CUDA 10になったし、GeForce RTX 20- も使えるようになったし、TensorCore も使える環境になりましたね！あとは、GPUを買うだけですね！d(´∀`*)
ではー。