先说个真实体验:我最初在 WSL2 Ubuntu 22.04 里配 NVIDIA 环境时,也习惯性地打开终端敲 apt install nvidia-driver-535 ,结果要么提示找不到包,要么装完在 WSL2 里 nvidia-smi 照样报 command not found。后来查了一圈才明白,WSL2 的 GPU 访问机制和双系统、虚拟机完全不一样,你以为你在“给 Linux 装驱动”,其实 WSL2 根本不需要也不应该这么干。这篇文章我会从驱动版本选择开始,把 WSL2 Ubuntu 22.04 里 NVIDIA 驱动和 CUDA 的完整安装过程、底层逻辑、以及我踩过的那些坑全部讲一遍。
这篇东西适合谁看?只要你想在 Windows 上的 WSL2 里跑 PyTorch、TensorFlow、Isaac Sim、CUDA C/C++ 程序,或者给 IDEA、VS Code 配 WSL2 开发环境,都值得先花五分钟搞懂驱动和 CUDA 到底落在哪一层。搞懂之后你会发现,真正要手动安装的其实只有 CUDA Toolkit,驱动反而是最不需要操心的一环。
1. 先想明白 WSL2 里的 GPU 到底是谁在管
很多人上来就翻车,原因是把 WSL2 当成了一台普通 Linux 虚拟机。实际上 WSL2 的 GPU 访问是特例中的特例,理解这一点,后面所有操作都不会跑偏。
1.1 WSL2 的 GPU 机制和普通虚拟机有什么区别
普通的 VMware、VirtualBox 虚拟机里,GPU 默认是虚拟显卡,想在虚拟机里用 NVIDIA GPU,得在虚拟机系统里再装一遍 NVIDIA 驱动,也就是“虚拟化层之上做 PCIE 穿透”。但 WSL2 不是走这条路的,它用的是一套叫做 GPU Paravirtualization 的机制,简单理解就是 Windows 上的 NVIDIA 驱动统一管理显卡,然后通过 /usr/lib/wsl/lib/ 这个目录把 GPU 计算能力“映射”给 WSL2 内的 Linux 系统。
这意味着你在 WSL2 里执行 nvidia-smi 时,实际上调用的是 Windows 侧驱动的动态库,而不是 Linux 侧自己装的驱动模块。所以三个关键结论:
- WSL2 内不需要安装 Linux 版 NVIDIA 驱动;
- Windows 侧驱动更新后,WSL2 里的
nvidia-smi显示版本会跟着变; - 你在网上搜到的“Ubuntu 22.04 安装 nvidia 显卡驱动”教程,大多针对双系统或纯 Linux 环境,照搬到 WSL2 里是错的。
1.2 驱动、CUDA Driver、CUDA Toolkit 三者别搞混
我见过最典型的误解是把 CUDA 当成一个“安装包”,装完以为万事大吉。实际上 CUDA 体系是分层的,搞清楚这三层的关系,很多报错你会自己判断:
- NVIDIA Driver(显卡驱动):最底层,负责管理硬件,包含一组 CUDA Driver;
- CUDA Driver:驱动里自带的用户态运行时,
nvidia-smi里的 CUDA Version 指的就是它支持的 CUDA API 最高版本; - CUDA Toolkit:开发工具包,包含
nvcc编译器、CUDA 数学库(cuBLAS、cuFFT)、头文件、以及 sample 源码,这才是我们需要在 Linux 里手动装的东西。
用生活类比就是:显卡驱动是“操作系统”,CUDA Driver 是“系统 API”,CUDA Toolkit 是“软件开发 SDK”。你在 WSL2 里做开发,需要的是 SDK,而不是重新装操作系统。所以后面我们的任务很简单:确认 Windows 驱动足够新,然后在 Ubuntu 22.04 里正确安装 CUDA Toolkit。
2. 动手前先把驱动和 CUDA 版本定下来
版本选择是所有坑里最隐蔽的一个,选错了要么 nvcc 编译不通过,要么 PyTorch 检测不到 GPU,但驱动本身没任何报错,排查起来特别耗时间。我建议按下面的顺序做决策。
2.1 先检查 Windows 侧驱动版本
在 Windows 的 PowerShell 或 CMD 里执行:
nvidia-smi
看输出顶部两行:
- Driver Version:比如 550.54.15;
- CUDA Version:比如 12.4。
这个 CUDA Version 表示当前驱动支持的最高 CUDA 运行时版本。比如它显示 12.4,那你装 CUDA 12.4 或更低版本(12.1、12.0)都完全没问题;如果显示 11.7,就别强行装 CUDA 12.x 的 Toolkit,因为驱动侧不兼容。
很多人问“4060 Ti 支持哪个 CUDA 版本”,其实显卡本身没有“支持 CUDA 12 还是 11”的说法,决定权在驱动。RTX 40 系列是 Ada Lovelace 架构,计算能力 8.9,至少需要 CUDA 11.8 以上才能完全发挥,我建议直接从 CUDA 12.x 起步。如果当前驱动太旧,建议从 NVIDIA 官网下载 Game Ready 或 Studio 驱动更新到 525 以上,实测 535、550、560 系列在 WSL2 里都很稳定。
2.2 根据实际需求倒推 CUDA 版本
这个思路很关键,不要为了“用最新版”而用最新版,要让工具链决定版本:
- 跑 PyTorch:PyTorch 对 CUDA 12.1 支持非常成熟,官方安装命令直接可用,建议优先 12.1;
- 跑 TensorFlow:TensorFlow 2.15 之后对 CUDA 12.x 支持良好,12.1 或 12.3 均可;
- 跑 Isaac Sim / Omniverse:官方对 CUDA 12.1 有明确要求,需要搭配特定版本驱动;
- 自己写 CUDA C/C++ 程序:没有第三方依赖,装 CUDA 12.4 或 12.6 随便选,越新特性越多;
- 老项目维护:如果项目是在 CUDA 11.7 上做的,那就乖乖装 11.7,升级 CUDA 可能导致 cuDNN、OpenCV 等第三方库全部重编。
我自己的方案是安装 CUDA 12.1,既能满足 PyTorch 官方预编译包的依赖,也能跑大部分 Isaac Sim 需求。如果以后需要别的版本,多版本共存也没有问题,后面我会讲切换方法。
2.3 驱动和 CUDA 的兼容关系速查表
这里给一个常用对照,主流的 Windows 驱动版本和可安装 CUDA Toolkit 版本关系大致如下,注意“更高版本驱动可以向下兼容安装更低版本 Toolkit,但反之不行”:
| Windows NVIDIA 驱动 | 最大支持的 CUDA Toolkit | 适用场景 |
|---|---|---|
| 525.xx 系列 | CUDA 12.0 | WSL2 可用,偏旧 |
| 535.xx 系列 | CUDA 12.2 | 比较稳定,跑 12.1 没问题 |
| 545.xx 系列 | CUDA 12.3 | 中规中矩 |
| 550.xx 系列 | CUDA 12.4 |
3225



被折叠的 条评论
为什么被折叠?



