这是新手在 WSL2 里最容易踩的第一个大坑。如果你在 Ubuntu 内部安装了这些 nvidia-utils,它会尝试安装 Linux 版的显卡驱动,这会和你 Windows 宿主机的驱动冲突,直接导致你的显卡在 Linux 里彻底瘫痪。
按照 WSL2 的设计,GPU 驱动由 Windows 宿主机提供,Linux 子系统无需额外安装驱动,直接共享使用。
然而,在 Ubuntu 终端中执行 nvidia-smi 时,却遇到了如下错误:
Command 'nvidia-smi' not found, but can be installed with:
apt install nvidia-utils-xxx ...
千万注意: 千万不要按照提示用 apt 安装任何 nvidia-utils 包!这会导致在 WSL 内部安装 Linux 版驱动,与 Windows 驱动冲突,最终使 GPU 无法在 WSL 中使用。
问题分析
WSL2 通过一个特殊的目录 /usr/lib/wsl/lib 将 Windows 的 GPU 驱动库和工具(包括 nvidia-smi)映射到 Linux 子系统中。但是,这个目录默认不在系统的 PATH 环境变量中,导致终端无法直接找到 nvidia-smi 命令。
检查 /usr/lib/wsl/lib 目录内容:
ls /usr/lib/wsl/lib
如果看到类似下面的输出,说明驱动文件已成功映射,只是路径未加入 PATH:
libcuda.so libnvidia-ml.so.1 nvidia-smi ...
解决方案
- 验证驱动映射是否成功
首先,通过绝对路径运行 nvidia-smi,确认 GPU 能被识别:
/usr/lib/wsl/lib/nvidia-smi
如果成功,会显示两张显卡的信息(例如 RTX 5080 和 RTX 8000),以及驱动版本(如 590.57)。
- 将路径永久加入 PATH
将 /usr/lib/wsl/lib 添加到 ~/.bashrc 中,确保每次登录终端都能自动加载:
echo 'export PATH=$PATH:/usr/lib/wsl/lib' >> ~/.bashrc
source ~/.bashrc
- 验证最终效果
现在直接执行 nvidia-smi 应该可以正常工作了:
nvidia-smi
输出示例:
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 590.57 Driver Version: 590.57 CUDA Version: 12.4 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Bus-Id | Memory-Usage | Volatile Uncorr. ECC |
| 0 NVIDIA GeForce RTX 5080 ... | ... | |
| 1 NVIDIA RTX 8000 ... | ... | |
+-----------------------------------------+----------------------+----------------------+
补充说明
- Windows 驱动版本:确保 Windows 端安装了足够新的 NVIDIA 驱动(特别是对于 RTX 50 系列,建议 570+ 版本)。可通过设备管理器或 NVIDIA 官网更新。
- WSL 内核更新:保持 WSL 内核最新,执行
wsl --update(PowerShell 管理员)。 - 为什么不直接在 Linux 安装驱动:WSL2 的 GPU 加速依赖 Windows 驱动和 WSL 的 GPU 半虚拟化技术(GPU-PV),Linux 内部不应安装任何 NVIDIA 官方驱动,否则会破坏映射关系。
如果你也遇到了类似问题,欢迎在评论区留言交流!

2994

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



