RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

在进行多卡分布式训练时遇到RuntimeError,错误表明模型中有在forward函数中未使用的参数。解决方案是确保只在__init__方法中定义并使用到的模块,注释掉未在forward中调用的模块。这样可以避免DistributedDataParallel模块无法定位到forward函数的输出张量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:非分布式训练时没有问题,使用多卡分布式训练时报错

Error message
RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss. You can enable unused parameter detection by (1) passing the keyword argument find_unused_parameters=True to torch.nn.parallel.DistributedDataParallel; (2) making su re all forward function outputs participate in calculating loss. If you already have done the above two steps, then th e distributed data parallel module wasn’t able to locate the output tensors in the return value of your module’s forwar d function. Please include the loss function and the structure of the return value of forward of your module when rep orting this issue (e.g. list, dict, iterable).

原因:

模块的__init__方法中存在一些带参数的模块,但是在forward函数中没有使用。

解决

对于forward函数不使用的模块,在__init__方法中注释掉即可。也就是说用什么模块就定义哪个模块,不要定义一些模块但不去使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值