はじめに
Linux環境(Ubuntu)でNumPyやNumbaを使用している場合、numba -sコマンドを実行すると、CUDA Driver VersionとCUDA Runtime Versionの数値が異なることがあります。たとえば「CUDA Driver Version : 12.2」「CUDA Runtime Version : 12.4」のように、-driverの方がruntimeより古い数値表示される現象です。
多くのユーザーがこの不一致を“不具合”と感じますが、じつはCUDAの設計上は正常な動作である場合があります。本稿では、このバージョンマッチングの問題が本当に問題かどうか判断基準と、適切に解決する方法を解説します。
結論
CUDA driverとruntimeのバージョンが異なる場合、多くのケースでは問題ありません。新機能の追加が必要な場合のみ、driverまたはCUDA toolkitのバージョンを調整してください。
問題の概要
発生する症状
numba -s | grep CUDAでdriverとruntimeのバージョンが異なるnvcc -Vとnvidia-smiで表示されるCUDAバージョンが一致しない- PyTorchやTensorFlowの学習時にバージョンが原因のエラーが発生する
環境例
$ numba -s | grep CUDA
CUDA Device Initialized : True
CUDA Driver Version : 12.2
CUDA Runtime Version : 12.4
CUDA NVIDIA Bindings Available : False
CUDA NVIDIA Bindings In Use : False
driverとruntimeの違いを理解する
まず、以下の2つの概念を区別することが重要です:
NVIDIA Driver(CUDA Driver)
nvidia-smiやnvccが表示するバージョンです。GPUハードウェアと通信するための низкоуровневый ソフトウェアです。driverのバージョンが新しいほど、新しいGPUアーキテクチャや機能に対応できます。
CUDA Toolkit(CUDA Runtime)
nvccコマンドなどで確認できるバージョンです。コンパイラ、ライブラリ、サンプルコードを含む開発キットです。
バージョンが不一致でも問題ない理由
Stack Overflowの回答によると、「nvidia-smiが報告するCUDAバージョンがnvcc -Vで報告するバージョンと同等かそれより高い場合、これは問題ではありません」
これは後方互換性のためです。新しいdriverは古いCUDA Toolkitでビルドされたアプリケーションを実行できます。
例:driver 12.2 + runtime 12.4
- driver 12.2:2023年リリースのバージョン
- runtime 12.4:2024年リリースのバージョン
- driver 12.2でもruntime 12.4のアプリケーションは動作する(後方互換性)
本当に問題がある場合の見分け方
以下の症状がある場合、バージョンマッチの問題可能性があります:
- GPU計算が正しく実行されない
- 「CUDA error」や「driver is too old」などのエラーメッセージ
- 特定のCUDA機能(新しいアーキテクチャなど)が利用できない
具体的な解決手順
Step 1:現在のバージョンを確認する
# driverバージョン確認
nvidia-smi
# CUDA Toolkitバージョン確認
nvcc -V
# Numbaの場合
numba -s | grep CUDA
Step 2:問題の有無を判断する
以下の条件を満たす場合は、基本的で問題ありません:
- nvidia-smiのCUDAバージョン ≥ nvcc -VのCUDAバージョン
- アプリケーションが正常に動作している
Step 3:バージョンを統一したい場合の対応
方法A:UbuntuでCUDA Toolkitを削除して再インストール
# 現在のCUDA Toolkitを削除
sudo apt remove nvidia-cuda-toolkit
sudo apt autoremove
# 適切なバージョンをインストール(例:12.2)
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-12-2
方法B:NVIDIA Driverを再インストール
# PPAからインストール(Ubuntuの場合)
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-525 # 適切なバージョンを選択
方法C:conda環境を使用する場合
# 環境を作成時にバージョンを指定
conda create -n myenv pytorch torchvision pytorch-cuda=11.8 -c pytorch -c nvidia
conda activate myenv
補足・注意点
バージョン互換性の公式資料
NVIDIA公式のCUDA Compatibilityドキュメントでは、CUDAアプリケーションが異なるdriverバージョンで動作する方法が詳しく説明されています。
Windows環境での注意点
Windows Server 2022では、PyTorchなどのフレームワークを使用する際、driverとtoolkitの互換性がより厳格になる場合があります。Windows環境ではdriverの再インストールを検討してください。
よく落ちる落とし穴
- 複数バージョンの共存:異なるCUDAバージョンを複数インストールするとPATHが混乱する
- PATH環境変数:nvccが見つからない場合は
/usr/local/cuda/binがPATHに含まれるか確認 - コンテナ環境:Dockerを使用する場合、hostのdriverとcontainer内のtoolkitの組み合わせが重要
推奨されるバージョン組み合わせ
| Driver Version | CUDA Toolkit |
|---|---|
| 525.xx | 12.0 |
| 535.xx | 12.2 |
| 550.xx | 12.4 |
まとめ
CUDA driverとruntimeのバージョンが異なる現象は、多くの場合,正常な動作です。NVIDIA driverは後方互換性があるため、新しいdriverで古いCUDA Toolkitのアプリケーションを実行できます。アプリケーションが正常に動作している場合は、特に気にする必要はありません。
もしGPU計算エラーが発生する場合は、本記事の手順を参考にバージョンを確認し、必要に応じてdriverまたはCUDA Toolkitを適切なバージョンに更新してください。
参考元
- 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