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

同一环境下PyTorch训练SAR_ResNet31触发CUDA设备端断言错误求助

解决SAR_ResNet31训练时的CUDA断言错误(indexSelectLargeIndex)

你遇到的srcIndex < srcSelectDimSize断言错误,本质是目标序列的索引超出了词嵌入表的范围,结合报错位置在SAR解码器的embed_tgt步骤,给你几个直接的排查方向:

1. 核对词表大小与目标索引范围

报错核心是嵌入层查询的索引大于等于词表的实际大小。直接做两步验证:

  • 打印批次中目标序列的最大索引,对比模型嵌入层的词表尺寸:
    # 在数据加载迭代中插入这段调试代码
    for batch in train_loader:
        tgt_labels = batch['target']
        print("目标序列最大索引:", tgt_labels.max().item())
        print("模型嵌入层词表大小:", model.decoder.embed_tgt.num_embeddings)
        break
    
    如果前者大于等于后者,直接确认是词表大小设置错误。

2. 检查数据预处理的索引映射

  • 确认韩文数据集里的所有字符,是否都被正确映射到词表内的索引:比如生僻字、特殊符号有没有被统一映射到<UNK>索引(通常是0或词表最后一位),而不是生成了超出词表范围的数值。
  • 排查预处理代码中,字符转索引的逻辑,是否遗漏了部分韩文字符的处理。

3. 校验模型初始化的词表参数

  • 查看train_pytorch.py中初始化SAR_ResNet31时的vocab_size参数,是否和你韩文数据集的实际词表大小完全一致?很多时候是模型用了默认的英文词表大小,和韩文词表不匹配导致的。

4. 排查填充索引的合法性

  • 若训练时对序列做了填充,确认填充用的索引(比如pad_idx)是否在词表范围内(0到vocab_size-1)。部分代码会错误地用vocab_size作为填充索引,直接触发越界。

临时调试技巧

把batch_size改成1,单样本运行训练脚本,定位到具体触发错误的样本,直接查看该样本的目标序列内容,快速锁定异常字符或索引问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:13