查找问题时,大多数解决方式是调小 batchsize 和换一张卡跑,都尝试过之后发现没有解决。
之后又查到了一些解决方式:
-
cuDNN 内部错误:
- 尝试升级到最新版本的 cuDNN,以确保与使用的 PyTorch 版本兼容。
- 检查 CUDA 和 cuDNN 版本是否与 PyTorch 兼容,有时版本不匹配会导致问题。
- 考虑调整 cuDNN 的配置参数,如设置
torch.backends.cudnn.deterministic = True
或torch.backends.cudnn.enabled = False
。
-
处理断言错误:
- 检查代码中涉及的
Loss.cu
文件的相关部分,确保输入数据的范围在预期范围内。 - 确保在计算损失函数时,输入数据的取值范围符合函数的要求。可能需要检查数据预处理或损失函数的实现。
- 检查代码中涉及的
-
调试和日志:
- 在出现问题的地方添加日志记录或调试语句,以查看输入数据的值,有助于找出导致错误的具体原因。
- 尝试使用 PyTorch 的内置调试工具,如
torch.autograd.set_detect_anomaly(True)
,以帮助找出反向传播过程中的问题。
第一种尝试之后没有解决,然后看到第二种,损失函数的影响,然后想到了自己设置的是BCELoss,修改之后就解决问题了。
解决:BCELoss() 改成 BCEWithLogitsLoss()