【NVIDIA】nvccとnvidia-smiでCUDAバージョンが異なる問題の解決法

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ドキュメントでは、異なるバージョンの組み合わせでもアプリケーションが動作する仕組みについて詳しく説明されています。

参考元

おすすめ環境

💡 この問題を根本的に解決するには

ローカル環境でGPUトラブルが頻発する場合、クラウドGPUサービスの利用も検討してみてください。環境構築の手間なく、すぐにAI開発を始められます。

  • RunPod — RTX 4090が$0.44/h〜、ワンクリックでJupyter環境が起動
  • Vast.ai — コミュニティGPUマーケットプレイス、最安値でGPUレンタル
この記事は役に立ちましたか?