win11 pcには以前、cuda 11.2, cuDNN 8.9.2 をinstallしていますが、 onnxruntime が必要とするversionと異なるようですので、 cuda11.8, cudnn8.5.0 を再installしています。
ついでに、GeForce Game Ready driver も再installしています。
目次
- 0. 環境 win11 + miniconda24.5 + GeForce RTX 4090
- 1. GeForce Game Ready driver, CUDA, cuDNN の再install
- 2. conda create や pip install onnxruntime-gpu
- 3. pip install tensorflow[and-cuda] tf2onnx 等
0. 環境 win11 + miniconda24.5 + GeForce RTX 4090
PS> systeminfo : OS 名: Microsoft Windows 11 Pro OS バージョン: 10.0.22621 N/A ビルド 22621 システム製造元: LENOVO システム モデル: 21HMCTO1WW システムの種類: x64-based PC [01]: Intel64 Family 6 Model 186 Stepping 2 GenuineIntel ~1900 Mhz Windows ディレクトリ: C:\Windows システム ディレクトリ: C:\Windows\system32 物理メモリの合計: 65,193 MB :
PS C:\Users\end0t> conda --version conda 24.5.0 PS C:\Users\end0t> python --version Python 3.12.4
PS C:\Users\end0t> Get-WmiObject -Class Win32_VideoController : AdapterCompatibility : NVIDIA AdapterDACType : Integrated RAMDAC AdapterRAM : 4293918720 Availability : 8 Caption : NVIDIA GeForce RTX 4090 DriverDate : 20240730000000.000000-000 DriverVersion : 32.0.15.6081 :
1. GeForce Game Ready driver, CUDA, cuDNN の再install
参考url 1.1にあるように、 win11 pcには以前、cuda 11.2, cuDNN 8.9.2 をinstallしていますが、 onnxruntime を使用する為、参考url 1.3 & 4 を参照し、 cuda11.8, cudnn8.5.0 を再installしています。
ついでに、GeForce Game Ready driver も再installしています。
参考url
- 1.1 install tensorflow_gpu & pytorch for python 3.10 to windows11 & NVIDIA GeForce RTX3060(GDDR6 12GB) - end0tknr's kipple - web写経開発
- 1.2 build & install llama.cpp to windows11 with gpu - end0tknr's kipple - web写経開発
- 1.3 ONNX Runtime(GPU版)のインストール | ジコログ
- 1.4 NVIDIA - CUDA | onnxruntime
GeForce Game Ready driver 560.81 win11
https://www.nvidia.com/ja-jp/drivers/details/230597/ より 560.81-desktop-win10-win11-64bit-international-dch-whql.exe を ダウンロードし、実行するだけです。
CUDA Toolkit 11.8
https://developer.nvidia.com/cuda-toolkit-archive より cuda_11.8.0_522.06_windows.exe をダウンロードし、実行します。
cuda_11.8.0_522.06_windows.exe のインストーラが、 多く環境変数も設定してくれますが、 「CUDA_PATH = %CUDA_PATH_V11_8%」だけは、手動編集しています。
以下は環境変数 PATH
また、参考url 1.2 を見ると、cuda11.2 のinstall時、 レジストリを編集しているようですので、以下の内容を追加しています。
項目 | 内容 |
---|---|
レジストリキー | HKEY_LOCAL_MACHINE\SOFTWARE\NVIDIA Corporation\GPU Computing Toolkit\CUDA\v11.8 |
名前 | InstallDir |
種類 | REG_SZ (文字列) |
データ | C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8 |
cuDNN 8.5.0.96
https://developer.nvidia.com/rdp/cudnn-archive より cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip をダウンロード & 解凍し C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8 へ、コピーします。
GeForce RTX 4090 が認識されていることを確認
ここまでのinstallで nvidia-smi というコマンドが、 C:\Windows\System32 にinstallされていますので、以下のように実行することで GeForce RTX 4090 が認識されていることを確認できます。
PS C:\Users\end0t> nvidia-smi -L GPU 0: NVIDIA GeForce RTX 4090 (UUID: GPU-e87ef9c0-2654-6223-9868-ecc2973f1789)
2. conda create や pip install onnxruntime-gpu
参考url
miniconda base>python --version Python 3.12.4
conda create や pip install onnxruntime-gpu
miniconda base> conda create -n cuda python=3.10 miniconda base> conda activate cuda miniconda cuda> python -m pip install --upgrade pip setuptools
miniconda cuda> pip install onnxruntime-gpu miniconda cuda> pip list Package Version --------------- ------- coloredlogs 15.0.1 flatbuffers 24.3.25 humanfriendly 10.0 mpmath 1.3.0 numpy 1.26.4 onnxruntime-gpu 1.18.1 packaging 24.1 pip 24.2 protobuf 5.27.3 pyreadline3 3.4.1 setuptools 72.2.0 sympy 1.13.2 wheel 0.43.0
onnxruntimeがgpuを認識していることを確認
import onnxruntime print( onnxruntime.get_available_providers() )
↑こう書いて、↓こう表示されれば、OKです
miniconda cuda> python foo.py ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']
3. pip install tensorflow[and-cuda] tf2onnx 等
この先のentryで onnx 書式のモデルを使用し、類似画像検索を行いますが、 これに備え、tensorflow[and-cuda] tf2onnx の install 等を行います。
参考url
pip install tensorflow[and-cuda] tf2onnx 等
miniconda cuda> pip install tensorflow[and-cuda] miniconda cuda> pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 miniconda cuda> pip install tf2onnx miniconda cuda> pip list Package Version ---------------------------- ------------ absl-py 2.1.0 astunparse 1.6.3 cachetools 5.4.0 certifi 2024.7.4 charset-normalizer 3.3.2 coloredlogs 15.0.1 filelock 3.13.1 flatbuffers 24.3.25 fsspec 2024.2.0 gast 0.4.0 google-auth 2.33.0 google-auth-oauthlib 1.0.0 google-pasta 0.2.0 grpcio 1.65.4 h5py 3.11.0 humanfriendly 10.0 idna 3.7 Jinja2 3.1.3 keras 2.13.1 libclang 18.1.1 Markdown 3.6 MarkupSafe 2.1.5 mpmath 1.3.0 networkx 3.2.1 numpy 1.24.3 oauthlib 3.2.2 onnx 1.16.2 onnxruntime-gpu 1.18.1 opt-einsum 3.3.0 packaging 24.1 pillow 10.2.0 pip 24.2 protobuf 3.20.3 pyasn1 0.6.0 pyasn1_modules 0.4.0 pyreadline3 3.4.1 requests 2.32.3 requests-oauthlib 2.0.0 rsa 4.9 setuptools 72.2.0 six 1.16.0 sympy 1.13.2 tensorboard 2.13.0 tensorboard-data-server 0.7.2 tensorflow 2.13.1 tensorflow-estimator 2.13.0 tensorflow-intel 2.13.1 tensorflow-io-gcs-filesystem 0.31.0 termcolor 2.4.0 tf2onnx 1.16.1 torch 2.4.0+cu118 torchaudio 2.4.0+cu118 torchvision 0.19.0+cu118 typing_extensions 4.9.0 urllib3 2.2.2 Werkzeug 3.0.3 wheel 0.43.0 wrapt 1.16.0
pytorch から gpu が認識されていることを確認
# -*- coding: utf-8 -*- import torch from tensorflow.python.client import device_lib; print( torch.cuda.is_available() ) print( torch.version.cuda ) print( torch.cuda.device_count() ) print( torch.cuda.get_device_name() ) print( "" ) print( device_lib.list_local_devices() )
↑こう書いて↓こう表示されればOK
True 11.8 1 NVIDIA GeForce RTX 4090 2024-08-14 15:41:58.819659: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: SSE SSE2 SSE3 SSE4.1 SSE4.2 AVX AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. [name: "/device:CPU:0" device_type: "CPU" memory_limit: 268435456 locality { } incarnation: 1347897820107021385 xla_global_id: -1 ]
zlibwapi.dll のコピー
この先のentryの操作で zlibwapi.dll に関するエラーとなりましたので、
C:\Users\end0t\miniconda3\envs\cuda\Lib\site-packages\torch\lib にある zlibwapi.dll を copy to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin へ、 コピーしています。