backbone 添加SimAm、Coordtt 之类得注意力机制报错记录

文章讨论了在PyTorch中遇到的关于运行时错误,由于CUDA的非确定性导致的。解决方法包括临时关闭确定性算法或使用警告选项。提及了在YOLOv系列(尤其是YOLov7和YOLov8)中的应用和torch.backends.cudnn.deterministic的区别。
摘要由CSDN通过智能技术生成

报错:

Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass RuntimeError: adaptive_avg_pool2d_backward_cuda does not have a deterministic implementation, but you set 'torch.use_deterministic_algorithms(True)'. You can turn off determinism just for this operation, or you can use the 'warn_only=True' option, if that's acceptable for your application.

翻译:Variable._execution_engine.run_backward( # 调用C++引擎以运行向后传递 运行时错误:adaptive_avg_pool2d_backward_cuda没有确定性实现,但您设置了“torch.use_deterministic_algorithms(True)”。

分析:

因为pytorch是基于CUDA API的,CUDA在不同设备上的伪随机数生成器不会是完全一样的,这是由设备决定的,使用了一些CUDA本来就不会产生确定性结果的操作,如AtomicAdd、上采样(torch.nn.Upsample,Unet中常用到)等。较新版本的pytorch现在支持对这种操作的检查,只需要在代码中加入一行torch.use_deterministic_algorithms(True)。这句话相当于自检,只要使用了不可复现的运算操作,代码就会自动报错。

所以问题不大,无非是保证可复现性

解决:

可以仅对此操作关闭确定性,也可以使用“warn_only=True”选项(如果应用程序可以接受)。

该提示提醒的很清楚,

1.在yolov系列中的trainer.py中cctrl+F 找到该内容后的找到该项,可以把torch.use_deterministic_algorithms(True)改为torch.use_deterministic_algorithms(False),实现禁用确定性算法模式

或者调用warn_only=True 

with torch.deterministic(True, warn_only=True)

2.

YOLOv7 trainer.py新版本可能没有,再检查下model.py、torch_utils.py

YOLOv8路径为:ultralytics/yolo/utils/torch_utils.py

解释:

torch.use_deterministic_algorithms()函数来check 是否使用不确定性算法。
上述参数设置为True时:torch.use_deterministic_algorithms(True) 将torch中的不确定性算法用已有的确定性算法替代,若没有替代算法时报错。
该语句与torch.backends.cudnn.deterministic = True的区别:
torch.backends.cudnn.deterministic = True只控制cuda卷积的确定性
torch.use_deterministic_algorithms(True)会check所有torch操作的确定性
 

You can also file an issue at https://github.com/pytorch/pytorch/issues to help us prioritize adding deterministic support for this operation.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值