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

news2024/11/26 11:32:50

文章目录

  • 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公众号(精选高质量文章):一个比特定乾坤
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【太原理工大学】软件系统安全—分析题

OK了&#xff0c;又是毫无准备的一场仗&#xff0c;我真是ありがとうございます 凸^o^凸 根据前几年传下来的信息&#xff0c;所谓“分析”&#xff0c;就是让你根据情节自行设计&#xff0c;例如如何设计表单等&#xff0c;这类多从实验中出&#xff0c;王老师强调好好做实验一…

浏览器加速播放视频技巧

当我们看网页中的视频时&#xff0c;想加速播放&#xff0c;但是选项最高只能2倍速时&#xff0c;还想再加快播放如何操作&#xff1f; 此时我们可以按F12打开浏览器开发者选项&#xff0c;然后点击控制台&#xff0c;在浏览器输入如下代码&#xff1a; document.querySelecto…

数据结构---排序算法

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

Hype4.0 for Mac软件下载-Hype for Mac HTML5 创作工具下载附加详细安装步骤

Hype 4 Pro Mac正式版是款功能实用的动画创作工具。Hype 4 Pro Mac最新版可以帮您轻松创建令人惊叹的动画和交互式网页内容。并且Hype 4 Pro Mac还可被设计师用来创建动画&#xff0c;为网页、信息图形、演示文稿、数字杂志、广告、iBooks、教育内容、应用程序原型、作品集、动…

基于Spring+Vue的前后端分离的计算器

麻雀虽小&#xff0c;五脏俱全 该项目已部署上线&#xff1a;http://calculator.wushf.top/ 并通过Gitee Go流水线实现持续部署。 需求分析 表达式求值 支持加减乘除四则运算、支持高精度 获取日志 Api文档定义 前后端分离&#xff0c;人不分离 通过Apifox定义接口细节&#…

scratch3编程02-使用克隆来编写小游戏

目录 1&#xff0c;游戏效果 2&#xff0c;游戏代码块 1&#xff09;玩家 2&#xff09;障碍物 ​ 3&#xff09;箭头 ​ 4&#xff09;关卡图片 3&#xff0c;scratch文件 1&#xff0c;游戏效果 使用克隆 在这个游戏中&#xff1a; 程序开始&#xff1a;只要点击“…

和服务器建立联系——6.10山大软院项目实训1

下面介绍我如何在自己的项目中&#xff0c;根据aigc组的接口&#xff08;如下图&#xff09;&#xff0c;在Unity中和服务器建立联系并发出接受请求的&#xff1a; 这是一个通过HTTP POST方法调用的接口&#xff0c;需要发送JSON格式的数据。在Unity中实现这样的功能&#xff0…

[AI Google] TimesFM:AI预测股市价格,能否助我财务自由?

今天我偶然发现了一个名为TimesFM的模型&#xff0c;它能够预测时间序列数据。于是我心中冒出了一个大胆的想法&#xff1a;如果这个模型可以预测股票价格&#xff0c;那么我是否能借此成为股神呢&#xff1f; 介绍 TimesFM&#xff08;时间序列基础模型&#xff09;是由谷歌…

基于Spring Boot+VUE旅游管理系统

1管理员功能模块 管理员通过点击后台管理&#xff0c;进入页面可以输入用户名、密码、角色进行登录相对应操作&#xff0c;如图1所示。 图1管理员登录界面 管理员通过点击后台管理&#xff0c;进入页面可以填写首页、个人中心、用户管理、旅游方案管理、旅游购买管理、系统管…

华为---RIP路由协议的汇总

8.3 RIP路由协议的汇总 8.3.1 原理概述 当网络中路由器的路由条目非常多时&#xff0c;可以通过路由汇总(又称路由汇聚或路由聚合)来减少路由条目数&#xff0c;加快路由收敛时间和增强网络稳定性。路由汇总的原理是&#xff0c;同一个自然网段内的不同子网的路由在向外(其他…

