Windows機を機械学習出来る様にする

Windows10搭載機でPythonによるコーディング及び機械学習を出来る環境作りのメモ
最近セットアップが多いんで先人の知見まとめ
(色々なサイトを確認するのが億劫になってきたので…)

本当にありがとうございます。

# 作業環境
OS:Windows10 home 64bit版
バージョン:20H2
使用マシン(ノートPC)
CPU:Intel Core-i7-10750H
GPU：GTX1650 4GB
メモリ： 16GB(8GBx2)

# 環境構築について
環境としてはPythonをメインにする。
今回は新規PCで1からのセットアップ

## ①Pythonのインストール
使うPythonは3.7.9

[Python3.7.9ダウンロードページ](https://www.python.org/downloads/release/python-379/)より使用バージョンをダウンロードする。

![スクリーンショット (304).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/62b97762-0c4b-95e1-4747-703e8e1570fb.png)

赤枠部を選択するとダウンロードが開始されます。

ダウンロード完了したらファイルを開いてインストーラーを起動する。

インストーラーを起動したら`Install Now`をクリックすればOKだが
Windows側のシステム変数(環境変数)の設定が必要なのでこの時点で
`Add Python ○○ to PATH`にチェックを入れてからインストールを行うと
自動的にPATHが設定されるのでチェックを忘れない事

![スクリーンショット (305).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/c93168ec-049f-bca6-7c1e-cd761b1b7f33.png)

後は表示に沿って実行していけばOK

インストール後、Windowsコマンドプロンプトにて`python -V`と入力するとpythonが起動する。

![スクリーンショット (306).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/7d95f0c8-51fe-24ae-f259-4f031a05ca94.png)

ちなみにコマンドプロンプトだが検索メニューバーに`cmd`と入力すると出てくるので
覚えておくといい事があるはず。

## ②CUDA Toolkitインストール
Tensorflowについては`1.14`or`1.15`を使用する前提なので必然的に使用するcudaとcuDNNのバージョンは決まる。

以下は対応表のリンクです。

[Tensorflow GPU対応表](https://www.tensorflow.org/install/source_windows?hl=ja)(公式サイト)

![スクリーンショット (308).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/0d02cbb9-160f-1798-5a12-cc287c3eb469.png)

現時点でRTX30シリーズ搭載機については最新のCUDA及びcuDNNをセットアップすれば
Tensorflow2.4系を使用出来るがTensorflow1系に関してはまだ未対応っぽいのと
RaspberryPiを使用するのであればTensorflow1系をおそらく扱うのでここでは1系です。

機械学習においてはCPUよりGPUを用いた方が演算速度が速いので使用出来る様にする為
NvidiaさんよりCUDA Toolkitをダウンロードする

尚、今回使用するGTX1650についてのスペックが気になるのであれば[こちらへ](https://www.nvidia.com/ja-jp/geforce/graphics-cards/gtx-1650/)
まぁ最新のRTX30シリーズに比べればCUDAコア数もメモリ数も全然違うので何とも言えないが
このスペックでも簡単な物ならそれなりに回せるのでOKと思います
(画像とか扱うなら本体メモリ容量に依存する部分が大きいけど…)

[CUDA Toolkit 10.0](https://developer.nvidia.com/cuda-10.0-download-archive) 

![スクリーンショット (309).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/ef74899c-d620-0d47-4bae-4cbef23d09de.png)

`OperatingSystem`から順番に選択していくと`Download`が出現するのでクリックすればOK

ダウンロードしたファイルと開くと`CUDA Setup Package`が立ち上がるので順次選択していけば大丈夫

### STEP.1
インストールフォルダの設定
デフォルトでOK
![スクリーンショット (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/4f46447d-68ba-9b5c-b7fb-4348319e8e43.png)

### STEP.2
『同意して続行する』をクリック
![スクリーンショット (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/c8c7bc3f-5509-207a-cbff-58c51969e8c3.png)

### STEP.3
『推奨』を選択して、『次へ』をクリック
カスタムで必要データを選択出来るのであればカスタムでも問題ないと思いますが
私は分かりません
![スクリーンショット (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/f1fe6923-b154-215b-9d8b-1286ede1d395.png)

### STEP.4
『I understand, and wish to continue the installation regardless』にチェックを入れて、『NEXT』をクリック
要は『インストールしてもいいよね？理解しているよね？』って事(google先生談)
![スクリーンショット (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/2a50477f-f751-6740-307a-c5096d722e79.png)

### STEP.5
『次へ』をクリック
![スクリーンショット (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/c7b4bb86-a6af-d87a-0616-386e3541919f.png)

### STEP.6
『閉じる』をクリック
サンプルとかが必要であれば各項目にチェックを入れてから『閉じる』をクリックすればOK
あっても特に変わらなかったのでなくてもよいと思っています。
多分、CUDAプログラミング関係だと思う
![スクリーンショット (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/5a83c3b8-916b-c9bb-c2ed-1a54d5b348d7.png)

ちなみにインストールされたものはこちら
![スクリーンショット (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/4a87d864-4153-f8c7-2d59-2bc5bf0d2fb1.png)

この場所に関しては後々cuDNNのセットアップで必要です。

これでインストールは完了！　…って訳でなく、ユーザー環境変数への追加が必要となります。

## ③CUDA環境変数追加
これを設定しておかないとTensorflow使えませんのでご注意下さい。(GPUが使えない)

### STEP.1
『スタートメニュー』から『設定』を選択
![スクリーンショット (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/4fcd6dc1-5444-6121-fd94-b899bfcc6d5d.png)

### STEP.2
『システム』を選択する
![スクリーンショット (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/b65f6a3b-c77b-a21e-a4c5-014e6377b026.png)

### STEP.3
『詳細情報』を選択する
![スクリーンショット (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/df2eaa2b-e767-0569-633e-4c356778036e.png)

### STEP.4
『システムの詳細設定』を選択する
![スクリーンショット (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/fff78b6b-62c0-c069-71df-e8bc2d8184c3.png)

### STEP.5
『環境変数』を選択する
![スクリーンショット (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/77def58d-8c8f-661b-9a50-2cb640938af9.png)

### STEP.6
システム環境変数にCUDAPATHが自動設定されているか確認する。
`C:¥Program Files¥NVIDIA GPU Computing Toolkit¥CUDA¥v10.0`と設定されている
![スクリーンショット (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/c4dc25d6-78ed-6858-2667-e84376602549.png)

### STEP.7
ユーザー環境変数の『Path』を選択した状態で、『編集』を選択する
![スクリーンショット (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/22dbc81c-af83-c9d5-d1bf-70f74a770f1c.png)

### STEP.8
新規で以下の2つを追加する。
`C:¥Program Files¥NVIDIA GPU Computing Toolkit¥CUDA¥v10.0¥bin`
`C:¥Program Files¥NVIDIA GPU Computing Toolkit¥CUDA¥v10.0¥libnvvp`
![スクリーンショット (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/086c1596-5f73-1bcc-a2d6-8ab41451b743.png)

設定が終わったら一旦Windowsを再起動しておく

### STEP.9
コマンドプロンプトに`where nvcc`と入力し。Pathが通っている事を確認する。
![スクリーンショット (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/ff67c2be-6803-8d58-f991-c0df4a038cad.png)

`C:¥Program Files¥NVIDIA GPU Computing Toolkit¥CUDA¥v10.0¥bin¥nvcc.exe`と表示されればOK

ここまでがCUDAのセットアップとなります。

## ④cuDNNのダウンロード
次にcuDNNのダウンロードを行う
ステップの道中にNVIDIAへのログインを求められるので
先にNVIDIA DEVELOPERのアカウントを作成しておくことをお勧めします。

[NVIDIA DEVELOPER](https://developer.nvidia.com)

![スクリーンショット (313).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/c9a0465c-efe9-8be1-e3e6-0573c636b274.png)
赤枠の『ACCOUNT』から設定していきます。
詳細については割愛しますが、Gmail等のアカウントで登録出来ます。

### STEP.1
[cuDNN7.4.5ダウンロードページ](https://developer.nvidia.com/rdp/cudnn-archive)

対応しているcuDNNのバージョンを選択し、その中の『cuDNN Library for Windows 10』を選択する。
![スクリーンショット (311).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/71f31d2a-84ba-fc5f-ece2-3c93570bdc68.png)

### STEP.2
ログインを求められるのでNVIDIA DEVELOPERにログインを行う。
![スクリーンショット (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/f46ffc1e-d87a-4295-5c92-76cf20e55f78.png)

### STEP.3
対応ファイルを選択し、ダウンロードを行う
クリックすればダウンロードされます。
![スクリーンショット (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/e1796c56-8de4-22f6-348e-286051674377.png)

## ⑤cuDNNのセットアップ
CUDAと同様のこちらも環境変数への設定追加が必要となります。

### STEP.1
ダウンロードされたファイルはダウンロードフォルダにあるが
zipの解凍をやり易くする為、新規でフォルダを作成する。
場所としてはCドライブ直下に`Tools`という名前のフォルダを作成。
そこにダウンロードしたcuDNNのzipファイルを移動して、そこで解凍を行う。

![スクリーンショット (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/49c0db54-7a65-c29a-7232-6b80dabff265.png)

### STEP.2
解凍したcuDNN内のデータをCUDA側の対応ファイル内のコピーして放り込む
(下図左がcuDNN、右がCUDA)

![スクリーンショット (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/2cdba878-6480-c2f3-736a-1ed5f0f4fb69.png)

ZIPファイルがあれば復元可能なので
`cuDNN:bin` ⇒ `CUDA:bin`
`cuDNN:include` ⇒ `CUDA:include`
`cuDNN:lib` ⇒ `CUDA:lib`
にそのまま移動した方が分かりやすいかも(テキストファイルも移動するのを忘れずに)

### STEP.3
環境変数変数を追加する。
今回はシステム環境変数
変数名は分かりやすい様に`CUDNN_PATH`(命名は自由)
変数値(ファイルの場所)は`C:¥Program Files¥NVIDIA Computing Toolkit¥CUDA¥v10.0`
直接入力でなくても『ディレクトリの参照』からでも選択可能(むしろこっちの方が分かりやすかったです。)

![スクリーンショット (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/05ee2b3c-80c9-266b-97a3-ae1d61388da4.png)

### STEP.4
cuDNNのパスが通るかを確認する。
コマンドプロンプトに`where cudnn64_7.dll`と入力する。


![スクリーンショット (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/dbb65de2-7a7e-8ccf-59be-a5f4a64a29ac.png)

問題がなければパスが通る。

以上がcuDNNセットアップです。

## ⑥Visual Studio 2015、2017 および 2019の再頒布プログラムのセットアップ
いざTensorflowを使用しようとするとエラー吐くはず(吐かれた)
動かすためにVisual Studio 2015、2017 および 2019の再頒布プログラムが必要

[Microsoft サポート](https://support.microsoft.com/ja-jp/topic/%E6%9C%80%E6%96%B0%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%95%E3%82%8C%E3%82%8B-visual-c-%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89-2647da03-1eea-4433-9aff-95f26a218cc0)

上記から必要ファイルをダウンロード＆インストールする

![スクリーンショット (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/43c1ded0-133c-2874-a401-1e63370ad628.png)

赤枠クリックで.exeファイルがダウンロードされるので、終わったらクリックしてインストールする。

![スクリーンショット (36).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/6d396fd2-c0d1-50ac-0c0e-ca84f5611fe1.png)

これでOKです。

## ⑦Visual Studio Codeのセットアップ
こちらについては必須ではありませんがコーディングするのに便利なので入れてます。

[Visual Studio Code](https://code.visualstudio.com/)
![スクリーンショット (314).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/2ad1625c-357c-61d7-33d4-3c4adab5d6fa.png)

『Download for Windows』をクリックすればダウンロードが開始されます。

ダウンロードされた.exeファイルを開くとインストーラーが立ち上がるので手順通りに進めていく。

### STEP.1
使用許諾に同意して『次へ』を選択する
![スクリーンショット (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/db8a548e-988a-cc52-0c32-ca196855857b.png)

### STEP.2
インストール先を指定して『次へ』を選択する
(デフォルトでなんら問題ないかと思います)
![スクリーンショット (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/fca657d1-3df3-5bcb-c2ea-479b490622b6.png)

### STEP.3
スタートメニューフォルダの指定をして『次へ』を選択する
(デフォルトから変更した事ないです。)
![スクリーンショット (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/5886c5fb-8947-5eb0-06dc-844daa910e49.png)

### STEP.4
設定に問題がなければ『インストール』を選択する
![スクリーンショット (42).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/043c87ee-4098-28d4-9012-5c0de964257f.png)

これで使用可能になります。

Visual Studio Codeの使い方に関してはここでは触れません。
他の詳しい方が色々と情報を開示してくれているのでそちらの方を参照して下さい。

## Tensorflowテスト
仮想環境を作成
Tensorflow-gpu == 1.15
keras == 2.2.4

ちなみにGPU使用時は`Tensorflow`はインストールしません。
`Tensorflow-GPU`でOKです。

仮想環境下で`pip install tensorflow-gpu==1.15`でインストールされます。
(これが正解かいまだに分かりませんが動くのでOKと思っています…)

VScodeでTensorflowのチュートリアルを実施

![スクリーンショット (43).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/82f95dc2-9236-48a5-0472-0f1d5e154a3a.png)

設定が問題なければ動きます。
エラーを吐いたら設定がどこかで間違っていると思われるので
Google教授の力を借りて調べていくのみです。

ちなみに

```
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
```

と入力して実行すると、認識しているGPUが表示されます。


# まとめ
これで最低限使用可能な状態になっていると思います。
ここから使用したいモジュール等をインストールしていけばよいと思います。
最近は仮想環境を作って環境別に分ける様にしていますが
AnacondaNavigatorの商用利用が有償化しているのでVENVにて仮想環境を構築する様にしています。
そちらに関しては[こちら](https://qiita.com/bobrock/items/77a6ab80351d6f804614)にまとめています。