問題の概要:CUDA 12.xとcuDNN 9の互換性エラー
深層学習フレームワーク(TensorFlow, PyTorch等)のインストールや実行時に、以下のようなエラーメッセージが表示され、環境構築が失敗するケースが頻発しています。
Could not load dynamic library 'libcudnn.so.9'; dlerror: libcudnn.so.9: cannot open shared object file: No such file or directory
CUDA driver version is insufficient for CUDA runtime version
ImportError: libcudnn.so.9: cannot open shared object file: No such file or directory
これらのエラーは、CUDA ToolkitのバージョンとcuDNNのバージョン、さらにはNVIDIAドライバのバージョン間に互換性がないことが主な原因です。特に、CUDA 12.x(12.0, 12.1, 12.2, 12.3, 12.4)とcuDNN 9.x(9.0.0以降)の組み合わせは、公式の互換性マトリクスを理解せずにインストールすると、高い確率で問題が発生します。本記事では、この互換性を詳細に解説し、確実に動作する環境構築手順を提供します。
原因の解説:なぜ互換性問題が起こるのか
CUDA, cuDNN, NVIDIAドライバは密接に連携して動作するソフトウェアスタックを形成しています。これらは下位互換性が限定的であり、特定の組み合わせでしか正しく機能しません。
1. ドライバとCUDA Toolkitの互換性
CUDA Toolkitは、対応する最小のNVIDIAドライババージョンを要求します。例えば、CUDA 12.4はドライババージョン 550.54.14以上を必要とします。古いドライバでは、新しいCUDAランタイムの機能を利用できません。
2. CUDA ToolkitとcuDNNの互換性
cuDNNはCUDA Toolkitの上に構築されたライブラリです。cuDNNの各メジャーバージョン(例:cuDNN 8.x, 9.x)は、特定のCUDA Toolkitバージョンに対してビルドされています。cuDNN 9.xはCUDA 12.x向けに設計されており、CUDA 11.xとは互換性がありません。
3. フレームワークとの依存関係
TensorFlowやPyTorchなどのフレームワークは、リリース時に特定のCUDA/cuDNNバージョンに対してビルドされています。例えば、`tensorflow==2.15.0` は公式にCUDA 12.2とcuDNN 8.9をサポートしていますが、cuDNN 9.xを使用するにはソースからのビルドが必要になる場合があります。
ユーザーは、これらの依存関係の鎖(ドライバ ← CUDA ← cuDNN ← フレームワーク)のいずれかが断たれると、冒頭のようなエラーに遭遇するのです。
解決方法:ステップバイステップ環境構築ガイド
以下に、CUDA 12.xとcuDNN 9.xを正しく組み合わせてインストールする手順を示します。
ステップ1: 現在の環境を確認する
既存のCUDAやドライバの状態を確認します。
# NVIDIAドライババージョンの確認
nvidia-smi
# CUDAコンパイラのバージョン確認(CUDA Toolkitがインストールされている場合)
nvcc --version
`nvidia-smi`の出力右上に表示されるCUDA Versionは、ドライバがサポートする**最大**のCUDAランタイムバージョンです。インストールされているCUDA Toolkitのバージョンとは異なる場合があるので注意が必要です。
ステップ2: 互換性マトリクスに基づいてバージョンを選択する
以下の公式互換性マトリクスを参照し、組み合わせを決定します。
| CUDA Toolkit バージョン | 推奨されるcuDNN バージョン | 必要な最低ドライババージョン |
|---|---|---|
| CUDA 12.4 | cuDNN 9.2.x, 9.3.x | 550.54.14 |
| CUDA 12.3 | cuDNN 9.1.x, 9.2.x | 545.23.08 |
| CUDA 12.2 | cuDNN 8.9.x, 9.0.x | 537.13 |
| CUDA 12.1 | cuDNN 8.9.x | 530.30.02 |
| CUDA 12.0 | cuDNN 8.8.x, 8.9.x | 525.60.13 |
重要: フレームワークの公式ドキュメントで推奨される組み合わせを最優先してください。例えば、PyTorch 2.3以降ではCUDA 12.1とcuDNN 8.9.xが推奨されることが一般的です。
ステップ3: NVIDIAドライバをアップデートする
互換性マトリクスに基づき、必要ならドライバをアップデートします。公式サイトから.runファイルをダウンロードしてインストールするか、OSのパッケージマネージャーを使用します。
# Ubuntuの場合の例(ネットワークリポジトリ経由)
sudo apt update
sudo apt install nvidia-driver-550 # 必要バージョンに応じて数字を変更
# インストール後は再起動
sudo reboot
ステップ4: CUDA Toolkit 12.xをインストールする
フレームワークが特定のマイナーバージョンを要求しない限り、最新の安定版(例:12.4)をインストールするのが安全です。ネットワークインストーラを使用すると依存関係が自動で解決されます。
# Ubuntu 22.04の場合の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.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-4-local_12.4.0-550.54.14_1.0-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
ステップ5: cuDNN 9.xをインストールする
NVIDIA Developerアカウントが必要です。ダウンロードページから、選択したCUDAバージョンに対応するcuDNNバージョンを選択します。
# 例: CUDA 12.4用のcuDNN 9.3.0 (Local Installer for Linux x86_64 (Tar))をダウンロードしインストール
# ファイル名は cudnn-linux-x86_64-9.3.0.98_cuda12-archive.tar.xz のようになります
# 1. ダウンロードしたアーカイブを展開
tar -xvf cudnn-linux-x86_64-9.3.0.98_cuda12-archive.tar.xz
# 2. ファイルをCUDA Toolkitディレクトリにコピー
sudo cp cudnn-linux-x86_64-9.3.0.98_cuda12-archive/include/cudnn*.h /usr/local/cuda-12.4/include/
sudo cp -P cudnn-linux-x86_64-9.3.0.98_cuda12-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*
# 3. シンボリックリンクを更新(既存の古いリンクを削除してから)
sudo ldconfig
ステップ6: インストールの確認
すべてのコンポーネントが正しく認識されているか確認します。
# CUDAバージョン確認
nvcc --version
# cuDNNバージョン確認
cat /usr/local/cuda-12.4/include/cudnn_version.h | grep -E "CUDNN_MAJOR|CUDNN_MINOR|CUDNN_PATCHLEVEL"
# または
cat /usr/local/cuda/include/cudnn_version.h | grep -E "CUDNN_MAJOR|CUDNN_MINOR|CUDNN_PATCHLEVEL"
コード例・コマンド例:トラブルシューティング
エラー1: 「libcudnn.so.9」が見つからない
このエラーは、cuDNNライブラリのパスがシステムに認識されていないことが原因です。
# 解決策1: LD_LIBRARY_PATHを確認・設定
echo $LD_LIBRARY_PATH
# /usr/local/cuda-12.4/lib64 が含まれていない場合
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH
# 恒久化するには ~/.bashrc に追加
# 解決策2: シンボリックリンクを確認
ls -la /usr/local/cuda-12.4/lib64/libcudnn.so*
# libcudnn.so.9 へのシンボリックリンクが存在するか確認
# 存在しない場合、手動でリンクを作成(バージョン番号は実際のものに置き換え)
sudo ln -sf /usr/local/cuda-12.4/lib64/libcudnn.so.9.3.0 /usr/local/cuda-12.4/lib64/libcudnn.so.9
sudo ldconfig
エラー2: CUDAドライババージョンが不足
ドライバが古すぎる場合のエラーです。
# nvidia-smiで現在のドライババージョンを確認
nvidia-smi
# 必要な最小バージョンと比較し、アップデート手順を実行
まとめ・補足情報
CUDA 12.xとcuDNN 9.xの環境構築では、以下の3点を徹底することが成功のカギです。
- 公式互換性マトリクスの確認: NVIDIAの公式ドキュメントと、使用する深層学習フレームワークのインストールガイドを必ず参照してください。
- バージョンの固定: 特にプロダクション環境では、`conda`や`Docker`を使用してCUDA、cuDNN、フレームワークのバージョンを明確に固定することを強く推奨します。例えば、PyTorchのcondaインストールコマンドは適切なCUDAバージョンを自動で解決してくれます。
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia - パスとリンクの管理: 複数のCUDAバージョンを並行して管理する場合は、`update-alternatives`などのツールを使用するか、環境変数(`PATH`, `LD_LIBRARY_PATH`, `CUDA_HOME`)をシェルスクリプトで動的に切り替える仕組みを導入すると便利です。
環境構築は地味ですが、AI開発の土台となる重要な作業です。本ガイドが、互換性エラーに悩む開発者の一助となれば幸いです。問題が解決しない場合は、エラーメッセージ全体と環境情報(OS, ドライババージョン, インストールコマンド履歴など)をメモし、関連するフォーラムやコミュニティで質問すると良いでしょう。