この記事はなにか
せっかく強いPCがあるならGPU使ってこうぜ!ってことでWindowsでPythonのCUDA機械学習環境を整えたので、私自身の備忘録がてら、まとめておきます。
いろいろ試したけど、つまづいた方、これならうまくいってほしい!! (私自身もめちゃめちゃつまづいたので...)
構築するもの
- scoop: Windows向けのパッケージマネージャーで、コマンドラインを通じてソフトウェアを簡単にインストール・管理できるツール
- Python: 俺たちのPython
- CUDA: NVIDIA製GPU向けの並列計算プラットフォームおよびAPI
- cuDNN: NVIDIAが提供するディープラーニング向けのGPUアクセラレーションライブラリで、CUDAと連携して動作
- Pytorch: 機械学習と深層学習のフレームワーク
- TensorFlow: Googleが開発したオープンソースの機械学習と深層学習のフレームワーク
前提
ターミナルやコマンドプロンプトが動作する。
scoopのインストール
Windows向けのパッケージマネージャーで、コマンドラインを通じてソフトウェアを簡単にインストール・管理できるツールである、scoopをインストールします。
Windowsキーでpowershell
と入力してEnterをしてpowershellを起動してください。
その後以下のコマンドを実行してscoopをインストールします。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
iwr -useb get.scoop.sh | iex
使い方や、何が便利かはちゃちゃっと調べるといっぱい出てきます。
Pythonのインストール
今回、Pythonのインストールからはじめますが、単に、scoop install pythonとやると、最新版がインストールされてしまいます。 (全然インストールしてもよいです。)
しかし、CUDAを用いたTensorFlowは特定のバージョンのPythonでしか安定して動作するものがないので、今回はバージョンを3.10でインストールを進めます。
scoop install python310
また、グローバルに用いるpythonのバージョンを指定するために、以下のコマンドを実行してください。
scoop reset python310
これにて、Pythonのインストールは終了です。(簡単すぎ・・・)
venvによる仮想環境の構築
venvでPython環境の管理を行います。
mkdirで適当な名前のフォルダを作って、
mkdir python-cuda-test
cd python-cuda-test
その中で以下を実行して、envファイルを作成してください。
python3 -m venv <env名 (project_env)>
次に、作成した仮想環境に入るには、以下を実行して下さい。(一応、macの場合はScript → binらしい)
この中でpip installなどを行います。
source <project_env>/Scripts/activate
抜けるときたい時は以下を実行してください。
CUDAのインストール
CUDAのバージョンがめんどくさくてですね、最新版をいれるとTensorFlowとの互換性がなくて動かないことがほとんどです。現状、11.8が互換性の情報もあり、良さそうとのことで、このバージョンをインストールします。
以下のサイトから、11.8を選択してください。
このようにして、無事インストールできたら成功です。
cuDNNのインストール
CUDAと連携して動作するディープラーニング向けのライブラリである、cuDNNをインストールします。
以下のサイトからCUDA11.X系にあうcuDNNをインストールしてください。
zipを解凍すると、bin, include, libの3つのフォルダがある。
今回、CUDAの起動と同時にそれらを読み込んでほしいので、その中身を先ほどインストールした
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
のbin, include, lib中にコピペをします。
これらを踏まえたうえで、以下を実行して問題なく表示されればOK。
where cudnn64_8.dll
TensorFlowのインストール
先ほどPython3.10を入れた理由はここにある。今回、CUDAが安定動作するTensorFlowのバージョンは2.10系である。このTensorFlowはPython3.11以上ではインストールできない。
仮想環境の中に入ってTensorFlowをインストールします。
source <project_env>/Scripts/activate
大体必要なものをインストールしておきます。
python -m pip install tensorflow==2.10.1
python -m pip install tf_slim
python -m pip install tensorflow_datasets
python -m pip install tensorflow-hub
python -m pip install keras
python -m pip install keras-tuner
python -m pip install keras-visualizer
python -m pip install git+https://github.com/tensorflow/docs
python -m pip install git+https://github.com/tensorflow/examples.git
python -m pip install git+https://www.github.com/keras-team/keras-contrib.git
また、numpyも2系だと、うまく動作しないため、以下のように、バージョンを指定してインストールしてください。
pip install numpy==1.24.4
PytorchについてもCUDAのバージョンに沿ったものを入れなければならないため、以下をベースにインストールをしてください。
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
動作確認
以下のようにPythonを起動して、GPUが認識されていれば俺たちの勝利です。
$ python
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.config.list_physical_devices('GPU')
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
>>> for gpu in tf.config.list_physical_devices('GPU'):
... details = tf.config.experimental.get_device_details(gpu)
... print(details)
...
{'device_name': 'NVIDIA GeForce RTX 4090', 'compute_capability': (8, 9)}
その他
管理者権限でコマンドプロンプトを起動して、TensorflowがGPUメモリの割り当てを動的に拡張できるように設定しておくとよいことがあるかもしれません。
powershell -command "[System.Environment]::SetEnvironmentVariable(\"TF_FORCE_GPU_ALLOW_GROWTH\", \"true\", \"Machine\")"