这个 RuntimeError: No CUDA GPUs are available 报错,排查的重点要放在训练进程自身的 GPU 可见性环境变量、进程权限、容器限制上,不要在 Python 代码里面调用、运行 nvcc 去判断显卡是否可用,nvcc 是 CUDA 编译器,它只能检查 CUDA 工具链是否安装,不能代表 PyTorch 训练进程能不能识别到 GPU,就算 nvcc 正常,进程被环境变量、容器、调度脚本限制后,PyTorch 依旧读不到显卡,我们要在训练代码内部写轻量检测逻辑,直接以进程视角确认 GPU 可见状态,再一步步定位问题。PyTorch 识别 GPU 依赖 nvidia 驱动、CUDA runtime、进程可见设备列表,nvcc 属于编译侧工具,和运行时 PyTorch 能不能拿到 GPU 是两套独立的检查项,混用 nvcc 判断很容易误判,下面给你整理检测代码、排查顺序和常见限制场景。
一、进程内 GPU 可见性检测代码(只放在训练脚本里,不调用 nvcc)
import torch
在训练进程内部直接检测,代表进程真实视角
print("torch.cuda.is_available():", torch.cuda.is_available())
print("可见GPU数量:", torch.cuda.device_count())
for i in range(torch.cuda.device_count()):
print(f"GPU{i} name:", torch.cuda.get_device_name(i))
运行这段代码输出结果,就是训练进程能看到的真实 GPU 情况,以此作为判断基准。
二、常见触发原因清单
- CUDA_VISIBLE_DEVICES 环境变量设置为空或者设置了不存在的卡号,进程直接屏蔽所有 GPU
- 容器、k8s、slurm 任务调度没有透传 GPU 设备,宿主机能看到显卡,容器内进程看不到
- PyTorch 版本、预编译包绑定的 CUDA runtime 版本和驱动不兼容
- 显卡被其他进程独占、算力模式、MIG 切分后子设备配置异常
- 驱动异常、nvidia-container-runtime 缺失(容器场景)
三、分步排查流程
- 优先在训练脚本开头插入上面的检测代码,确认进程视角 GPU 可见情况
- 打印当前进程的 CUDA_VISIBLE_DEVICES:import os; print(os.environ.get("CUDA_VISIBLE_DEVICES"))
- 如果是分布式 / 多卡训练,检查启动脚本(torchrun、slurm 脚本)有没有错误覆盖设备变量
- 区分:nvidia-smi 可以在 shell 查看宿主机显卡,但是不要用 nvcc --version 来判定 PyTorch GPU 可用性
- 验证 PyTorch 安装包是不是 CUDA 版本,而不是 cpu 版 PyTorch
四、容易踩坑的关键点表格
| 检查方式 | 作用 | 是否适合判断本报错 |
|---|---|---|
| 进程内 torch.cuda.device_count () | 当前训练进程可见 GPU | ✅ 首选 |
| shell 执行 nvidia-smi | 宿主机层面显卡状态 | ✅ 辅助参考 |
| python 里调用 / 运行 nvcc | 检查 CUDA 编译器 | ❌ 不适合,容易误判 |
【相关 FAQ】
问题 1:RuntimeError: No CUDA GPUs are available,nvcc 能正常输出版本号,为什么训练进程还是识别不到 GPU?
回答 1:nvcc 正常只说明 CUDA 编译工具安装好了,RuntimeError: No CUDA GPUs are available 是 PyTorch 运行时拿不到 GPU,受 CUDA_VISIBLE_DEVICES、容器隔离、PyTorch 包类型影响,nvcc 的结果不能代表训练进程 GPU 可见性。
问题 2:排查 RuntimeError: No CUDA GPUs are available,在训练进程核对 GPU 可见性,怎么清空错误的 CUDA_VISIBLE_DEVICES?
回答 2:在训练脚本最开头设置 os.environ ["CUDA_VISIBLE_DEVICES"]="0" 或者设为空字符串,或者在启动脚本里取消这个环境变量,再用 torch.cuda.device_count () 重新读取进程内 GPU 可见性,来定位 RuntimeError: No CUDA GPUs are available。
问题 3:已经在训练进程核对 GPU 可见性返回 0,nvidia-smi 能看到显卡,怎么解决 RuntimeError: No CUDA GPUs are available?
回答 3:优先检查容器运行时、任务调度器有没有挂载 GPU,其次确认安装的不是 cpu 版本 PyTorch,驱动版本要满足 PyTorch CUDA runtime 最低要求,不要依靠 nvcc 来排查 RuntimeError: No CUDA GPUs are available。
【参考资料】
[2026-06-02](PyTorch CUDA Runtime GPU Visibility Troubleshooting)PyTorch Official Docs
[2026-01-10](No CUDA GPUs are available CUDA_VISIBLE_DEVICES debug)PyTorch Forums
[2025-08-14](Difference between nvcc and cuda runtime in PyTorch)Stack Overflow
[2024-09-05](Container GPU pass through and visibility limit)NVIDIA Docs
【免责声明】
本文针对 PyTorch RuntimeError: No CUDA GPUs are available 报错,提供训练进程内核对 GPU 可见性、避开 nvcc 校验的排查方案;驱动版本、容器环境、集群调度配置差异会影响效果,代码仅作调试参考,不保证适配所有服务器、集群环境,不对调试过程中训练中断、任务调度失败承担责任。
