機械学習用の環境を0から構築した(windows11 + VSCode + venv + Tensorflow + GPU)


新しいPCを買ったので最新の環境で構築してみました。
3年ほど前にも書いていますが、細かい部分が変わっていたりリンク切れ等があったので改めて書いています。

追記
- [2019年: Windows10 + TF2.0.0 + GPU の環境](https://qiita.com/pocokhc/items/08d3fb3ef0b6fa427528)
- 2022年: ここ
- [2023年: Windows11 + TF2.12 + WSL2 + GPU の環境](https://qiita.com/pocokhc/items/0a759130941090b1d231)
- [2025年: Windows11 + GPU + TensorFlowとPyTorch の環境](https://qiita.com/pocokhc/items/f796b4b3fa54510c8d3a)

# 1. Pythonのインストール

公式より入れたいバージョンをダウンロードし、インストールします。
<https://www.python.org/downloads/>

今回は3.10と3.7を入れてみました。

バージョン管理はwindowsなら標準ではいってくる py(Pythonランチャー)と venv で行います。
コマンドプロンプトから `py --list-paths` で入ってるPythonを確認できます。

``` sh
C:\Users\poco>py --list-paths
Installed Pythons found by py Launcher for Windows
 -3.10-64       C:\Users\poco\AppData\Local\Programs\Python\Python310\python.exe *
 -3.7-64        C:\Users\poco\AppData\Local\Programs\Python\Python37\python.exe
```

アスタリスクがついてるほうが優先されるバージョンです。

# 2. Python仮想環境の作成

仮想環境を作成し、バージョン毎の環境を分けます。
仮想環境を置くディレクトリはどこでも大丈夫です。（この記事ではホームディレクトリに作成します）

コマンドプロンプトから作成します。

``` sh
# venv用のディレクトリを作成（例はホームディレクトリ）
> cd
> mkdir venv
> cd venv

# v3.10 で仮想環境を作成する例
# CPU版とGPU版の環境を作成しています。
> py -3.10 -m venv py310-cpu
> py -3.10 -m venv py310-gpu
> dir /b
py310-cpu
py310-gpu
```

# 3. VSCodeのインストール

公式よりダウンロードし、インストールします。
<https://code.visualstudio.com/>

インストールしたら左のメニューの拡張機能から Python を追加しておきます。

## 3-1. 作業ディレクトリ

適当なディレクトリを作業ディレクトリとして用意します。
また、hello.py を用意しておきます。
(例： `C:/sample_app/` )

``` python:hello.py
print("hello world")
```

次に、VSCode上でこのフォルダを開きます。
`ファイル → フォルダーを開く → C:/sample_app/`

## 3-2. VSCodeとvenvの紐づけ

VSCode上で `ファイル → ユーザー設定 → 設定` を選択し、検索欄で `python.venvPath` を入れて `~/venv` を設定します。
（`~/venv`は先ほど作成したvenvのフォルダを指定します）

![ss3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396150/effe5a76-6663-8b54-c4fe-11e34e5580a2.png)

設定したらVSCodeを再起動して、VSCodeから hello.py を開きます。
右下から venv で作成したインタープリターが見えていれば紐づけは成功です。

![ss4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396150/dd746c7e-f012-e5b0-6b1c-c59fe6e43e1f.png)

ただ、このままだと実行権限が足りず、以下のエラーが出てます。

``` bash
PS C:\Users\poco\Documents> & C:/Users/poco/venv/py310-gpu/Scripts/Activate.ps1
& : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\poco\venv\py310-gpu\Scripts\Activate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:3
+ & C:/Users/poco/venv/py310-gpu/Scripts/Activate.ps1
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
```

Power Shell を管理者権限で開き、`Set-ExecutionPolicy RemoteSigned` を実行します。

``` bash
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

```

これで VSCode から `実行 → デバッグなしで実行` で実行ができると思います。

# 4. GPU環境の構築(Tensorflow)

バージョンですが、2022/8 現在最新の Tensorflow 2.9.1 を対象にします。

一応公式のGPU環境の要件は以下です。
<https://www.tensorflow.org/install/gpu?hl=ja>

ただ、更新があまりされていないような？今回は確認できた最新バージョンの導入例を書きます。

改めて環境は以下です。
・windows11
・Python 3.10.6
・NVIDIA GeForce RTX 3060

## 4-1. ドライバの更新

グラボのドライバを最新にしておきます。
<https://www.nvidia.co.jp/Download/index.aspx?lang=jp>

更新後、要再起動です。

## 4-2. CUDA のインストール

CUDA をインストールします。
DLページ：<https://developer.nvidia.com/cuda-toolkit-archive>

ここはバージョンが重要で、Tensorflow と合わないversionを入れると動きません。
一応以下に対応表があります。（が、TF2.6.0 で止まっていますね…）
<https://www.tensorflow.org/install/source?hl=ja#tested_build_configurations>

一応最新の 11.7.1 (cuda_11.7.1_516.94_windows.exe) を入れてみた所、無事に動きました。

## 4-3. cuDNN のインストール

cuDNN をダウンロードします。（無料ですが、要登録）
DLページ：<https://developer.nvidia.com/rdp/cudnn-download>

バージョンはCUDAと揃える必要があります。
今回入れたのは最新の `Download cuDNN v8.5.0 (August 8th, 2022), for CUDA 11.x` です。

cuDNN は zip ファイルで、解凍した後に CUDA フォルダに入れる必要があります。
CUDAフォルダは以下に作成されていました。

```
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\
```

解凍した中身をこのフォルダに入れて上書きします。

## 4-4. Zlib のインストール

cuDNN には Zlib が必要なようで、これをダウンロードします。

以下の公式ドキュメントの `ZLIB DLL` のリンクを `名前を付けて保存` でダウンロードします。
<https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#prerequisites-windows>

zip ファイルなので解凍して、`zlib123dllx64/dll_x64/zlibwapi.dll` のdllファイルをCUDAのbin配下にコピーします。
（環境変数が通ってる場所ならどこでも大丈夫です）

```
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin\zlibwapi.dll
```

## 4-5. Tensorflow GPU のインストール

CUDAを入れる前にインストールしても大丈夫です。
VSCode上でやる場合は `Ctrl+@` でプロンプトを出し、そこから pip でインストールできます。

``` bash
(py310-gpu) PS C:\sample_app> pip install tensorflow-gpu
```

CPU版を入れる場合は以下です。(インタープリターを切り替えています)

``` bash
(py310-cpu) PS C:\sample_app> pip install tensorflow-cpu
```

コマンドプロンプトでやる場合は以下です。

``` bash
> cd ~/venv/py310-gpu/Scripts
> activate
(py310-gpu) > pip install tensorflow-gpu
(py310-gpu) > deactivate
> cd ../../py310-cpu/Scripts
> activate
(py310-cpu) > pip install tensorflow-cpu
(py310-cpu) > deactivate
```

### GPUの確認

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

で確認できます。

``` python
(py310-gpu) > python
>>> from tensorflow.python.client import device_lib
>>> device_lib.list_local_devices()

（略）

[name: "/device:CPU:0"
device_type: "CPU"

（略）

, name: "/device:GPU:0"
device_type: "GPU"

（略）
]
```

GPU が見えていれば認識しています。

# おわりに

これでインタープリターを切り替えるだけで CPU と GPU の環境を簡単に切り替える環境ができました。
とりあえず失敗覚悟で最新のバージョンを入れてみましたがうまくいって良かったです。