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 的 debu