WSL2中torch.cuda.is_available()返回False但nvidia-smi正常,是因Windows驱动支持的CUDA最高版本(如12.2)与PyTorch CUDA运行时版本不匹配所致;须在PowerShell查nvidia-smi的CUDA Version,并确保PyTorch、cuDNN等均≤该版本,否则GPU静默失效。

你在WSL2里运行Llama 3、BGE Reranker或Z-Image Generator时,torch.cuda.is_available()返回False,nvidia-smi却能正常显示GPU设备——这不是PyTorch装错了,而是WSL2子系统中CUDA驱动版本与运行时版本不匹配导致的调用链断裂。这种问题不会报明确错误,只让GPU静默失效。
确认Windows主机NVIDIA驱动版本与CUDA支持上限
这一步必须在Windows PowerShell(管理员权限)中执行,不能在WSL2里查:
运行 nvidia-smi,重点看输出中 【CUDA Version】 这一栏数值(例如 CUDA Version: 12.2),它代表当前驱动所能支持的最高CUDA运行时版本,不是你装了什么CUDA Toolkit。
若该值为 12.2,则WSL2内所有CUDA相关组件(PyTorch、cuDNN、容器镜像)都必须使用 ≤12.2 的运行时版本;装 cu124 或 cu123 包将必然失败,且无提示。
注意:Windows Update可能静默降级驱动,哪怕你上周装过535.154,今天也可能被覆盖成531.68——务必重新执行 nvidia-smi 验证。
验证WSL2是否已启用GPU支持并识别设备
先确保WSL2发行版已重启过(不是简单退出再打开):
在WSL2终端中直接运行 nvidia-smi。
如果报错 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,说明GPU支持未启用或驱动桥接失败。
此时回到Windows PowerShell(管理员),执行:wsl --shutdown → wsl -d Ubuntu(或你的发行版名)→ 再试 nvidia-smi。
若仍失败,检查Windows功能中“适用于Linux的Windows子系统”和“虚拟机平台”是否均已启用,并确认BIOS中已开启Intel VT-x/AMD-V虚拟化。
检查PyTorch CUDA版本与驱动上限的匹配关系
方法一:用Python脚本快速比对
在WSL2中运行:
python3 -c "import torch; print('PyTorch版本:', torch.__version__); print('CUDA可用:', torch.cuda.is_available()); print('CUDA编译版本:', torch.version.cuda); print('CUDA运行时版本:', torch._C._cuda_getCurrentRawStream())"
重点看 torch.version.cuda 输出值(如 12.1)是否 ≤ Windows端 nvidia-smi 显示的 【CUDA Version】;若前者更大,立即卸载当前PyTorch。
方法二:离线安装精准匹配包
去PyTorch官网“Previous Versions”页,按你的Python版本(如cp310)、系统(Linux)、CUDA支持(如cu121)筛选下载链接。
例如驱动支持CUDA 12.2,则选 torch-2.3.0+cu121 而非 +cu122 或 +cpu;下载后执行:pip3 install torch-2.3.0+cu121-cp310-cp310-linux_x86_64.whl。
绕过本地环境,用预构建CUDA容器验证驱动连通性
第一步:确认Docker Desktop for WSL2已安装并启用WSL2 backend
第二步:拉取NVIDIA官方CUDA基础镜像:docker run --rm --gpus all nvidia/cuda:12.2.2-runtime-ubuntu22.04 nvidia-smi
若容器内成功输出GPU列表,说明WSL2→Windows驱动桥接正常,问题出在本地PyTorch或CUDA Toolkit配置;
若报错 failed to start container process: error during container init: error running hook,则是WSL2内核或NVIDIA Container Toolkit未就绪。
此时执行:wsl --update → sudo apt update && sudo apt install -y nvidia-container-toolkit → sudo nvidia-ctk runtime configure --runtime=docker → 重启Docker服务。



















