CUDA ERROR: device-side assert triggered at问题的解决

最近在用深度学习模型跑自己的数据集时遇到了如标题所示的错误,然后在网上搜索了很多方法,发现是计算dice_loss时出错了,于是检查输入输出以及label标签

  1. torch.isnan(label_batch).any()torch.isinf(label_batch).any()函数确定了outputs和label_batch中都没有nan和inf,输出都为False
  2. 于是再次根据搜索得到的信息,在运行命令前加了CUDA_LAUNCH_BLOCKING=1,看能不能看到具体问题,然后报错是这样的
    /pytorch/aten/src/THCUNN/SpatialClassNLLCriterion.cu:104: void cunn_SpatialClassNLLCriterion_updateOutput_kernel(T *, T *, T *, long *, T *, int, int, int, int, int, long) [with T = float, AccumT = float]: block: [0,0,0], thread: [294,0,0] Assertion t >= 0 && t < n_classes failed.
    THCudaCheck FAIL file=/pytorch/aten/src/THCUNN/generic/SpatialClassNLLCriterion.cu line=127 error=710 : device-side assert triggered
    这说明我的label有问题,有不是0或者1的
  3. 于是输出label的标签查看有没有不是0或者1的,但是!!!输出老是简略,看不到完整的256*256信息!!然后走了很多弯路,耽误了一天时间,最后根据这篇文章 将labe的标签改了
    在dataset里面的__getitem__函数里面读取label并处理的地方加了
num_class = 2
ignore_label = 0
label[label >= num_class] = ignore_label
label[label <= 0] = ignore_label

就解决了这个问题
根据自己的需求改ignore_label和num_class
我的是二分类问题,所以设置为:

num_class = 2
ignore_label = 0

其实昨天就看到这篇文章了,但是不知道加在哪里,今天再次看到然后仔细看了评论,加在了dataset里面的__getitem__函数里,就解决了这个问题,改代码还是得沉下心来,不能急躁。

来源:尤克r

物联沃分享整理
物联沃-IOTWORD物联网 » CUDA ERROR: device-side assert triggered at问题的解决

发表评论