如何定位报错: indexSelectLargeIndex:... Assertion `srcIndex < srcSelectDimSize` fail

文章目录

  • 1. 背景
  • 2. 准备工作
    • 2.1 debug工具
    • 2.2 设置准备工作
  • 3. 开启 debug


1. 背景

在使用 cuda 在 gpu 计算的过程中,出现索引超过最大长度。

indexSelectLargeIndex:... Assertion `srcIndex < srcSelectDimSize` fail

通常这种时候堆栈底部还伴随以下报错:

RuntimeError: CUDA error: device-side assert triggered

如果你明确你的输入是什么,那么这种问题不难排查。

困难的是,如果你调用了一些封装很深的库,例如模型训练库,比如 transformer 。特别是你还是用多 gpu 跑这种代码,那么这种问题排查起来尤其困难。

ps:
对于这种隐藏太深的问题,在网上(包含外网)几乎搜索不到太多的解决方法。

2. 准备工作

目前遇到这种问题,最好的解决方法只有对代码 debug。千万别害怕 debug,这是当你遇到疑难杂症时,理解代码、解决问题的最佳方法!

2.1 debug工具

当然 debug 也有方法的,掌握合适的工具事半功倍:
(1)本地代码可以用 IDE 编码的,那么直接用 IDE 的 debug 方便
(2)远程部署在服务器上的,如果本地可以通过内网 ssh 连接服务器,建议部署用 VSCode,远程连接进行 debug
(3)远程部署在服务器上的,本地没有任何办法连接服务器的,那么可以借助 python 的 pdb 库。详细用法请参考《Python内置debug库: pdb用法详解》
(4)当然,肯定有其他方法,更多的方法我就没用过了~

2.2 设置准备工作

为了可以高效的 debug,需要简单配置以下设置:
(1)将 gpu 运算替换成 cpu 运算
(2)将多线程改成单线程
(3)如果是深度学习模型训练,请调低模型参数、减少训练的数据量

下面依次解释以上操作:
(1)将 gpu 运算替换成 cpu 运算

  • model.to(torch.device("cpu"))
  • 如果你使用 transformer 库,在 TrainingArgumentsuse_cpu = True

(2)将多线程改成单线程;例如此前你使用多机多卡训练,请调整成一张卡

(3)调低模型参数、减少训练的数据量

  • 现在的大模型的参数量巨大,可能导入会爆内存,请调低模型的参数,例如 attention 的head数、网络隐藏层数、embedding维度、max_seq_length 等
  • 另外,为了提高效率,训练 load 的数据可以少一些,加速 debug 效率

3. 开启 debug

由于我们并不知道是哪里的问题引起的索引超过最大长度,因此我们需要从头开始 debug,那么是不是一步一步来 debug 呢?

这里有一个加速的方法,我们采用二分法。
(1)在大致代码1/2的位置打上断点,然后放行代码,看代码是否可以运行到这个断点。
(2)如果可以,那么在后半部分的1/2再打断点,再运行;
(3)否则在前半部分的1/2再打断点。
(4)直到可以定位到是哪一行函数报错,再追踪进去重复上面的步骤

举个例子:
这是transformer的内置的train 的内部代码,明确是这里出现了问题,现在就需要找到是哪一行有问题。我们可以找一个大致的位置打上断点,然后放行 debug 代码
在这里插入图片描述
找到报错的一行代码以后,再具体根据里面的变量之间的关系具体分析。


欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/721667.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Aiflow中,代码逻辑中明明不该触发的方法但是却触发了。

图中这个红圈的task&#xff0c;是我更新error记录的task&#xff0c;是某些特定的task特定情况会触发的。正常情况走的最下面的箭头的路径。但是现在就是就算只走了下面箭头的路径&#xff0c;红圈那个task依然被触发了。检查了半天才发现&#xff0c;它的TriggerRule设置的是…

【HarmonyOS】鸿蒙应用模块化实现

【HarmonyOS】鸿蒙应用模块化实现 一、Module的概念 Module是HarmonyOS应用的基本功能单元&#xff0c;包含了源代码、资源文件、第三方库及应用清单文件&#xff0c;每一个Module都可以独立进行编译和运行。一个HarmonyOS应用通常会包含一个或多个Module&#xff0c;因此&am…

第55期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

CIC-DDoS2019-Detection

CIC-DDoS2019 对CIC-DDoS2019数据集进行检测,本文提供了如下内容&#xff1a; 数据清洗与合并机器学习模型深度学习模型PCA,t-SNE分析数据&#xff0c;结果可视化 代码地址&#xff1a;[daetz-coder](https://github.com/daetz-coder/CIC-DDoS2019-Detection) 1、数据集加载…

【Anaconda】【Windows编程技术】【Python】Anaconda的常用命令及实操

一、Anaconda终端 在安装Anaconda后&#xff0c;电脑上会新增一个Anaconda终端&#xff0c;叫Anaconda Prompt&#xff0c;如下图&#xff1a; 我们选择“打开文件位置”&#xff0c;将快捷方式复制一份到桌面上&#xff0c;这样日后就可以从桌面上方便地访问Anaconda终端了&…

欢乐钓鱼大师游戏攻略:萌新必备攻略大全!钓鱼脚本!

