cuda版本升级
以上的话,致我们热爱的cuda——🥹🥹🥹
好的今天来写一点关于cuda升级的事情,感觉之后做测试肯定是要和cuda打交道,所以还是得搞明白这玩意对吧;好的,首先让我们感谢来自知乎的参考文献 (opens new window)
# 查看我的CUDA版本
我们首先要知道,一般说要跑起来cuda程序需要两个东西,一个是cuda toolkit,一个是cuda driver;
- cuda driver是nvidia提供的驱动,用于管理显卡,驱动程序是直接与 NVIDIA 显卡硬件打交道的;
- 包含内核驱动和用户驱动
- 驱动的版本决定最高能支持哪个版本的cuda toolkit,一般来说,cuda driver都是向下兼容的,即高级的driver可以搭配低级的toolkit,但是低级的driver一般无法运行高级的toolkit
- 如果你只想运行别人写好的程序比如大型游戏,那么只装cuda driver即可
- cuda toolkit是一套开发工具;
- 包括编译器
nvcc,运行时库cudart,cuBLAS或cuDNN等专业的库 - 同一台机器上可以安装多个版本的 Toolkit(如 11.8 和 12.1),通过修改 PATH 环境变量来切换。
- 如果你想编译或者运行vllm这种会调用底层算子的AI框架,那么就需要cuda toolkit
- 包括编译器
那么我们如何查看cuda版本呢?
聪明的你一定想到了使用nvidia-smi,会跳出来一个诸如这样的东西:
Wed Mar 25 15:24:12 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.163.01 Driver Version: 550.163.01 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| 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 RTX A6000 Off | 00000000:2A:00.0 Off | Off |
| 0% 32C P8 25W / 300W | 493MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA RTX A6000 Off | 00000000:3D:00.0 Off | Off |
| 0% 32C P8 21W / 300W | 14MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 NVIDIA RTX A6000 Off | 00000000:AB:00.0 Off | Off |
| 0% 33C P8 20W / 300W | 14MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 3 NVIDIA RTX A6000 Off | 00000000:BD:00.0 Off | Off |
| 0% 33C P8 30W / 300W | 14MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
然后我们就会发现有一个CUDA Version和一个Driver Version,需要注意
- nvidia-smi 显示的版本: 这是 Driver 支持的最高 CUDA 版本,并不是当前的cuda driver版本,比如这里显示cuda driver是12.6表示当前的GPU只能支持到12.6,再高就无法运行了,但是当前的cuda driver可以是12.4甚至更低;
- nvcc -V 显示的版本: 这是当前环境实际安装的 Toolkit 版本
- 一般来说,Toolkit (Runtime) 版本 ≤ Driver 支持的版本
那么好奇的你肯定又要问了(话密了奥!),怎么看到真实的cuda 驱动版本呢? 使用这个就可以了
root@43aeef799f41:/workspace# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 550.163.01 Tue Apr 8 12:41:17 UTC 2025
GCC version: gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~22.04.2)
2
3
4
这里面显示的550.163.01就可以唯一地对应到一个cuda版本,这里应该是对应到了12.6!刚好达到了支持的上限~
如果朋友,你在执行nvidia-smi或者nvcc -V的时候也报错了,别慌,咱们按顺序排查:
nvidia-smi报错:大概率是 GPU 驱动/容器 GPU 透传 有问题(它跟 Toolkit 没啥关系)。nvcc -V报错:大概率是 CUDA Toolkit 没装好,或者 PATH 没配对。
# 1)先看 PATH 里有没有你想用的 CUDA
先执行 echo $PATH,看看里面有没有类似 /usr/local/cuda/bin 或者某个版本路径(比如 /usr/local/cuda-12.4/bin)。
如果 CUDA 正常安装并配置过,一般能看到 .../cuda/bin 出现在 PATH 里。

