問題の概要:CUDA 12.xとcuDNN 9の互換性エラー
AI開発、特に深層学習モデルのトレーニングや推論を行う際、CUDAとcuDNNのバージョン不一致は最も頻繁に遭遇する課題の一つです。CUDA 12.x(例:12.1, 12.2, 12.4)とcuDNN 9.xを組み合わせて環境構築を試みると、以下のような具体的なエラーが発生し、PyTorchやTensorFlowなどのフレームワークが正常にGPUを認識・利用できなくなります。
# 典型的なエラーメッセージ例
RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
# または
Could not load dynamic library 'libcudnn.so.9'; dlerror: libcudnn.so.9: cannot open shared object file: No such file or directory
# PyTorchでの例
torch.cuda.is_available() # False を返す
これらのエラーは、ライブラリのパスが通っていない、バージョンがサポートされていない、またはインストールが不完全であることを示しています。本記事では、CUDA 12.x系とcuDNN 9.x系の正しい組み合わせと、確実な環境構築手順を解説します。
原因の解説:バージョン互換性マトリクスの重要性
CUDA (Compute Unified Device Architecture) はNVIDIA GPUを用いた並列計算のためのプラットフォームであり、cuDNN (CUDA Deep Neural Network library) はその上で深層学習の演算を高速化するためのライブラリです。これらは密接に連携して動作するため、厳格なバージョン互換性が要求されます。
主な原因は以下の3点です。
1. 公式サポート外の組み合わせの使用
CUDA 12.x と cuDNN 9 は、特定のマイナーバージョン同士でしか互換性が保証されていません。例えば、CUDA 12.4にcuDNN 9.1.0を安易に組み合わせると、前述のエラーが発生します。
2. 環境変数(PATH, LD_LIBRARY_PATH)の設定不備
CUDAやcuDNNのライブラリファイル(.soファイルや.dllファイル)へのパスがシステムに正しく設定されていないと、アプリケーションがこれらのライブラリを見つけられません。
3. フレームワークが求めるバージョンとの不一致
PyTorchやTensorFlowの各リリースは、特定のCUDA/cuDNNバージョンに対してビルドされています。フレームワークのインストール時に`pip install torch==2.1.0+cu121`のように明示的にCUDAバージョンを指定しないと、互換性のない組み合わせがインストールされる可能性があります。
解決方法:ステップバイステップ環境構築ガイド
以下に、Ubuntu 20.04/22.04を例とした、確実な環境構築手順を示します。
ステップ1: 互換性マトリクスの確認とバージョン選定
まず、NVIDIA公式のCUDAツールキットアーカイブとcuDNNアーカイブで互換性を確認します。重要な互換性マトリクスは以下の通りです。
- CUDA 12.4: 対応するcuDNNは 9.1.0 以降の9.x系(例:9.3.0, 9.4.0)。
- CUDA 12.2: 対応するcuDNNは 8.9.x系 および 9.0.0 以降の9.x系。
- CUDA 12.1: 対応するcuDNNは 8.9.x系 および 9.0.0 以降の9.x系。
本ガイドでは、現在広く使われている組み合わせ CUDA 12.4 + cuDNN 9.3.0 を例に進めます。
ステップ2: CUDA 12.4のインストール
NVIDIAドライバが既にインストールされていることを前提とします。以下のコマンドでCUDA 12.4をインストールします。
# リポジトリの設定とCUDA 12.4のインストール
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda-repo-ubuntu2204-12-4-local_12.4.0-550.54.14-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-4-local_12.4.0-550.54.14-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4
# 環境変数をシェル設定ファイル(~/.bashrc)に追加
echo 'export PATH=/usr/local/cuda-12.4/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
# インストール確認
nvcc --version # CUDA 12.4 と表示されることを確認
ステップ3: cuDNN 9.3.0のインストール
NVIDIA Developerアカウントが必要です。ダウンロードページから「cuDNN v9.3.0 (November 28th, 2023), for CUDA 12.x」の「Local Installer for Linux x86_64 (Tar)」を選択し、ダウンロードします。
# ダウンロードしたtarファイルを展開(ファイル名はバージョンにより異なります)
tar -xvf cudnn-linux-x86_64-9.3.0.55_cuda12-archive.tar.xz
# ヘッダーファイルとライブラリファイルをCUDAツールキットディレクトリにコピー
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.4/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.4/lib64
sudo chmod a+r /usr/local/cuda-12.4/include/cudnn*.h /usr/local/cuda-12.4/lib64/libcudnn*
# シンボリックリンクの確認と更新(必要に応じて)
sudo ldconfig /usr/local/cuda-12.4/lib64
# インストール確認
cat /usr/local/cuda-12.4/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 以下のように表示されれば成功
# #define CUDNN_MAJOR 9
# #define CUDNN_MINOR 3
# #define CUDNN_PATCHLEVEL 0
ステップ4: フレームワークのインストールと動作確認
CUDA 12.4に対応したPyTorchをインストールします。
# PyTorchのインストール (CUDA 12.1用のwheelが一般的です。バックワード互換性により12.4でも動作します)
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 動作確認スクリプト
python3 -c "import torch; print(f'PyTorch version: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'cuDNN version: {torch.backends.cudnn.version()}') if torch.cuda.is_available() else print('CUDA not available')"
正常に設定されていれば、以下のような出力が得られます。
PyTorch version: 2.1.0+cu121
CUDA available: True
cuDNN version: 8903 # これはcuDNN 8.9.3を示す場合があります。フレームワークにバンドルされたバージョンが表示されることがありますが、システムのcuDNN 9.3.0が利用されます。
コード例・コマンド例:トラブルシューティングコマンド集
環境構築中に問題が発生した場合、以下のコマンドで状況を確認できます。
# 1. GPUとドライバの状態確認
nvidia-smi
# Driver VersionとCUDA Versionの欄を確認
# 2. CUDAコンパイラとランタイムのバージョン確認
nvcc --version
cat /usr/local/cuda/version.json # 詳細なバージョン情報
# 3. cuDNNライブラリのパスとバージョン確認
find /usr -name "libcudnn*" 2>/dev/null # cuDNNライブラリの場所を探す
ldconfig -p | grep cudnn # リンカーの認識状況を確認
# 4. 環境変数の確認
echo $PATH
echo $LD_LIBRARY_PATH
# 5. PythonからCUDA/cuDNNを直接テストするスクリプト
python3 -c "
import torch
print('Test 1 - Basic Availability:', torch.cuda.is_available())
if torch.cuda.is_available():
x = torch.rand(5, 3).cuda()
print('Test 2 - Tensor on GPU:', x.device)
from torch.backends import cudnn
print('Test 3 - cuDNN Enabled:', cudnn.is_acceptable(x))
"
まとめ・補足情報
CUDA 12.xとcuDNN 9の環境構築では、公式の互換性マトリクスに基づいたバージョン選定が最も重要です。特にCUDA 12.4を使用する場合は、cuDNN 9.1.0以降を選択してください。インストール後は、環境変数PATHとLD_LIBRARY_PATHが正しく設定されていることを必ず確認しましょう。
また、Dockerを使用する場合は、NVIDIAが提供する公式CUDAイメージ(例:nvidia/cuda:12.4.0-cudnn9-devel-ubuntu22.04)を利用することで、互換性の問題を大幅に軽減できます。このイメージには、あらかじめ互換性が保証されたバージョンのCUDAとcuDNNが含まれています。
最後に、PyTorchやTensorFlowをインストールする際は、必ずフレームワークの公式ドキュメントで、対象バージョンがサポートするCUDAバージョンを確認し、適切なインストールコマンド(pip install ...+cu121など)を使用してください。この一連の手順を踏むことで、「cudnn not initialized」をはじめとする互換性エラーを未然に防ぎ、安定したAI開発環境を構築することができます。