GPU训练深度学习集成模型时state_dict()报'destination'参数错误
问题背景
- 训练由两个深度学习模型构成的集成模型,M1 Mac环境下运行全程正常,可顺利保存
.pth格式模型文件 - 切换至GPU环境后训练流程触发错误,尝试更换PyTorch版本至1.12.0,问题仍未解决
完整报错信息
[请粘贴具体报错日志内容]
关键代码片段
# 示例集成模型定义 class EnsembleModel(nn.Module): def __init__(self, model_a, model_b): super().__init__() self.model_a = model_a self.model_b = model_b def forward(self, x): output_a = self.model_a(x) output_b = self.model_b(x) return torch.cat([output_a, output_b], dim=1) # 模型保存逻辑 torch.save(ensemble_model.state_dict(), "ensemble_model.pth")
排查与解决建议
- 强制设备一致性:确保集成模型的所有子模块、输入张量都通过
.to(device)显式指定GPU设备,M1 Mac默认用CPU/Metal,GPU环境无自动设备迁移逻辑 - 统一模型保存/加载的设备映射:GPU环境下保存模型后,若后续在不同设备加载,需添加
map_location参数;若保存时模型在GPU,加载到CPU需写torch.load("xxx.pth", map_location='cpu'),反之同理 - 排查GPU显存溢出:集成模型参数总量大,GPU显存不足会导致保存阶段崩溃,可尝试缩小batch size、启用梯度累积或使用半精度训练
- 验证CUDA与PyTorch版本兼容性:PyTorch 1.12.0支持CUDA 10.2、11.3、11.6,需确认GPU环境的CUDA版本与PyTorch匹配
- 检查子模型算子兼容性:部分自定义层或小众算子在CPU/Metal环境可运行,但CUDA后端无对应实现,需逐一排查子模型的forward方法,替换为CUDA支持的算子
内容的提问来源于stack exchange,提问作者divine_nature
相关产品推荐
相关产品推荐

