とりあえずWindowsで機械学習環境を構築する（GPUあり）

タイトルのまんま。
9割自分用のメモです。
最終的にはtensorflowでGPUを使えるようにし、開発環境としてはJupyter Labをインストールします。

* Windows 10 Home（バージョン2004／OSビルド21301.1010＊評価版を使用）
* Python 3.8.7
* tensorflow-gpu 2.4.1
* CUDA 11.0
* cuDNN 8.1
* GeForce 1660 GTX Super

**以下の情報はすべて2021/2/13時点のものとなります。**

# Pythonのインストール

**Anacondaは使わないです。**

公式サイトからどうぞ。
https://www.python.org/

Downloadのタブから、Stable Releases（安定版）のインストーラーを選択します。
自分の場合はWindows installer(64-bit）を選択。

![スクリーンショット 2021-02-12 202539.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/2923ff3f-8482-e84a-6a63-bc44c2312437.png)


* 基本的にインストーラーに従うだけでOK。ただし最小構成にしたい場合は「Customize Installation」をチェック。インストーラーの起動も「管理者として実行」から。
* 「Add Python 3.8 to PATH」をチェックしPATHをチェック。
* 「Disable path length limit」が表示された場合にはパス最大長の制限を解除する。
* インストール完了後は、おなじみユーザー環境変数を確認。コントロールパネル→システム→システムの詳細設定→詳細設定タブ→環境変数　から。

作業が完了したらバージョンを確認しましょう。

### バージョンの確認方法
コマンドプロンプトを起動→「python -V」を実行。

# tensorflowのインストール
gpu対応版のtensorflowはバージョンごとに必要なCUDAとcuDNNのバージョンが指定されています。
https://www.tensorflow.org/install/source?hl=ja#gpu_support_2
![スクリーンショット 2021-02-12 204041.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/0dbe5926-4e2c-8009-763d-8680c91c94a2.png)

今回はtensorflow-2.4.xをインストールします。
念のため一度tensorflow周りのアンインストールを実行してから再度インストールを行います。

```
pip uninstall -y tensorflow tensorflow-cpu tensorflow-gpu tensorflow_datasets tensorflow-hub keras
```

```
pip install -U tensorflow-gpu tensorflow_datasets
```

### バージョンの確認方法
コマンドプロンプトを起動し、以下のコマンドを実行。

```
pip list  | find "tensor"
```

# Visual Studioのインストール
機械学習関係なくね？　って感じですがCUDA、cuDNNのインストールにはVisual Studio（正確にはVisual C++ ビルドツール）が必要です。
Visual Studio Communityを入れてもいいし、ビルドツールだけでも問題ありません。
https://docs.microsoft.com/ja-jp/visualstudio/releases/2019/release-notes

Visual Studio Installerでは「C++ Build Tools」にチェックを入れておきます。
これだけで6GBくらい容量食います……。
![スクリーンショット 2021-02-13 135115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/677f794b-790c-7ee8-dcc7-025525980f1d.png)


# CUDAのインストール
前述の通り、**指定のバージョンをインストール**しましょう。
https://developer.nvidia.com/cuda-toolkit-archive

CUDA Toolkit 11.0 Update1 (Aug 2020)を選択します。
![スクリーンショット 2021-02-13 132554.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/e3bba03f-df88-e9bb-10b5-bff657b6bc62.png)

プラットフォームの入力が求められるので、Windows→x86_64→10と選択します。
Installer Typeはどちらでも構いません。
![スクリーンショット 2021-02-13 132916.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/97195d4e-b2d2-0747-5b7e-da2977fd2c67.png)

インストール時の設定は基本的に規定値のままでOKです。
ドライバのコンポーネントを指定する場面がありますが、ここは「CUDA」のみチェックすれば大丈夫。


### バージョンの確認方法
コマンドプロンプトを起動し、以下のコマンドを実行。

```
nvcc -V nvcc
```

念のためパスが通っているかも見ておくとよいでしょう。

# cuDNNのインストール
同じく**指定のバージョンをインストール**しましょう。
とか言っておきながら、自分がインストールしたのはcuDNN 8.1でした。が、しっかり動いています。
CUDAがtensorflowのバージョンに依存し、cuDNNは対応するCUDAのバージョンが重要とかなのでしょうか？
https://developer.nvidia.com/cudnn-download-survey

cuDNNのダウンロードにはNVIDIAのDeveloper Program Membershipに参加する必要があります。
アカウントを持っていない方は作成してください。

必要なcuDNNのバージョンを選択し、.zipファイルのダウンロードを行います。
解凍後は以下のディレクトリが構成されています。
![スクリーンショット 2021-02-13 133955.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/f97195d0-0625-640e-e0ea-26db17dc384c.png)

cuda以下のフォルダすべてを**cudaのインストールディレクトリにコピー**します。
前章の作業でおそらく「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0」というディレクトリが作成されているはずなので、そちらにどうぞ。

### バージョンの確認方法
ちょっと調べたんだけど、自分の環境ではコマンドから確認がうまくできませんでした。
「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include」の中に「cudnn.h」というフォルダがあるのでテキストエディタで開きます。
その中に「# define CUDNN_MAJOR」だとか「# define CUDNN_MINOR」だとかがあるので、それを調べます。

# GPU認識の確認
tensorflowがきちんとgpuを認識してくれているかを確認します。

コマンドプロンプトから以下のコマンドを実行。

```
python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
```

以下の表示がでればOKです。
![スクリーンショット 2021-02-13 135612.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/194ca40a-7567-7742-e9a5-efe3dc0dc15b.png)

これで一山超えました。


# Jupyter Labのインストール
Annacondaを使っていないのでデフォルトのIDLEしか入っていません。
開発環境はお好みで良いと思いますが、自分はJupyter Labを使用しています。

コマンドプロンプトを起動し、以下のコマンドを実行します。

```
pip install -U pip setuptools
pip install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
```

以下のコマンドを実行し、ブラウザ上でJupyter Labが起動すればOKです。

```
jupyter lab
```

### 作業ディレクトリの変更
Jupyter Labのデフォルトのディレクトリは「C:\Users\（ユーザー名）」になっているのでちょっと使いにくい。
ので、以下の手順で作業ディレクトリを編集します。

まずコマンドプロンプトから以下のコマンドを実行。

```
jupyter lab --generate-config
```

すると「C:\Users\（ユーザー名）\.jupyter」というフォルダの直下に「jupyter_lab_config.py」というファイルが生成されているはずです。
これをテキストエディタで開き、以下の通りディレクトリを指定してあげます。

```
c.NotebookApp.notebook_dir = '（指定したいディレクトリのパス）'
```

ちなみに昔の～config.pyファイルには「# c.NotebookApp.notebook_dir = ''」という行があり、コメントアウトを解除してからパスを設定していたようですが、自分の環境では検索かけてもでてきませんでした。
～config.pyファイルはデフォルトではすべてコメントアウトされた状態の設定ファイルで、たとえオリジナルのファイルに行がなくても新たに入力することでjupyterはしっかり判別してくれます。

設定が完了したらJupyter Labを再起動し、設定が反映されていることを確認します。

あとはExtensioの追加ですが、こちらはお好みで。
自分は以下のページを参考にしています。
https://qiita.com/canonrock16/items/d166c93087a4aafd2db4




---

以上。

トラブル等なく進んでだいたい30分～1時間くらいでしょうか？
（入れるバージョンやディレクトリさえ間違わなければ）
あとは必要に応じ、pipからライブラリをインストールしましょう。