RuntimeError: No CUDA GPUs are available:在训练进程里核对可见性,不要在 Python 中运行 nvcc

简介: 控制台`torch.cuda.is_available()`返回True,但训练报`No CUDA GPUs are available`?问题常因**多环境不一致**导致——检查与训练未必同进程、同解释器、同CUDA_VISIBLE_DEVICES。务必在训练脚本开头嵌入完整验证(路径、可见性、张量分配、小计算),而非依赖另一终端结果。(239字)

原帖在控制台查 CUDA 可用为 True,但训练初始化却失败;还把 nvcc 当作 Python 名字执行:

RuntimeError: No CUDA GPUs are available

同一台电脑上的两个入口也可能环境不同

原题控制台返回 True,训练却在 _cuda_init 失败。先把检查嵌入训练脚本,而不是继续在另一个控制台重复可用性查询。nvcc 是终端工具,Python 里出现 NameError 只说明把命令放错了地方,不能证明 GPU 驱动故障。

先确认“可用”的检查与“失败”的训练确实发生在同一个解释器、同一进程启动环境。不同 kernel 或环境变量会得到不同结果。

把检查放到原训练脚本开头:

import sys
import os
import torch
print("josh050608")
print("python:", sys.executable)
print("torch/CUDA:", torch.__version__, torch.version.cuda)
print("visible:", os.environ.get("CUDA_VISIBLE_DEVICES"))
print("available/count:", torch.cuda.is_available(), torch.cuda.device_count())

随后在相同进程实际分配 torch.ones(1,device='cuda:0')。如果这里就失败,先处理环境和 GPU 访问,再看 GPT-2 代码。

nvidia-smi 和 nvcc --version 是系统终端命令,不是 Python 语句;前者检查驱动和设备,后者只有安装 Toolkit 后才存在。预编译 torch 运行 CUDA 不一定需要本地 nvcc,缺少它不是这条运行错误的充分原因。

检查是否在 CUDA 初始化后修改 CUDA_VISIBLE_DEVICES,是否从没有 GPU 的容器/任务会话启动,以及训练与控制台是否用了不同环境。改变设备可见性应在启动 Python 前完成,之后重启进程。

如果 nvidia-smi 也无法访问设备,先修复驱动或会话权限;如果仅 torch 不行,再核对构建和驱动兼容性。验证路径是“同进程检查→小张量→小模型前向”,不能以另一个控制台的 True 作为训练环境正常的证据。

按“路径→可见性→分配→模型”验证

先比较训练与控制台的 sys.executable、torch.file、CUDA_VISIBLE_DEVICES 和设备数。若不同,选定同一个项目解释器并重启入口;若相同,再检查训练进程是否在初始化前后更改过可见性。

下面是需要真实 CUDA 的独立小计算,应由原训练解释器启动:

import torch
if not torch.cuda.is_available():
    raise RuntimeError("当前训练进程没有可用 CUDA 设备")
if torch.cuda.device_count() < 1:
    raise RuntimeError("本进程可见设备列表为空")
x = torch.arange(4, dtype=torch.float32, device="cuda:0")
y = x + 1
torch.cuda.synchronize()
assert y.cpu().tolist() == [1., 2., 3., 4.]
print("allocated/computed:", y.device, torch.cuda.get_device_name(0))

若 nvidia-smi 在系统终端也失败,先修宿主驱动或 GPU 会话权限;若系统正常而本进程失败,再核对构建和驱动兼容性。若只有容器/任务环境失败,检查设备是否确实分配给该进程。

不要为了得到 nvcc 命令就安装任意 Toolkit:运行预编译 torch 未必需要本地编译器。需要自定义 CUDA 扩展时,才另行检查工具链版本。

小分配和小计算通过后,再用极小 GPT-2 batch 验证模型前向。它可能暴露显存不足等新的问题,应按新的完整堆栈处理,不能把另一个控制台的 True 当作所有运行阶段已通过。

参考:原始求助帖;技术依据:PyTorch CUDA 语义(2.5)、PyTorch CUDA 环境变量(2.5)、PyTorch 官方安装指南。

