nvccとnvidia-smiのCUDAバージョンが違う?その原因と対処法を徹底解説
冒頭:どんな問題が発生するか
Ubuntu環境でNVIDIA CUDAを使用していると、以下のような状況に遭遇することがあります。
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Cuda compilation tools, release 11.5, 11.5.100
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.154.05 Driver Version: 535.154.05 CUDA Version: 12.2 |
+-----------------------------------------------------------------------------+
nvccはCUDA 11.5と表示されるのに、nvidia-smiではCUDA 12.2と表示されます。「バージョンが合わない,この不是エラーなのか?」と不安になる方も多いのではないでしょうか。
実はこのバージョンの不一致は、多くの場合問題ありません。ただし、 ситуацияによっては予期しない動作を引き起こすこともあるため、本稿で詳しく解説します。
結論:問題の概要と解決策
nvcc(CUDA Toolkit)とnvidia-smi(GPU Driver)が表示するCUDAバージョンが異なる理由は、それぞれが指的しているバージョンの意味が異なるためです。
- nvidia-smi:GPU DriverがサポートするCUDA Runtimeのバージョン
- nvcc:インストールされているCUDA Toolkit(コンパイラ)のバージョン
nvccのバージョンがnvidia-smiのCUDAバージョン以下であれば、特に問題ありません。新しいDriverは古いCUDA Toolkitの下位互換性を提供しているからです。
もしnvccのバージョンの方が高い場合は、Driverのアップグレードが必要です。
具体的な手順:バージョンの確認と問題の解決
ステップ1:現在インストールされているバージョンを確認する
# GPU DriverがサポートするCUDAバージョンを確認
nvidia-smi
# CUDA Toolkitのバージョンを確認
nvcc -V
# より詳細な情報を確認する場合
cat /usr/local/cuda/version.txt
ステップ2:バージョンの組み合わせが適切か確認する
NVIDIAの公式ドキュメントによると、DriverバージョンとCUDA Toolkitの組み合わせは以下の通りです:
- CUDA 12.x → Driver 525.60.13以降
- CUDA 11.x → Driver 450.80.02以降
重要なルール:DriverのCUDAバージョンは、nvccのバージョン以上である必要があります。つまり、nvidia-smiのCUDA Version ≥ nvccのバージョンであれば OK です。
ステップ3:Driverをアップグレードする場合(必要な場合のみ)
# 現在のDriverを削除
sudo apt remove --purge '^nvidia-.*'
sudo apt autoremove
# 新しいDriverをインストール(例:535バージョン)
sudo apt install nvidia-driver-535
# 再起動
sudo reboot
# 確認
nvidia-smi
ステップ4:CUDA Toolkitをダウングレートまたはアップグレードする場合
# 現在のCUDA Toolkitを削除
sudo apt remove nvidia-cuda-toolkit
sudo apt autoremove
# 特定のバージョンをインストール(例:CUDA 11.8)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
sudo apt install cuda-toolkit-11-8
# パスを通す(.bashrcまたは.zshrcに追加)
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
ステップ5:numbaを使用している場合の設定確認
NumBaを使用している場合、以下のコマンドでCUDA状態を確認できます:
numba -s | grep CUDA
ここでDriverとRuntimeのバージョンが異なる表示されますが、前述のとおり問題なければ問題ありません。
補足・注意点:バージョン依存の問題とよくある落とし穴
1. バージョンの「意味」が異なることを理解する
nvidia-smiが表示する「CUDA Version」は、Driverが公式にサポートするCUDA Runtimeの最大バージョンです。一方、nvccは実際にインストールされているCUDA Toolkitのバージョンを示します。
2. PyTorchやTensorFlowとの組み合わせ
機械学習フレームワークは、特定のCUDAバージョンが必要な場合があります:
- PyTorch 2.0以降:CUDA 11.8または12.1を推奨
- TensorFlow 2.12以降:CUDA 11.8または12.0を推奨
フレームワークの要件に合わせて、CUDA Toolkitのバージョンを調整してください。
3. コンテナ環境(Docker)での注意
Dockerコンテナ内でCUDAを使用する場合、ホスト環境のDriverとコンテナ内のCUDA Toolkitの組み合わせも考慮が必要です。
# nvidia-dockerを使用する場合
docker run --gpus all -it nvidia/cuda:12.2-base-ubuntu22.04 nvidia-smi
4. 環境変数の設定
複数のCUDAバージョンを共存させている場合、正しいバージョンが使われるように環境変数を設定重要です:
# .bashrc に追加
export CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
5. CUDA Compatibility公式ドキュメントの活用
NVIDIA公式のCUDA Compatibilityドキュメントでは、異なるバージョンの組み合わせでもアプリケーションが動作する仕組みについて詳しく説明されています。
参考元
- Mismatch in CUDA driver and runtime versions – NVIDIA Developer Forums
- CUDA Toolkit and Nvidia Driver Version Mismatch for PyTorch Training – Reddit
- mismatched versions between nvcc 11.5 vs. nvidia-smi 12.2 – Ask Ubuntu
- CUDA Compatibility – NVIDIA
- Different CUDA versions shown by nvcc and NVIDIA-smi – Stack Overflow