【CUDA】CUDA 12.xとcuDNN 9の互換性マトリクス完全ガイド:環境構築エラー解決法

問題の概要:CUDA 12.xとcuDNN 9の互換性エラー

AI開発、特に深層学習モデルの学習や推論をGPUで高速化する際、CUDAとcuDNNのバージョン不一致は最も頻繁に遭遇するトラブルの一つです。CUDA 12.x(12.0, 12.1, 12.2, 12.3, 12.4など)の環境に、互換性のないバージョンのcuDNNをインストールすると、以下のようなエラーメッセージが表示され、PyTorchやTensorFlowなどのフレームワークが正常に動作しなくなります。

# 典型的なエラーメッセージ例
Could not load dynamic library 'libcudnn.so.9'
DLL load failed while importing _dnn: 指定されたモジュールが見つかりません。
RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
ImportError: libcudnn.so.9: cannot open shared object file: No such file or directory

これらのエラーは、システムにインストールされたcuDNNのバージョンが、フレームワークやアプリケーションが要求するバージョンと一致しない、またはパスが正しく設定されていないことを示しています。本記事では、CUDA 12.x系とcuDNN 9.x系の正確な互換性マトリクスと、環境を正しく構築・検証するためのステップバイステップガイドを提供します。

原因の解説:なぜ互換性問題が発生するのか

CUDA (Compute Unified Device Architecture) はNVIDIA GPU向けの並列コンピューティングプラットフォームであり、cuDNN (CUDA Deep Neural Network library) はその上で深層学習の基本演算を最適化するライブラリです。これらは密接に連携して動作するため、NVIDIAによって厳密にテストされた特定のバージョンの組み合わせでのみ、安定した動作が保証されます。

主な原因は以下の3点です。

1. 公式互換性マトリクスの無視

開発者が「とりあえず最新版」をインストールしたり、チュートリアルで指定された古いバージョンを盲目的に使用したりすることで、公式にサポートされていない組み合わせが作成されてしまいます。

2. フレームワーク側の要求バージョン

PyTorchやTensorFlowの各リリースは、特定のCUDA/cuDNNバージョンに対してビルドされています。例えば、PyTorch 2.0以降の多くのバージョンはCUDA 11.8と12.1をサポートしますが、その際に要求されるcuDNNのバージョンは異なります。

3. 環境パスやシンボリックリンクの不備

正しいバージョンをインストールしても、システムの環境変数(PATH, LD_LIBRARY_PATH)やライブラリへのシンボリックリンクが正しく設定されていないと、実行時にライブラリを見つけられずエラーが発生します。

解決方法:ステップバイステップ設定ガイド

以下に、CUDA 12.xとcuDNN 9の環境を正しく構築するための具体的な手順を説明します。

ステップ1: 公式互換性マトリクスの確認

まず、NVIDIAの公式ドキュメントでCUDA 12.xとcuDNNの互換性を確認します。現時点での主要な互換性は以下の通りです。

  • CUDA 12.0: cuDNN 8.9.x 系列を推奨。cuDNN 9.xは正式サポート外の可能性が高い。
  • CUDA 12.1, 12.2, 12.3: cuDNN 8.9.x および cuDNN 9.0.0以上をサポート。
  • CUDA 12.4: 最新のcuDNN 9.x(例: 9.3.x, 9.4.x)との組み合わせが推奨。

重要なのは、cuDNN 9.0.0はCUDA 12.1以降を要求する点です。CUDA 12.0にcuDNN 9.xをインストールしようとすると失敗します。

ステップ2: CUDAツールキットのインストールとバージョン確認

既にCUDAがインストールされているか確認し、必要に応じてインストールまたはアップデートします。

# CUDAバージョンの確認
nvcc --version
# または
nvidia-smi  # 右上に表示されるCUDA Versionはドライバがサポートする最大バージョンです。インストール済みバージョンとは異なる場合があります。

# CUDA 12.3をインストールする例(Ubuntu)
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.3.2/local_installers/cuda-repo-ubuntu2204-12-3-local_12.3.2-545.23.08-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-3-local_12.3.2-545.23.08-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-3

ステップ3: 互換性のあるcuDNNバージョンのインストール

NVIDIA Developerサイトからアカウント登録(無料)後、互換性のあるcuDNNパッケージをダウンロードします。例えば、CUDA 12.3用のcuDNN 9.3.0をインストールする手順は以下の通りです。

# 1. 公式サイトから「Local Installer for Linux (Tar)」をダウンロード(例: cudnn-linux-x86_64-9.3.0.55_cuda12-archive.tar.xz)
# 2. ダウンロードしたアーカイブを展開し、ファイルを適切なディレクトリにコピー

