You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2+Win10+Ubuntu环境下CUDA Docker容器无法识别GPU求助

问题描述
  • 环境:WSL2 + Windows10 + Ubuntu20.04
  • 核心现象:所有带CUDA的Docker容器无法识别GPU,执行测试命令:
    docker run --gpus=all --rm nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
    
    报错内容:Error: only 0 Devices available, 1 requested. Exiting.
  • 已确认的排除项:
    • 主机端nvcc --version和nvidia-smi均能正常运行,GPU硬件本身无问题
    • 启动普通Ubuntu容器后,执行nvidia-smi -L可正常识别GPU,说明容器与主机的GPU通信链路正常,问题仅局限于CUDA相关容器
    • 已多次尝试重装NVIDIA驱动、CUDA Toolkit、NVIDIA Container Toolkit的不同版本组合,问题未解决
排查与解决方案

1. 严格匹配CUDA版本兼容性

WSL2中,容器内的CUDA版本必须与主机Windows端的CUDA Runtime版本(nvidia-smi右上角标注的版本)兼容,且不能高于该版本:

  • 先在主机WSL2终端执行nvidia-smi,记录右上角的CUDA Version(比如11.8)
  • 更换测试镜像为与主机版本匹配的CUDA样本镜像,例如主机CUDA版本为11.7时,使用:
    docker run --gpus=all --rm nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.7 nbody -gpu -benchmark
    
  • 避免使用未指定CUDA版本的镜像,这类镜像默认可能使用最新版CUDA,容易出现版本不匹配

2. 检查WSL2内核NVIDIA模块状态

WSL2内核需正确加载NVIDIA相关模块:

  • 在WSL2终端执行以下命令,确认模块存在且版本与主机驱动匹配:
    modinfo nvidia | grep version
    
  • 若无输出,手动加载模块:
    sudo modprobe nvidia
    sudo modprobe nvidia-uvm
    
  • 若加载失败,更新WSL2内核:打开Windows终端执行wsl --update,完成后重启WSL2

3. 验证NVIDIA Container Toolkit配置

确保Docker daemon正确配置NVIDIA runtime:

  • 检查/etc/docker/daemon.json文件内容,需包含:
    {
      "runtimes": {
        "nvidia": {
          "path": "nvidia-container-runtime",
          "runtimeArgs": []
        }
      },
      "default-runtime": "nvidia"
    }
    
  • 若配置错误或缺失,重新生成配置并重启Docker:
    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    
  • 验证Docker是否识别NVIDIA runtime:
    docker info | grep -i nvidia
    
    输出需包含Runtimes: nvidia runc字样

4. 检查环境变量干扰

确保主机和容器的CUDA环境变量未被错误设置:

  • 先在WSL2主机终端执行echo $CUDA_VISIBLE_DEVICES,若输出非空且不是0或all,执行unset CUDA_VISIBLE_DEVICES清除变量
  • 手动指定容器环境变量测试:
    docker run --gpus=all --rm -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
    

5. 测试基础CUDA容器

用最简CUDA镜像排查是否为样本镜像问题:

  • 运行基础CUDA容器并执行核心测试:
    # 验证nvidia-smi
    docker run --gpus=all --rm nvidia/cuda:11.8-base-ubuntu20.04 nvidia-smi
    # 验证nvcc版本
    docker run --gpus=all --rm nvidia/cuda:11.8-base-ubuntu20.04 nvcc --version
    # 执行CUDA设备查询
    docker run --gpus=all --rm nvidia/cuda:11.8-base-ubuntu20.04 /usr/local/cuda/extras/demo_suite/deviceQuery
    
    若deviceQuery输出显示GPU信息(包含Result = PASS),说明基础CUDA环境正常,问题出在nbody样本镜像,尝试更换其他版本的nbody镜像或自行编译测试

内容的提问来源于stack exchange,提问作者P_Novotny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:27:28