顺手再确认一下 nvcc 到底指向哪:
which nvcc
nvcc -V
2
如果 which nvcc 为空,说明 PATH 没带上 cuda/bin;如果指向了一个你不想要的版本,那你重新指定你想要的版本就可以~
# 2)检查 CUDA 的软链接与目录是否存在
很多机器会用 /usr/local/cuda 作为统一入口,实际指向某个版本目录。你可以这样看:
ls -l /usr/local | grep cuda
ls -l /usr/local/cuda
2
常见情况:
- 只有
/usr/local/cuda-xx.y,但没有/usr/local/cuda:那就需要你自己选一个版本做软链接,或在 PATH 里直接写版本目录。 /usr/local/cuda指向了旧版本:升级后忘了改链接/环境变量,就会出现 “我明明装了新版本但 nvcc 还是旧的”。
# 3)别忘了动态库路径(跑程序时报错尤其常见)
有时候 nvcc -V 没问题,但一运行就报 libcudart.so / libcudnn.so 找不到,那多半是 LD_LIBRARY_PATH 没配:
echo $LD_LIBRARY_PATH
通常你需要包含类似:
/usr/local/cuda/lib64- (如果你有 cuDNN / TensorRT 等)对应的
lib目录
# 直接快进到升级cuda driver和cuda toolkit
(注意下文中我们就直接把cuda toolkit叫做cuda了,现实中我们也这样称呼) 采用知乎老哥的话:
升级 = 安装 + 用通过修改PATH路径来默认使用新版本的CUDA + 卸载旧版本
多版本CUDA = 安装 + 用通过修改PATH路径来修改使用的CUDA版本 + 不卸载旧版本
一般而言,在 Linux 下安装和使用 CUDA 的流程如下:
- 安装 NVIDIA Driver,即显卡驱动
- 安装 CUDA Toolkit
- 使用 C/C++ 编译器或 Python 扩展库进行 GPU 加速的 CUDA 编程
# cuda 安装
cuda的安装很简单,你直接去:nvidia官网 (opens new window)找到对应的版本,然后选取对应的平台,belike下面:

然后选择run的那个安装方式!用它的wget命令也可以,或者你直接复制那个网址到浏览器也可以直接网页下载,这玩意应该还蛮大的(杰哥语气);完事了你就放到你的裸机上,然后sudo sh这个run文件,按照命令下载即可;注意不要勾选driver,因为安装驱动可能会因为权限不足或内核文件被占用而失败,导致系统重启后黑屏或循环登录()而且分开装也方便debug;除非你是一个裸机,不然一般不要勾选driver;最后记得添加环境变量PATH
# cuda driver
(再次摘抄知乎老哥的文章)
一般来说,三种情况需要安装显卡驱动:
- 显卡驱动过低(nvidia-smi的cuda小于需要安装的cuda版本),需要重装
- 新机没驱动,需要安装
- 用着用着报错cuda与驱动不匹配,多半是显卡驱动自动升级了
第一种和第三种就是先卸载当前驱动,而且卸干净,然后安装;第二种就直接在安装toolkit的时候把和cuda相关的都装上(包括哪些cuda *的安装包也都勾选上) 如果你只安装驱动,就是博主遇到的情况,建议去nvidia的cuda-driver官网 (opens new window)查找对应的driver;一般我们都是推荐这样cuda和driver分开安装的
这里还有一个说要卸载所有cuda 驱动的帖子 (opens new window)
# 卸载之前的cuda驱动
仓促地找到了一篇之前的文章[https://comate.baidu.com/zh/page/vq5nrmux9gm] 这些组件通常与驱动版本深度绑定,但 .run 包往往不包含它们:
# 一些其他的nvidia相关的模块
- nvidia-fabric-manager(最典型):
- 作用: 负责多 GPU 间的 NVLink 拓扑切换。
- 现状: .run 包里绝对没有。如果你是 A100/H100/RTX 3090/4090 多卡环境,必须去 NVIDIA 的 APT/YUM 仓库 单独下载对应版本的 .deb 或 .rpm 包安装。
- nvidia-container-toolkit (原 nvidia-docker2):
- 作用: 让 Docker 容器能够识别并调用宿主机的显卡。
- 现状: 这是一个独立的项目。虽然新驱动通常向下兼容旧的 Toolkit,但如果你升级了驱动(比如从 470 升到 550),为了获得新特性(如对新架构的支持),你必须手动更新这个工具。
- nvidia-peer-memory / nv_peer_mem:
- 作用: 实现 GPUDirect RDMA(多台服务器之间显卡直接通信)。
- 现状: 这是一个内核模块,通常需要根据当前的驱动源码重新编译安装