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

最终定位到的错误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。。。)这个问题一天多才解决,还是后来换了其他不卡的调试机才能快速定位

猜你喜欢

转载自blog.csdn.net/weixin_44220976/article/details/135868216