You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch首个Epoch训练后触发CUDA device-side assert错误求解

问题解决步骤
  • 优先确认损失函数与模型输出层的匹配性:
    二分类场景下如果使用CrossEntropyLoss,模型最后一层输出维度必须为2,输入的标签需为torch.long类型的0/1值;如果使用BCEWithLogitsLoss,模型最后一层输出维度必须为1,输入的标签需转成torch.float32类型,且形状与输出张量完全对齐。第一个epoch未触发报错属于偶发情况,第二个epoch遍历到形状、类型不匹配的样本时就会触发底层断言。
  • 排查自定义Dataset的返回值:
    检查__getitem__方法的返回逻辑,确保不存在偶发的标签值超出0/1范围、标签带有冗余维度的问题,每个样本返回的标签必须是合法的0/1标量。
  • 检查设备一致性:
    确保每个batch的输入张量、标签、模型、损失函数都部署在同一个设备上,避免出现部分张量在CPU、部分在CUDA的情况。第一个epoch结束后的验证阶段如果将部分张量意外移到CPU,第二轮训练开始前没有移回CUDA也会触发该错误。
  • 开启CUDA同步报错定位问题根因:
    在代码最开头加入以下配置,让报错指向真正触发异常的代码行,而非作为异步报错同步点的running_loss计算行:
    import os
    os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
    
  • 验证训练流程的梯度逻辑:
    确保每个batch训练前都执行了optimizer.zero_grad()操作,梯度累积异常经过多轮迭代后也可能触发数值越界。

内容的提问来源于stack exchange,提问作者theoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:15:04