基于 WSL 访问显卡时的一些报错例如:
# 执行nvidia-ctk时卡死
wsl2 nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
# CUDA初始化异常
nvidia-container-cli: initialization error: WSL environment detected but no adapters were found
# Docker --gpus all 容器启动失败
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running prestart hook #0: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
还有些类似错误可能来自 Docker、Podman、WSL 等,底层原因其实都是同一个:显卡对于 WSL2 不可见,原因描述可以参考 https://docs.nvidia.com/cuda/wsl-user-guide/index.html
:
WSL 2 GPU acceleration will be available on Pascal and later GPU architecture on both GeForce and Quadro product SKUs in WDDM mode. It will not be available on Quadro GPUs in TCC mode or Tesla GPUs yet.
WSL2 GPU加速在Pascal及以上架构的GeForce/Quadro卡WDDM模式可用。TCC模式的Quadro显卡和Tesla系列计算卡暂不支持。
显卡的运行模式可以通过 nvidia-smi 查看,在 Driver-Model 列,如果显示 TCC 就是不可用的,此处可以选择切换为其它模式,常见的第二个模式是 WDDM(Windows Display Driver Model),看名字也能看出来这是个显示模式,Tesla 计算卡是不支持的,网上也有些通过注册表强改的此处直接跳过,本文主要介绍第三个模式 MCDM(Microsoft Compute Driver Model),模式间的切换可以通过以下命令:
// GPU_ID 传 0 代表所有
nvidia-smi -g {GPU_ID} -dm 0 // WDDM
nvidia-smi -g {GPU_ID} -dm 1 // TCC
nvidia-smi -g {GPU_ID} -dm 2 // MCDM
对于 Tesla 系列的计算卡只需要将模式切换为 MCDM 重启机器就可以了。
发表回复