首页
/ XTuner 学习率调度器配置问题解析

XTuner 学习率调度器配置问题解析

2025-06-13 17:04:10作者:毕习沙Eudora

问题背景

在XTuner项目进行多轮次训练时,发现学习率调度器未能按预期工作。具体表现为当训练超过1个epoch时,余弦学习率调度器在第一个epoch结束后就停止了调整。这个问题源于学习率调度器中end参数配置不当。

技术分析

XTuner默认使用基于迭代的训练循环(TrainLoop),其max_epochs参数始终设置为1。然而在实际多轮次训练场景中,正确的end参数值应为max_epochs * epoch_length。当前配置导致学习率调度器过早结束调整。

问题表现

当配置文件中设置max_epochs=3时,可以观察到:

  1. 第一个epoch期间学习率按预期调整
  2. 后续epoch中学习率保持不变,不再进行调整
  3. 训练日志显示学习率曲线在第一个epoch后变为水平线

解决方案

正确的配置方式应该是将余弦学习率调度器的T_max参数改为end参数,并设置为max_epochs值。修改示例如下:

param_scheduler = [
    dict(
        type=LinearLR,
        start_factor=1e-5,
        by_epoch=True,
        begin=0,
        end=warmup_ratio * max_epochs,
        convert_to_iter_based=True),
    dict(
        type=CosineAnnealingLR,
        eta_min=0.0,
        by_epoch=True,
        begin=warmup_ratio * max_epochs,
        end=max_epochs,  # 修改此处
        convert_to_iter_based=True)
]

影响范围

此问题影响所有使用多轮次训练的场景,特别是:

  1. 使用余弦退火学习率调度器的配置
  2. 训练轮次大于1的情况
  3. 依赖学习率动态调整效果的微调任务

最佳实践建议

  1. 在多轮次训练配置中,显式设置end参数而非T_max
  2. 训练前检查学习率调度器的配置是否正确
  3. 训练过程中监控学习率变化曲线,确保符合预期
  4. 对于自定义训练配置,注意参数名称的统一性

总结

学习率调度是深度学习训练中的关键环节,正确的配置能显著影响模型性能。XTuner项目中这一配置问题的修复,确保了学习率在多轮次训练中能够按预期进行调整,为模型训练提供了更可靠的优化过程。

登录后查看全文
热门项目推荐
相关项目推荐