解决DDP的参数未参与梯度计算

将find_unused_parameters改成False之后,如果出现模型有些参数未参与loss计算等错误。

可以用环境变量来debug查看log。

export TORCH_DISTRIBUTED_DEBUG=DETAIL

代码上可以用以下方法查看。

# check parameters with no grad
for n, p in model.named_parameters():
    if p.grad is None and p.requires_grad is True:
        print('No forward parameters:', n, p.shape)

可以将这些未用到的参数注释掉。

或者,乘以0与模型的loss进行相加,使未用到的参数也参入了loss计算。

for p in self.parameters():
    loss += 0.0 * p.sum()

你可能感兴趣的:(python,深度学习,机器学习)