最近遇到一些 cuda 的版本问题,特来记录一下。
分清几个概念
| 名称 | 版本号举例 | 查看版本方式 | 作用 |
|---|---|---|---|
| NVIDIA 驱动 | 535.104.05 | modinfo nvidia | grep version | 用于控制 GPU 硬件、提供 CUDA 支持 |
| CUDA 运行时(runtime) | 12.2 11.8 | torch.version.cuda | 指程序运行所依赖的 .so 库,用于运行 PyTorch/CuPy |
| CUDA 工具箱(Toolkit) | 12.2 11.8 | nvcc --version | 包括 nvcc 编译器、头文件、运行时、开发工具等,用于编译 |
而一般单说 CUDA 版本时,指的是 Toolkit 的版本。
驱动与向后兼容
另外,输入命令 nvidia-smi 得到 CUDA version 实际上对应的是当前驱动所支持的最高 CUDA 版本,例如
Fri Jul 11 11:07:18 2025
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.216.01 Driver Version: 535.216.01 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA A40 On | 00000000:D8:00.0 Off | 0 |
| 0% 23C P8 28W / 300W | 0MiB / 46068MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+说明该驱动最高支持 12.2 版本的 CUDA,由于驱动是向后兼容的,因此只要驱动足够新就可以兼容旧版本的 CUDA。例如上述驱动可以兼容基于 CUDA 11.8 的 PyTorch。
不同版本
如果系统中有不同版本的 CUDA Toolkit,则可以用命令 ls -ld /usr/local/cuda* 列出所有可用版本。通过
export PATH=$PATH:/usr/local/cuda-11.8/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64来设置相应的版本(如上为 11.8)。
PyTorch 和 CUDA
pip install torch 的命令总是下载最新构建的 wheel,而这有时并不符合我们的需要。所以有时需要下载特定版本的 PyTorch,例如 https://download.pytorch.org/whl/cu118/torch-2.6.0+cu118-cp310-cp310-linux_x86_64.whl 这个路径下的 wheel,根据 Python Packaging User Guide 上的 二进制发行版 命名格式 {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl 可知,它是基于 CUDA 11.8(cu118)和 CPython 3.10(cp310)构建的,因此其需要 CUDA 运行时版本为 11.8。
而通过 pip 下载的 wheel 也自带了相应版本的 CUDA 运行时,但有时 python 包路径下的 CUDA 运行时和系统路径下的 CUDA Toolkit 所包含的运行时版本可能冲突,因此最好用前面的方法指定对应版本的环境变量。