《欢乐钓鱼大师》是一款休闲益智类游戏&#xff0c;以钓鱼为主题&#xff0c;玩家需要通过各种钓鱼任务和挑战&#xff0c;收集不同种类的鱼类&#xff0c;并提升自己的钓鱼技术和装备。本文将为大家详细解析游戏的各个方面&#xff0c;帮助玩家更好地掌握游戏技巧&#xff0c;…

Airbind - hackmyvm

简介 靶机名称&#xff1a;Airbind 难度&#xff1a;中等 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmAirbind 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;Airbind&#xff09;&#xff1a;192.168.56.121 跳板机IP(windows 11)&…

BEV 中 multi-frame fusion 多侦融合(一)

文章目录 参数设置align_dynamic_thing:为了将动态物体的点云数据从上一帧对齐到当前帧流程旋转函数平移公式filter_points_in_ego:筛选出属于特定实例的点get_intermediate_frame_info: 函数用于获取中间帧的信息,包括点云数据、传感器校准信息、自车姿态、边界框及其对应…

半监督医学图像分割:基于对抗一致性学习和动态卷积网络的方法| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 Semi-Supervised Medical Image Segmentation Using Adversarial Consistency Learning and Dynamic Convolution Network 半监督医学图像分割&#xff1a;基于对抗一致性学习和动态卷积网络的方法 01 文献速递介绍 医学图像分割在计算辅助诊断和治疗研究中扮演…

移动app必须进行安全测试吗?包括哪些测试内容?

移动App已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是社交娱乐还是工作学习&#xff0c;我们都离不开这些精心设计的应用程序。然而&#xff0c;随着移动App的广泛普及和使用&#xff0c;其安全性问题也逐渐浮出水面。为了确保用户数据的安全和减少潜在的风险&…

Playwright工作原理

执行test时&#xff0c;有哪些关键步骤 当我们用Playwright编写一段简单的test script&#xff0c;代码如下所示&#xff1a;在test case中第一段代码就是await page.goto(xxxxx) import { test, expect } from playwright/test;test(test, async ({ page }) > {await page…

新闻稿发布中被拒稿的原因分析

企业的公关经理在落地新闻宣传时一定碰到过新闻媒体拒稿的情况&#xff0c;小马识途在此总结了常见的拒稿原因&#xff0c;供广大企业参考。 1、新闻稿内容涉及违法违规信息 企业在发稿的时候内容一定要确认好&#xff0c;不要涉及违法、违规类信息&#xff0c;如果新闻内容里…

序列到序列模型中的注意力机制

目录 一、说明 二、编码器解码器架构中的问题&#xff1a;需要注意 2.1 编码器方面的问题&#xff1a; 2.2 解码器方面的问题&#xff1a; 三、什么是注意力机制&#xff1f; 3.1 计算 ci 值&#xff1a; 3.2 ci 的广义表示&#xff1a; 四、Bahdanau 注意 &#xff1a; 4.1. 兼…

报表开发工具DevExpress Reporting v23.2 - 增强PDF导出、多平台打印等

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting控件日前正式发布了v23.2…

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题&#xff0c;我就在想&#xff0c;是否能一个创建“透明的”的工作场所&#xff1f;让员工和管理者能够实时查询生产进度&#xff0c;及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…

LeRobot——Hugging Face打造的机器人领域的Transformer架构

前言 如友人邓博士所说&#xff0c;“用 Stanford aloha 课题组提供的训练数据&#xff0c;训练他们研发的 Action Chunking Transformer 动作规划模型&#xff0c;训练结果&#xff0c;能用&#xff0c;但是稳定性有待提高 要提高稳定性&#xff0c;看来必须修改 Stanford a…

C++初学者指南第一步---6.枚举和枚举类

C初学者指南第一步—6.枚举和枚举类 文章目录 C初学者指南第一步---6.枚举和枚举类1.作用域的枚举(enum class类型&#xff09;&#xff08;C11&#xff09;2.无作用域的枚举(enum类型)3.枚举类的基础类型4.自定义枚举类映射5.和基础类型的互相转换 1.作用域的枚举(enum class类…

深度学习(九)——神经网络:最大池化的作用

一、 torch.nn中Pool layers的介绍 官网链接&#xff1a; https://pytorch.org/docs/stable/nn.html#pooling-layers 1. nn.MaxPool2d介绍 nn.MaxPool2d是在进行图像处理时&#xff0c;Pool layers最常用的函数 官方文档&#xff1a;MaxPool2d — PyTorch 2.0 documentation &…

耗时两天半的java之sql注入代码审计

java之sql注入代码审计 前言 其实找到漏洞原因很简单&#xff0c;主要想学习一下JDBCsql的过程 JDBC 简单介绍 Java通过java.sql.DriverManager来管理所有数据库的驱动注册&#xff0c;所以如果想要建立数据库连接需要先在java.sql.DriverManager中注册对应的驱动类&#x…

2Y0A21 GP2Y0A21YK0F 红外测距传感器 arduino使用教程

三根线 正极负极信号线 确认自己的三根线分别代表什么&#xff0c;我们的颜色可能不一样 附一张我买的传感器他们的说明图 正极 接 开发板5V 负极 接开发板GND 信号线 接A0 代码arduino ide上面写 // Infračerven senzor vzdlenosti Sharp 2Y0A21// připojen potře…