【CUDA】CUDA 12.xとcuDNN 9の互換性マトリクス完全ガイド:エラー「cudnn not initialized」を解決する環境構築手順

問題の概要: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以降を選択してください。インストール後は、環境変数PATHLD_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開発環境を構築することができます。

この記事は役に立ちましたか?