相关文章
|
2天前
|
自然语言处理 索引 Python
ValueError: too many dimensions 'str':BERT 情感标签先映射为整数类别
该报错源于将字符串标签(&quot;notr&quot;/&quot;negative&quot;/&quot;positive&quot;)直接转为张量。需先映射为整数编码(如`{&quot;negative&quot;:0, &quot;notr&quot;:1, &quot;positive&quot;:2`),再用`torch.tensor(..., dtype=torch.long)`构造一维目标,确保与BERT三分类头输出维度一致。(239字)
|
2天前
|
监控 小程序 定位技术
低空经济服务平台怎么搭建?从资质审核到订单流转全流程指南
本文详解低空经济服务平台搭建全链路:聚焦航拍、巡检、植保等场景,以“合规优先”为原则,覆盖资质审核、空域报备、订单流转、作业履约、成果验收与台账溯源六大核心模块,提供可落地的技术架构与风控方案。
25 0
|
2天前
|
机器学习/深度学习 并行计算 Linux
CUBLAS_STATUS_EXECUTION_FAILED when calling cublasSgemm:在首个 Linear 前检查真实特征
该帖描述一维信号CNN在GPU上执行fc1层时触发cuBLAS执行失败错误。重点强调:勿凭空猜测展平维度,应通过打印输入/权重形状、dtype、设备及启用`CUDA_LAUNCH_BLOCKING=1`定位真实首错点,再系统排查设备一致性、内存压力或环境兼容性问题。(239字)
|
2天前
|
缓存 Unix PyTorch
OSError: [Errno 24] Too many open files:两个 DataLoader 可以 zip,先查文件描述符
原帖双Loader并发读取ZIP导致“Too many open files”(Errno 24),实为文件描述符泄漏或生命周期管理不当,非ZIP不支持DataLoader。需排查Dataset中图像/HDF5/ZIP句柄是否及时释放,并优先采用单Loader配对Dataset保障数据一致性与资源可控性。(239字)
|
2天前
|
并行计算 PyTorch 算法框架/工具
Expected all tensors to be on the same device, cuda:0 and cpu:恢复训练时检查 SGD 动量
该问题源于断点续训时优化器状态(如SGD动量缓冲区)未与模型参数同设备,导致`optimizer.step()`中跨设备张量运算失败。前向/反向可正常执行,但动量更新报错“cuda:0 and cpu”。需检查并统一`param`、`grad`及`optimizer.state`中所有Tensor的设备。
|
2天前
|
并行计算 PyTorch Linux
libtorch_python.so: cannot open shared object file:文件缺失时先修复 torch 安装
该问题核心是 PyTorch 1.0.1.post2 安装不完整,`torch/lib/` 下缺失关键文件 `libtorch_python.so`,非环境变量(LD_LIBRARY_PATH)可解决。需先用 `importlib.util.find_spec` 定位真实安装路径,核对文件存在性;再通过 `pip show -f torch` 验证分发完整性。切勿混用版本或复制库文件。
|
2天前
|
PyTorch 算法框架/工具 索引
ValueError: only one element tensors can be converted to Python scalars:张量列表先检查形状,再 stack
该文解析PyTorch中`list(tensor)`引发的`ValueError`根源:列表含多元素张量时,不可直接转Python标量。强调应通过`tensor.shape`或遍历打印各张量尺寸来查形状;同形张量用`torch.stack`(增维)而非`cat`或`item`;异形则保留原结构,避免强行转换。
|
2天前
|
并行计算 IDE PyTorch
No module named "torch":Notebook 能导入,终端脚本却失败时先对齐解释器
该问题本质是Python环境不一致:Notebook与控制台使用了不同解释器。需比对`sys.executable`路径,确认torch是否安装在当前运行环境中,并用`python -m pip`精准安装,避免路径错配。(239字)
|
2天前
|
PyTorch 算法框架/工具 索引
RuntimeError: expected scalar type Long but found Float:NLLLoss 要改 labels,不要把 images 转 long
该问题源于`NLLLoss`要求标签为`torch.long`类型(类别索引),但输入为`float`。需确保标签是整数编号(非概率/小数),并在`DataLoader`中统一配对图像与标签,避免双Loader错位;推荐改用`CrossEntropyLoss`配原始logits,或`LogSoftmax+NLLLoss`组合。(239字)
|
2天前
|
数据可视化 PyTorch 算法框架/工具
only batches of spatial targets supported:三通道分割 one-hot 转为每像素类别编号
该报错源于PyTorch交叉熵要求标签为`[N, H, W]`(3D),但输入了`[N, 3, H, W]`(4D)掩码。需先验证三通道是否为互斥one-hot,再用`argmax(dim=1)`转为整型标签,并妥善处理全零未标注像素(设`ignore_index`),避免误判为背景类。(239字)

热门文章

最新文章