【RuntimeError: CUDA error: device-side assert triggered】问题与解决
2023-04-18 16:19:34 时间
问题描述
当我在调试模型的时候,出现了如下的问题
/opt/conda/conda-bld/pytorch_1656352465323/work/aten/src/ATen/native/cuda/IndexKernel.cu:91: operator(): block: [5,0,0], thread: [63,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && “index out of bounds”` failed.
通过提示信息可以知道是个数组越界的问题。但是如图一中第二行话所说这个问题可能并不出在提示的代码段。
一开始碰到这个问题就一个劲儿地查看提示的错误代码,发现调整了代码段之后,问题依然存在在并且提示的问题代码变化了。
解决思路
首先明确一点,如图中描述的"RuntimeError: CUDA error: device-side assert triggered"该类问题,不应该仅从提示的代码进行检查。问题可能出在别的地方。
通过检查代码,以及查找出现类似问题的解中发现对于,“index >= -sizes[i] && index < sizes[i] && “index out of bounds””,这类数组越界的问题,如果大家的模型任务是用于分类任务,可以查看下自己模型在设置类别数量时,数值是否大于数据集中的给定的类别。
发现问题:
因为本人自己修改了COCO的dataset,所以在赋值类别数量的时候如下代码
num_classes = 20 if args.dataset_file != 'coco' else 91
修改过后的的dataset_file名称为coco_vl,所以类别给了20,实际模型在最后预测阶段的类别应该为91,所以在criterion阶段(计算loss)时会报数值越界错误。
更改代码如下:
num_classes = 20 if args.dataset_file != 'coco' and args.dataset_file != 'coco_vl' else 91
总结
- 分类任务模型中,出现类似于数值越界的问题,可以优先查看下dataset中的类别是否填写符合要求,不应该小于模型预测的类别数量。
- 出现device-side assert triggered的BUG不能只关注报错代码
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击