PyTorch 2.11 报 CUDA 驱动太旧?一行 `pip install` 解决不了,580 驱动才是真解!
摘要本机 RTX 3090 Ubuntu 22.04torch 2.11.0cu130一上来就报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.0cu130本以为性能会原地起飞结果一运行就遇到这个熟悉的警告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环境信息GPUNVIDIA GeForce RTX 3090系统Ubuntu 22.04.5 LTSPyTorch2.11.0CUDA 13.0 构建vLLM0.22.1found version 12020意味着当前驱动最高支持到 CUDA 12.2PyTorch 需要的 CUDA 13.0 完全不在能力范围内。一句话驱动太老了必须升级。二、第一反应升级 PyTorch 反而是弯路第一直觉是装错了 PyTorch 版本。想着既然驱动只支持到 12.2那就回退到cu121python-mpip uninstall-ytorch torchvision torchaudio python-mpipinstalltorch 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.2535系列最高只支持 CUDA 12.2PyTorch 2.11cu130 需要 CUDA 13.0必须使用580系列驱动CUDA 13 引入的最低版本。查看可用的 580 驱动apt-cachepolicy nvidia-driver-580仓库里有nvidia-driver-580: 候选 580.159.03-0ubuntu0.22.04.1版本合适可以装。四、第一道坎apt 依赖冲突直接安装会失败sudoaptinstallnvidia-driver-580报错显示libnvidia-cfg1-535、libnvidia-gl-535、nvidia-driver-535等包互相冲突原因是旧的535用户态库还留在系统里。解决方法先卸载 535 整套。sudoaptremove--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 列表里。直接全部解锁sudoapt-mark unhold$(dpkg --get-selections|awk$2hold {print $1})六、第三道坎libnvidia-egl-wayland1装不进去再次安装nvidia-driver-580提示libnvidia-gl-580 : 依赖: libnvidia-egl-wayland1 但是它将不会被安装模拟一下aptinstall-slibnvidia-egl-wayland1模拟成功但实际失败。说明有别的包在 hold 这个 Wayland EGL 桥。再次定向解锁sudoapt-mark unhold libnvidia-egl-wayland1然后sudoaptinstall-ylibnvidia-egl-wayland1sudoaptinstall-ynvidia-driver-580sudoreboot注意Wayland EGL 桥不依赖你是否用 Wayland 桌面是 GL 渲染时需要用到的运行时库所以即便纯服务器环境也得装。七、收尾验证nvidia-sminvcc--versionpython-cimport torch; print(torch.cuda.is_available())至此PyTorch 2.11cu130 终于能正确识别 GPUvLLM 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_LIST8.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本文为原创内容版权归作者所有转载需注明出处。