PyTorch 2.11 报 CUDA 驱动太旧?一行 `pip install` 解决不了,580 驱动才是真解!
摘要
本机 RTX 3090 + Ubuntu 22.04,torch 2.11.0+cu130 一上来就报 The NVIDIA driver on your system is too old (found version 12020),本以为是 PyTorch 安装错了,没想到真正的元凶是 NVIDIA 驱动版本。本文完整记录了从 535 升级到 580.159.03 的全过程,包括 libnvidia-* 依赖冲突、dpkg held package 拦截以及 Wayland EGL 缺失的坑,最终让 torch.cuda.is_available() 顺利返回 True,并附上对 vLLM 0.22.1 用户的后续建议。
一、问题背景
最近升级了 PyTorch 到 2.11.0+cu130,本以为性能会原地起飞,结果一运行就遇到这个熟悉的警告:
UserWarning: CUDA initialization: The NVIDIA driver on your system is too old
(found version 12020). Please update your GPU driver ...
torch.cuda.is_available()
False
环境信息:
- GPU:NVIDIA GeForce RTX 3090
- 系统:Ubuntu 22.04.5 LTS
- PyTorch:2.11.0(CUDA 13.0 构建)
- vLLM:0.22.1
found version 12020 意味着当前驱动最高支持到 CUDA 12.2,PyTorch 需要的 CUDA 13.0 完全不在能力范围内。一句话:驱动太老了,必须升级。
二、第一反应:升级 PyTorch 反而是弯路
第一直觉是装错了 PyTorch 版本。想着既然驱动只支持到 12.2,那就回退到 cu121:
python -m pip uninstall -y torch torchvision torchaudio
python -m pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu121
但 vLLM 0.22.1 在依赖里强约束了 torch,回退版本直接 pip check 报错。为了一个旧驱动去改整个推理栈是不划算的,所以正确方向是:升级 NVIDIA 驱动。
三、查清驱动现状
nvidia-smi
输出关键信息:
Driver Version: 535.129.03
CUDA Version: 12.2
535 系列最高只支持 CUDA 12.2,PyTorch 2.11+cu130 需要 CUDA 13.0,必须使用 580+ 系列驱动(CUDA 13 引入的最低版本)。
查看可用的 580 驱动:
apt-cache policy nvidia-driver-580
仓库里有:
nvidia-driver-580:
候选: 580.159.03-0ubuntu0.22.04.1
版本合适,可以装。
四、第一道坎:apt 依赖冲突
直接安装会失败:
sudo apt install nvidia-driver-580
报错显示 libnvidia-cfg1-535、libnvidia-gl-535、nvidia-driver-535 等包互相冲突,原因是旧的 535 用户态库还留在系统里。
解决方法:先卸载 535 整套。
sudo apt remove --purge -y \
nvidia-dkms-535 \
nvidia-driver-535 \
nvidia-compute-utils-535 \
nvidia-utils-535 \
nvidia-kernel-common-535 \
nvidia-kernel-source-535 \
'libnvidia-cfg1-535' \
'libnvidia-common-535' \
'libnvidia-compute-535' \
'libnvidia-decode-535' \
'libnvidia-encode-535' \
'libnvidia-extra-535' \
'libnvidia-fbc1-535' \
'libnvidia-gl-535' \
xserver-xorg-video-nvidia-535
注意:i386 版本的 libnvidia-*-535:i386 也要一起删,否则多架构库里残留的旧库仍然会顶住 580 的安装。
五、第二道坎:535 包被 hold
执行上面那条命令时再次失败:
下列软件包有未满足的依赖关系:
nvidia-dkms-535 : 依赖: nvidia-kernel-source-535 ...
E: 错误,pkgProblemResolver::Resolve 发生故障
这是因为系统中存在 apt-mark hold 的旧包。apt install -s 会忽略 hold,而真实的 install 不会,所以模拟和实际结果不一致是经典症状。
查看所有被 hold 的包:
apt-mark showhold
本机一长串 NVIDIA 包全在 hold 列表里。直接全部解锁:
sudo apt-mark unhold $(dpkg --get-selections | awk '$2=="hold" {print $1}')
六、第三道坎:libnvidia-egl-wayland1 装不进去
再次安装 nvidia-driver-580,提示:
libnvidia-gl-580 : 依赖: libnvidia-egl-wayland1 但是它将不会被安装
模拟一下:
apt install -s libnvidia-egl-wayland1
模拟成功,但实际失败。说明有别的包在 hold 这个 Wayland EGL 桥。再次定向解锁:
sudo apt-mark unhold libnvidia-egl-wayland1
然后:
sudo apt install -y libnvidia-egl-wayland1
sudo apt install -y nvidia-driver-580
sudo reboot
注意:Wayland EGL 桥不依赖你是否用 Wayland 桌面,是 GL 渲染时需要用到的运行时库,所以即便纯服务器环境也得装。
七、收尾验证
nvidia-smi

nvcc --version

python -c "import torch; print(torch.cuda.is_available())"

至此,PyTorch 2.11+cu130 终于能正确识别 GPU,vLLM 0.22.1 也能在 3090 上正常启动推理服务了。
八、复盘清单
- 报错先看版本号:
found version 12020不是 PyTorch 的问题,是驱动。 - 驱动优先于 PyTorch:遇到
cu12x/cu13x报错时,升级驱动几乎总是最优解,降级 PyTorch 会污染整个推理栈。 - CUDA 13 → 驱动 580+:这是 NVIDIA 官方为 CUDA 13 发布的最低分支,别再用 535、545、550。
apt-mark hold是隐藏 Boss:残留的 hold 会让模拟与实际结果不一致,apt-mark showhold永远是排查第一步。i386多架构库别忘删:交叉架构库是依赖冲突的常见源头。- 完整
reboot不可省:仅重启终端不会加载新内核模块,驱动升级必须全机重启。
九、给 vLLM 用户的额外建议
- 升级完驱动后建议跑一次
python -m pip check,确认 vLLM 0.22.1 的依赖树仍然一致。 - 3090 显存 24GB,跑 7B/13B 量化模型没问题,跑 70B 走 CPU offload 比较勉强。
- 如果升级到 PyTorch 2.11 后出现
triton编译错误,先pip install -U triton,再考虑TORCH_CUDA_ARCH_LIST="8.6" python -m vllm.entrypoints.openai.api_server ...这种方式强制编译到 3090 的 SM 8.6。
十、结语
驱动问题看起来是“环境层面”的小事,但实际处理起来经常被一堆 hold 列表和 i386 残留搞得焦头烂额。希望这篇记录能帮你少走几个坑。如果你在升级过程中遇到别的卡点,欢迎在评论区贴出 apt-mark showhold、nvidia-smi 以及 pip show torch 的输出,咱们一起拆招。
祝你的 RTX 3090 在 PyTorch 2.11 + vLLM 0.22.1 上跑出漂亮的 tokens/s!
标签
#PyTorch #NVIDIA驱动 #vLLM
本文为原创内容,版权归作者所有,转载需注明出处。
更多推荐




所有评论(0)