事前確認:サポートされるCUDAバージョンの上限を調べる
コマンドプロンプト等で nvidia-smi を実行し、右上に表示される CUDA Version を確認する。これは「現在のグラフィックドライバーがサポートしているCUDAの最大(上限)バージョン」を示す(※1)。なお、私の環境では 12.8 であった。
※1
表示された数値は、PCにインストールされているToolkitの実体ではなく、あくまでドライバー側が受け付けられる「上限値」である。この上限値の範囲内で、かつアプリケーション側が要求するバージョンをインストールする必要がある。
www.digibeatrix.com
なお、ライブラリ取得するには、NVIDIAのアカウントが必要である。
2. cuDNNのインストールと配置
インストールしたCUDA Toolkitのバージョン(今回だと12.1)に対応するcuDNNをダウンロードする。 cuDNNはダウンロードして解凍するだけでは機能せず、手動配置が必須となる。
cuDNN Archive | NVIDIA Developer
ダウンロードしたcuDNNのZIPファイルを解凍する。
解凍したフォルダ内にある bin, include, lib の各フォルダの中身をすべてコピーする。
CUDA Toolkitのインストール先(デフォルトでは C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x )の同名フォルダ内に、コピーしたファイルを上書き保存する。
この配置を行うことで、パスの通ったCUDAディレクトリからcuDNNのライブラリ(.dll等)が正しく読み込まれるようになる。
3. ONNX Runtime(Python環境側)の競合排除と再インストール
これは人によっては、必要がない作業かもしれない。
私は、以下も対応して動いた模様(メモ書きが残ってた)。
CUDA ToolkitやcuDNNを正しく配置してもGPUが認識されない場合、Python環境内でONNX Runtimeの異なるバリアント(CPU版や他プラットフォーム版)が混在し、ライブラリの読み込み順序がバグっている可能性がある。
以下の手順で、不要な競合パッケージを一掃した上で、GPU専用版を強制的に再インストールする。
まず、uvなどで以下のコマンドを実行し、ONNX Runtimeが認識している現在のプロバイダーを確認する。
uv run python -c "import torch;import onnxruntime as ort;print('Torch CUDA:', torch.cuda.is_available());print('RT Providers:', ort.get_available_providers())"実行結果の RT Providers: のリストに CUDAExecutionProvider が含まれておらず、['AzureExecutionProvider', 'CPUExecutionProvider'] などの表記になっている場合は、パッケージの競合が原因である可能性が高い。
この場合、以下の2ステップを実行して環境を修復する。
uv pip uninstall onnxruntime onnxruntime-gpu onnxruntime-directml onnxruntime-openvino
uv pip install onnxruntime-gpu==1.24.3 --force-reinstall --no-cache
結果、['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']と表示される様になり、Face Fusion上からも認識した。