必须执行wsl --shutdown才能使cuda透传生效;其依赖windows驱动+wsl2内核+用户空间库三者协同,版本错配会导致torch.cuda.is_available()返回false、nvidia-smi找不到设备或驱动版本不足等错误。

wsl --shutdown 是每次改完配置后必须执行的操作,否则 CUDA 透传不会生效。
WSL2 的 GPU 支持不是“装了就能用”,而是依赖 Windows 主机驱动 + WSL2 内核 + 用户空间库三者协同。很多报错如 torch.cuda.is_available() 返回 False、nvidia-smi 在 WSL2 中找不到设备、或 PyTorch 报 CUDA driver version is insufficient,根源几乎都出在这三层的版本错配或漏配。
确认 Windows 主机已安装兼容的 NVIDIA 驱动
WSL2 不自己装驱动,它复用 Windows 上的 NVIDIA GPU Driver(不是 CUDA Toolkit)。必须使用支持 WSL2 GPU 加速的驱动版本:
- Windows 11:需 515.65.01 或更高(截至 2026 年 4 月,推荐
535.98或550.54) - Windows 10:需 470.94 或更高,但仅限 Build 19041+;建议直接升到 Win11
- 驱动必须从 NVIDIA 官网 下载“Game Ready”或“Studio Driver”,不能用 OEM 厂商定制版(如 Dell、Lenovo 预装驱动常禁用 WSL 支持)
验证方式:在 Windows PowerShell 中运行 nvidia-smi,看到 GPU 列表和驱动版本即表示主机层就绪。
检查 WSL2 是否启用 GPU 支持并识别设备
进入 WSL2 终端(如 Ubuntu 24.04),先确认内核已加载 NVIDIA 模块:
ls /dev | grep nvidia
应看到 nvidia0、nvidiactl、nvidia-uvm 等设备节点。若无输出,说明驱动未透传 —— 此时不要急着装 CUDA,先回 Windows 执行 wsl --shutdown,再重启 WSL2。
接着运行:
nvidia-smi -L
如果报 command not found,说明 WSL2 内没装 nvidia-cuda-toolkit(注意:这是 Linux 侧的用户态工具包,和 Windows 上的 CUDA Toolkit 无关);如果报 No devices were found,说明驱动透传失败或版本不匹配。
在 WSL2 中安装 CUDA Toolkit(Linux 版)与 PyTorch GPU 版
Ubuntu 24.04 官方源里的 nvidia-cuda-toolkit 版本较旧(如 12.2),而 PyTorch 2.4+ 推荐 CUDA 12.4。更稳妥的方式是用 NVIDIA 官方 APT 源:
- 导入密钥和源:
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/jammy/nvidia-machine-learning.key | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-ml-archive-keyring.gpg - 添加源:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/nvidia-ml-archive-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/jammy/ /" | sudo tee /etc/apt/sources.list.d/nvidia-ml.list - 安装:
sudo apt update && sudo apt install -y cuda-toolkit-12-4
然后安装 PyTorch(务必选 cu124 构建):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
验证:python3 -c "import torch; print(torch.cuda.is_available(), torch.version.cuda)" 应输出 True 12.4。
LD_LIBRARY_PATH 和 /usr/lib/wsl/lib 是绕不开的坑
WSL2 的 CUDA 库路径和原生 Linux 不同。NVIDIA 将 Windows 驱动暴露的底层接口映射到 /usr/lib/wsl/lib,但 PyTorch 默认不查这个路径。必须显式添加:
- 编辑
~/.bashrc或~/.zshrc,追加:export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH - 执行
source ~/.bashrc,再测试python3 -c "import torch; print(torch.cuda.device_count())"
漏掉这行,torch.cuda.is_available() 会稳定返回 False,且无明确错误提示 —— 这是最隐蔽也最常被忽略的一环。
LD_LIBRARY_PATH 没设),PyTorch 就会静默降级到 CPU 模式,很难定位。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











