RuntimeError: CUDA error: device-side assert triggered:Colab 先重启,再找首次断言

简介: 该文详解CUDA断言错误调试策略:强调先重启运行时、启用`CUDA_LAUNCH_BLOCKING=1`,用最小张量验证环境;区分“会话已坏”与新操作触发,主张逐段定位而非臆测标签越界,提供实用边界检查函数与验证流程。(239字)

原帖连创建一个简单 CUDA 张量都失败,但这段创建代码本身不足以证明标签或索引越界:

RuntimeError: CUDA error: device-side assert triggered

先区分“会话已坏”与“新操作触发”

原题是在 Google Colab 创建 [1,2] 时看到断言,没有提供损失函数或词表索引。文章中常见的标签越界只是可能原因,不能据此补出原题根因。对这个场景,最有区分力的操作是全新运行时中的最小 CUDA 张量,而不是先改 batch_size。

CUDA 执行具有异步性,较早发生的断言可能在后续张量操作才被报告。已经触发设备断言的会话也可能继续报错。先重启 Colab 运行时,在任何 CUDA 操作前设置同步调试,再只运行最小检查:

import os
os.environ["CUDA_LAUNCH_BLOCKING"] = "1"
import sys
import torch
print("josh050608")
print("python/build:", sys.executable, torch.__version__, torch.version.cuda)
print("available:", torch.cuda.is_available())
t = torch.tensor([1, 2], device="cuda")
print("tensor:", t, t.device)

若全新会话中这段能运行,逐段恢复原来的数据处理和训练,记录第一个出错操作;不要从最后一次 print 或 .cpu() 推断根因。普通 Linux 终端也可用 CUDA_LAUNCH_BLOCKING=1 python train.py 启动调试。

若首次失败在分类损失前,检查 logits.shape[1] 与标签范围:类别索引必须满足 0 <= target < C,显式配置的 ignore_index 除外。若在 Embedding 或索引运算,核对索引是否小于词表/被索引维度长度。对同一小批数据在 CPU 重跑,通常能得到更直接的越界提示。

如果重启后仅创建张量就失败,才继续查运行时与驱动,而不是编造训练标签问题。修复后应再次从干净进程跑最小张量检查和首个训练批次;同步模式用于定位,调通后可移除以恢复性能。

把第一次失败缩到一个批次

若干净运行时的张量测试成功,按“取一批数据 → 模型前向 → 损失 → backward → step”逐段加回来。同步调试启用后,记录首次失败的操作以及那一批输入,后续重复出现的同一句断言通常不再提供新的根因证据。

对于单标签分类,下面是可以放在损失前的边界检查函数。logits 是模型实际输出,target 是同批标签,ignore_index 必须传入当前损失函数真实设置的值;下面用合成 CPU 数据展示好坏两组输入:

import torch
def check_class_indices(logits, target, ignore_index=-100):
    if target.dtype != torch.long:
        raise TypeError(f"类别索引应为 long,实际为 {target.dtype}")
    classes = logits.shape[1]
    selected = target[target != ignore_index]
    bad = selected[(selected < 0) | (selected >= classes)]
    print("logits/target:", logits.shape, target.shape)
    print("classes/bad labels:", classes, bad[:10].tolist())
    if bad.numel():
        raise ValueError("标签超出当前输出类别范围")

logits = torch.randn(3, 2)
check_class_indices(logits, torch.tensor([0, 1, 0]))
try:
    check_class_indices(logits, torch.tensor([0, 1, 2]))
except ValueError as exc:
    print("caught before CUDA loss:", exc)

这个函数只覆盖“类别索引目标”这条路线;多标签概率目标、Embedding 输入或自定义 CUDA 算子需要核对各自约束。若是 Embedding,比较最大索引与 embedding.num_embeddings;若是图像索引,核对的应是被索引那一维,不能拿类别数代替。

CUDA_LAUNCH_BLOCKING=1 会让异步调用更接近真实失败点,但不能恢复已经损坏的 CUDA 会话,也不会修正数据。TORCH_USE_CUDA_DSA 涉及构建时支持,给已安装 wheel 临时加环境变量不等于重新编译出了断言信息。

当 CPU 小批次也失败,先修正它报告的标签或索引;当 CPU 通过、全新 CUDA 最小程序仍失败,再保留 torch 构建、驱动和设备信息检查运行环境。最终验证应从重启后的第一批开始,而不是继续在已断言的进程里尝试 .empty_cache()。

参考:原始求助帖;技术依据:PyTorch CUDA 语义(2.5)、PyTorch CUDA 环境变量(2.5)、CrossEntropyLoss(2.5)、Embedding(2.5)。

相关文章
|
11天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
4144 21
|
11天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
4202 49
|
6天前
|
存储 弹性计算 人工智能
2026 年阿里云双十一活动入口攻略,新客服务器优惠通道、三大会场入口梳理
综合来看,2026年阿里云双十一活动入口清晰: 阿里云轻量应用服务器、阿里云ECS云服务器、阿里云GPU云服务器、阿里云百炼大模型服务平台 活动会场、综合权益中心、99计划专场三大入口覆盖服务器、AI权益与续费特价;新用户通过控制台首页banner、权益中心、产品页三处路径进入专属专场,老用户通过控制台弹窗和费用中心权益中心进入老客专区,企业用户做企业实名后解锁专属满减与阶梯折扣。
821 0
|
12天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
2023 7
|
6天前
|
云安全 人工智能 安全
|
5天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
1161 3
|
12天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2148 6
|
云安全 安全 网络安全
|
3天前
|
人工智能 安全 API
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(dsh)是DeepSeek AI于2026年开源的轻量级Agent运行框架,基于Cordis内核,践行“一切皆插件”理念。支持Web/桌面双端,开箱即用;内置多模型接入、丰富插件生态(超3.5万),适配编程、办公、创作等场景。(239字)
760 0

热门文章

最新文章