玛卡巴卡的blog 玛卡巴卡的blog
首页
提问箱
自传
植物分类
关于

玛卡巴卡

短暂的休息,是为了更好的再出发 有我爱和爱我的人,便什么都不会怕——
首页
提问箱
自传
植物分类
关于
  • 技术分享
玛卡巴卡
2026-03-19
目录

cuda版本升级

啊米诺斯!
啊米诺斯!
啊米诺斯!
究竟是谁,升级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      |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+

1
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) 
1
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
1
2

如果 which nvcc 为空,说明 PATH 没带上 cuda/bin;如果指向了一个你不想要的版本,那你重新指定你想要的版本就可以~

# 2)检查 CUDA 的软链接与目录是否存在

很多机器会用 /usr/local/cuda 作为统一入口,实际指向某个版本目录。你可以这样看:

ls -l /usr/local | grep cuda
ls -l /usr/local/cuda
1
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
1

通常你需要包含类似:

  • /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相关的模块

  1. nvidia-fabric-manager(最典型):
  • 作用: 负责多 GPU 间的 NVLink 拓扑切换。
  • 现状: .run 包里绝对没有。如果你是 A100/H100/RTX 3090/4090 多卡环境,必须去 NVIDIA 的 APT/YUM 仓库 单独下载对应版本的 .deb 或 .rpm 包安装。
  1. nvidia-container-toolkit (原 nvidia-docker2):
  • 作用: 让 Docker 容器能够识别并调用宿主机的显卡。
  • 现状: 这是一个独立的项目。虽然新驱动通常向下兼容旧的 Toolkit,但如果你升级了驱动(比如从 470 升到 550),为了获得新特性(如对新架构的支持),你必须手动更新这个工具。
  1. nvidia-peer-memory / nv_peer_mem:
  • 作用: 实现 GPUDirect RDMA(多台服务器之间显卡直接通信)。
  • 现状: 这是一个内核模块,通常需要根据当前的驱动源码重新编译安装
上次更新: 2026/04/30, 17:04:36
最近更新
01
快乐小狗狂喜!(小声版)
05-01
02
乌黑的眼睛
04-30
03
人总在接近幸福时倍感幸福
04-29
更多文章>
Theme by Vdoing | Copyright © 2026-2026 玛卡巴卡 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式