PyTorch Lightning在CUDA正常,MPS/CPU报多优化器仅支持手动优化错误
问题原因
PyTorch Lightning对多优化器的自动优化支持,在不同设备后端的实现逻辑存在差异:
- CUDA作为成熟的主流后端,PL的自动优化模块对多优化器场景做了兼容处理,允许在自动优化模式下运行多优化器代码。
- MPS是苹果推出的新后端,CPU后端的多优化器自动优化逻辑则更严格——PL认为这类设备上多优化器的自动梯度同步、优化步骤调度容易出现一致性问题,因此强制要求必须启用手动优化模式,否则就会抛出你看到的错误。
解决方法
方法1:切换为手动优化(官方推荐)
按照错误提示的步骤修改代码,这是最稳妥的方案:
- 在你的LightningModule类的
__init__方法中添加:self.automatic_optimization = False - 重写
training_step方法,手动获取优化器并执行优化步骤:def training_step(self, batch, batch_idx): opt1, opt2 = self.optimizers() # 第一个模型的前向传播与优化 loss1 = self.model1(batch) self.manual_backward(loss1) opt1.step() opt1.zero_grad() # 第二个模型的前向传播与优化 loss2 = self.model2(batch) self.manual_backward(loss2) opt2.step() opt2.zero_grad() # 记录损失(可选) self.log("loss1", loss1) self.log("loss2", loss2)
方法2:检查并升级PyTorch Lightning版本
部分旧版PL对MPS后端的支持不完善,升级到最新稳定版可能修复设备间的这个差异,让你无需修改代码就能在MPS/CPU上运行。执行升级命令:
pip install --upgrade pytorch-lightning torch torchvision
注意:升级后需要测试代码是否依然在CUDA上正常运行,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者math_guy
相关产品推荐
相关产品推荐

