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