【接口自动化测试】第一节.接口自动化测试基础和框架介绍

文章目录 前言一、接口自动化基础 1.1 接口自动化基础介绍 1.2 接口自动化测试流程 1.3 选取自动化测试用例 1.4 搭建自动化测试环境二、接口自动化测试框架 2.1 接口自动化框架设计思路 2.2 定义项目目录结构总结 前言 一、接口自动化基础 1.1…

企业中没有有效的PMC管理会是什么样子?

众所周知&#xff0c;有效的产品物料控制&#xff08;PMC&#xff09;管理对于企业的稳健发展至关重要。然而&#xff0c;如果企业忽视了PMC的重要性&#xff0c;或者其管理不到位&#xff0c;那么企业将面临一系列严重的问题&#xff0c;从生产线混乱到效益滑坡&#xff0c;甚…

16. 一个I/O项目:构建命令行程序(上)

标题 一、功能二 、接受命令行参数三、 读取文件四、重构改进模块性和错误处理4.1 二进制项目的关注分离4.2 提取参数解析器4.3 创建一个Config的构造函数4.4 传参错误处理4.5 从main中提取逻辑4.6 将代码拆分进crate 一、功能 grep 最简单的使用场景是在特定文件中搜索指定字…

大模型应用实战2——大模型知识体系、GLM4的function calling功能及agents开发

前面通过glm4作为引子&#xff0c;现在来谈大模型知识体系结构是怎么样的 两个研究方向&#xff1a;开发特定的agents/强化大模型在某个领域的能力&#xff0c;后一个的大致方法如下图 GLM4的function calling功能&#xff1a; 需要解决的问题&#xff1a;不能解决大数运算&a…

香港优才计划是坑人的吗?申请的人都在说……

大家好啊&#xff01;最近看到超多小伙伴私信我说申请香港优才被“坑”了&#xff0c;被割了一波韭菜&#x1f33f;心疼你们&#xff01;作为一个通过这个计划顺利移民香港的老司机&#x1f697;&#xff0c;我必须出来吐槽一下&#xff0c;并且把我的成功经验分享给大家&#…

天锐绿盾 | -公司电脑文件防泄密软件

天锐绿盾是一款专为企业设计的电脑文件防泄密系统&#xff0c;它结合了多种安全功能&#xff0c;旨在从源头上保障企业数据的安全。 www.drhchina.com 以下是关于天锐绿盾的详细介绍&#xff1a; 一、产品概述 天锐绿盾&#xff0c;又名绿盾信息安全管理软件&#xff0c;是一…

【达梦数据库】typeorm+node.js+达梦数据库返回自增列值

1.配置环境&#xff0c;下载依赖包 typeorm init --name test22 --database mysql typeorm-dm&#xff0c;uuid,typeorm2,修改连接信息 修改src/ data-source.ts 文件 连接dm&#xff0c;可参考刚刚安装typeorm-dm 模块中的 README.md 3.修改自增信息 /* 修改前*/PrimaryGen…

FileZilla证书过期,导致FileZilla Client联不上,或者老断开的处理

1、先到服务器上去重新生成一下证书&#xff0c;并且覆盖掉老的证书。edit--settings 输入信息&#xff0c;并且确认生成新的证书&#xff1a; 2、Client连接的时候&#xff0c;弹出证书信任&#xff0c;点击确认。 这样第一次连接&#xff0c;然后访问目录全都是好的&#xff…

解决此平台不支持虚拟化的 Intel VT-x/EPT故障问题

一、问题描述 当我们在VMware Workstation虚拟机上【启用】虚拟系统(如:Windows10)所在的虚【拟机设置】【处理器】【虚拟化引擎】下面的【虚拟化 Intel VT-x/EPT 或AMD-V/RVI(V)】内容后,在启动虚拟系统时,虚拟系统无法启动,且弹出【此平台不支持虚拟化的 Intel VT-x/EP…

算法课程笔记——单调栈单调队列

算法课程笔记——单调栈&单调队列