tar -xvf cudnn-linux-x86_64-9.3.0.55_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.3/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.3/lib64/
sudo chmod a+r /usr/local/cuda-12.3/include/cudnn*.h /usr/local/cuda-12.3/lib64/libcudnn*

ステップ4: 環境変数とシンボリックリンクの設定

インストールしたライブラリをシステムが認識できるようにパスを通します。

# ~/.bashrc または ~/.zshrc に以下を追記
export PATH=/usr/local/cuda-12.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-12.3

# 変更を反映
source ~/.bashrc

# シンボリックリンクの作成(バージョン番号を固定せずに参照できるように)
sudo ln -sf /usr/local/cuda-12.3/lib64/libcudnn.so.9.3.0 /usr/local/cuda-12.3/lib64/libcudnn.so.9
sudo ln -sf /usr/local/cuda-12.3/lib64/libcudnn.so.9 /usr/local/cuda-12.3/lib64/libcudnn.so
sudo ldconfig  # キャッシュの更新

ステップ5: インストールの検証

CUDAとcuDNNが正しくインストールされ、互換性があるかを確認します。

# CUDAの確認(再確認)
nvcc --version
# 出力例: nvcc: NVIDIA (R) Cuda compiler driver ... release 12.3, V12.3.107

# cuDNNのバージョン確認
cat /usr/local/cuda-12.3/include/cudnn_version.h | grep -E "CUDNN_MAJOR|CUDNN_MINOR|CUDNN_PATCHLEVEL"
# 出力例:
# #define CUDNN_MAJOR 9
# #define CUDNN_MINOR 3
# #define CUDNN_PATCHLEVEL 0

# または、Pythonから確認(PyTorchがインストールされている場合)
python3 -c "import torch; print(f'PyTorch CUDA available: {torch.cuda.is_available()}'); print(f'CUDA version: {torch.version.cuda}'); import tensorflow as tf; print(f'TF CUDA available: {tf.config.list_physical_devices("GPU")}')"

コード例・コマンド例:トラブルシューティング実践

エラーが発生した場合の具体的な調査コマンドです。

# エラー「libcudnn.so.9: cannot open shared object file」が発生した場合
# 1. ファイルが実際に存在するか確認
find /usr/local -name "libcudnn.so.9*" 2>/dev/null
ls -la /usr/local/cuda-12.3/lib64/libcudnn*

# 2. 環境変数LD_LIBRARY_PATHが正しく設定されているか確認
echo $LD_LIBRARY_PATH

# 3. シンボリックリンクが切れていないか確認
ls -la /usr/local/cuda-12.3/lib64/ | grep cudnn

# 4. lddコマンドで依存関係を確認(サンプルプログラムで)
cat > test_cudnn.c << 'EOF'
#include <stdio.h>
#include <cudnn.h>
int main() { printf("cuDNN Version: %dn", CUDNN_VERSION); return 0; }
EOF
nvcc test_cudnn.c -o test_cudnn -lcudnn
ldd ./test_cudnn | grep cudnn  # どのlibcudnn.soがリンクされるか確認

まとめ・補足情報

CUDA 12.xとcuDNN 9の環境構築では、「CUDA 12.1以降であればcuDNN 9.xが利用可能」という点が最も重要な互換性ルールです。CUDA 12.0を使用している場合は、cuDNN 8.9.x系列にダウングレードするか、CUDA自体を12.1以上にアップグレードする必要があります。

また、深層学習フレームワークをインストールする際は、PyTorchの公式インストールページやTensorFlowのビルド設定表で、推奨されるCUDA/cuDNNの組み合わせを必ず確認してください。多くの場合、condapipでフレームワークをインストールすると、互換性のあるCUDA/cuDNNライブラリが自動的に一緒にインストールされるため、環境の分離と管理が容易になります。

最後に、複数のCUDAバージョンを並行して管理したい場合は、/usr/local/cuda シンボリックリンクを切り替える方法や、update-alternativesコマンドを利用する方法があります。環境構築は一見面倒ですが、正しい互換性マトリクスに基づいて一度設定すれば、その後のAI開発作業を大幅に効率化できるでしょう。

⚡ GPU環境をすぐに使いたいなら

ハードウェアの購入・セットアップなしで、すぐにGPU環境を使えるクラウドサービスがおすすめです。

  • RunPod — RTX 4090/A100/H100を即座に利用可能
  • Vast.ai — 最安のGPUクラウド、オークション方式で低コスト
  • RTX 5090をAmazonで見る — 自宅GPU環境を構築するなら
この記事は役に立ちましたか?