核心问题确认

错误明确指出 Parameter indices which did not receive grad(索引 244、245、286、287、330、331、374、375),这些参数属于模型中定义但未用于损失计算的模块(如 frequency_enhancer、ffm)。在分布式训练中,所有参数必须参与梯度计算,否则 DDP 无法同步梯度,导致崩溃。

步骤 1:定位 DDP 初始化位置

打开 ultralytics/engine/trainer.py 文件,搜索 DistributedDataParallel 或 DDP,找到模型包装为 DDP 的代码。通常在 Trainer 类的 _do_train 或 init_model 方法中,类似:

# 原始代码(示例)
self.model = DistributedDataParallel(self.model, device_ids=[self.args.device])

步骤 2:添加 find_unused_parameters=True 参数

修改 DDP 初始化代码,允许未使用的参数:

# 修改后
self.model = DistributedDataParallel(
    self.model,
    device_ids=[self.args.device],
    find_unused_parameters=True  # 关键:允许未使用的参数,跳过梯度检查
)

步骤 3:保存并重新训练

此参数会让 DDP 忽略未使用的参数,不再检查梯度同步,直接解决报错。

具体问题具体分析,解决思路是允许未使用的参数,跳过梯度检查

找不到代码位置,可以给大模型来定位具体的位置,结合实际情况来进行解决

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