分类: 开发软件运维

WSL+Tesla P40显卡 CUDA 不可用

基于 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 重启机器就可以了。

Recent Posts

ShardingSphere 更新 5.5.2 后找不到数据表

典型现象就是没有配置在分表规则…

7 天 之前

FreqTrade 量化交易超跌抄底策略

分享一个交易策略:当价格在过去…

4 月 之前

如何安全取回 GitHub 存储的 Action Secrets

在GitHub的使用过程中,存…

5 月 之前

Docker 容器非 root 用户监听 80 端口

起因是基于 CentOS 的 …

2 年 之前

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

3 年 之前

Java 运行时反射获取来自继承的泛型

背景 正常情况下 Java 的…

3 年 之前