[已解决] pytorch scattergatherkernel.cu operator() block [0,0,0] thread assertion `idx_dim >= 0 failed

文章讲述了作者在处理深度学习任务时遇到的错误,由于数据输入导致one_hot函数失效。通过在本地环境下调试和数据预处理调整(将离散化bins减1),解决了服务器上大batch训练时的错误。过程揭示了环境设置、数据问题对模型训练的影响以及问题定位的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最终定位到的错误log截图:

  • 运行此python文件前,按照错误提示设置了环境变量export CUDA_LAUNCH_BLOCKING=1,防止异步导致堆栈不准确:未设置环境变量前,每次报错的行不同
  • 另一个现象是:我在本地调试时(设置小batch, 仅测前2个step)是没有错误的,然后提交到服务器(大batch)就会报错。说明与输入的数据有关
    在这里插入图片描述

然后我在本地小batch调试时添加了pdb, 定位到了出错的step, 以及出错的行—就是上面截图343行,

  • 逐个检查这行的变量,发现是执行F.one_hot(depth_bin, 75).float()时出错
  • 其中depth_bin变量的shape维度=16无误,是变量中的值出现问题,16个数中有数字为75,从而无法执行F.one_hot(depth_bin, 75)出错

解决方案:我这个问题中,在加载数据时,将离散化时的bins从75修改为75 - 1个,这样离散化之后的数据为0,1,2,...,73,74,即可继续使用上面的F.one_hot(, 75)

d_bins = np.linspace(1.4, 3.0, num = 75 - 1)
depth_bin = np.digitize(depth, d_bins)

由于服务器卡比较少(提交个任务需要等10个小时以上),本地的调试机器又非常卡(调试一次需要10min。。。)这个问题一天多才解决,还是后来换了其他不卡的调试机才能快速定位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值