LLaMA-Factory参数优化:学习率与batch size调优

在LLM(大语言模型)微调过程中,学习率(Learning Rate)和批大小(Batch Size)是影响模型性能和训练效率的两个关键超参数。学习率控制参数更新的步长,批大小则决定每次迭代中模型处理的数据量。本文将以LLaMA-Factory框架为例,详细介绍如何通过配置文件优化这两个参数,帮助用户快速掌握实用调优技巧。

参数配置基础

LLaMA-Factory采用YAML配置文件统一管理训练参数,用户可通过修改配置文件中的相关字段实现参数调优。所有训练相关参数定义在src/llamafactory/hparams/training_args.py中,该文件继承自Hugging Face的Seq2SeqTrainingArguments,并扩展了Ray分布式训练相关参数。

核心参数说明

参数名称 配置字段 含义 常见范围
学习率 learning_rate 每次参数更新的步长 1e-5 ~ 1e-4
批大小 per_device_train_batch_size 单设备训练批大小 1 ~ 16
梯度累积步数 gradient_accumulation_steps 梯度累积的迭代次数 1 ~ 32
学习率调度器 lr_scheduler_type 学习率衰减策略 linear, cosine, constant

学习率调优策略

学习率的选择直接影响模型收敛速度和最终性能。过大会导致训练不稳定,过小则收敛缓慢。LLaMA-Factory提供了灵活的学习率配置方式,支持不同微调场景。

不同微调方式的学习率推荐

  1. 全参数微调(Full Fine-tuning)

    learning_rate: 1.0e-5
    lr_scheduler_type: "cosine"
    num_train_epochs: 3
    
  2. LoRA微调(Low-Rank Adaptation)

    learning_rate: 1.0e-4
    lr_scheduler_type: "linear"
    num_train_epochs: 5
    

学习率调度器选择

LLaMA-Factory支持多种学习率调度策略,可通过lr_scheduler_type字段配置:

  • 线性衰减(linear):学习率从初始值线性降至0,适用于大多数微调场景
  • 余弦衰减(cosine):学习率按余弦曲线衰减,在全参数微调中表现更优
  • 常数学习率(constant):保持初始学习率不变,适用于小数据集场景

批大小优化方法

批大小的设置需要平衡内存占用和训练稳定性。在GPU内存有限的情况下,可以通过梯度累积(Gradient Accumulation)模拟大批次训练效果。

实际批大小计算

实际训练批大小 = per_device_train_batch_size × 设备数 × gradient_accumulation_steps

例如,使用2张GPU,单设备批大小为2,梯度累积步数为4,则实际批大小为: 2 × 2 × 4 = 16

配置示例

  1. 基础配置(单GPU)

    per_device_train_batch_size: 4
    gradient_accumulation_steps: 2
    # 实际批大小 = 4 × 1 × 2 = 8
    
  2. 分布式训练配置

    per_device_train_batch_size: 2
    gradient_accumulation_steps: 8
    ray_num_workers: 4  # 使用4个GPU工作节点
    # 实际批大小 = 2 × 4 × 8 = 64
    

批大小选择建议

  • GPU内存充足:增大per_device_train_batch_size,减少梯度累积步数
  • GPU内存受限:减小per_device_train_batch_size,增加gradient_accumulation_steps
  • 极端情况:启用量化训练(如4-bit/8-bit),配置示例见examples/train_qlora/llama3_lora_sft_awq.yaml

调优实战案例

以下通过两个典型场景,展示如何根据任务需求调整学习率和批大小参数。

场景1:Llama3-7B模型LoRA微调

任务:基于自定义对话数据集微调Llama3-7B模型,单GPU(24GB显存)环境。

配置文件:examples/train_lora/llama3_lora_sft.yaml

model_name_or_path: meta-llama/Llama-3-7b-hf
adapter_name_or_path: lora
task_type: TEXT_GENERATION

# 训练参数
per_device_train_batch_size: 2
gradient_accumulation_steps: 8
learning_rate: 2.0e-4
lr_scheduler_type: "cosine"
num_train_epochs: 3

场景2:Qwen2-7B模型全参数微调

任务:基于大规模文本数据全参数微调Qwen2-7B模型,4GPU(80GB显存)环境。

配置文件:examples/train_full/qwen2_5vl_full_sft.yaml

model_name_or_path: Qwen/Qwen2-7B
task_type: TEXT_GENERATION

# 训练参数
per_device_train_batch_size: 4
gradient_accumulation_steps: 2
learning_rate: 1.0e-5
lr_scheduler_type: "linear"
num_train_epochs: 5

常见问题解决

训练不稳定(Loss波动大)

  • 可能原因:学习率过高或批大小过小
  • 解决方案
    1. 降低学习率(如从1e-4调整为5e-5)
    2. 增加批大小或梯度累积步数
    3. 启用梯度裁剪(添加gradient_clipping: 1.0

内存溢出(CUDA Out Of Memory)

  • 可能原因:批大小设置过大
  • 解决方案
    1. 减小per_device_train_batch_size
    2. 启用量化训练(配置quantization_bit: 4
    3. 使用更小的模型或更长的梯度累积步数

收敛速度慢(Loss下降缓慢)

  • 可能原因:学习率过低或数据量不足
  • 解决方案
    1. 适当提高学习率(如从1e-5调整为3e-5)
    2. 增加训练轮次(num_train_epochs
    3. 调整学习率调度器(如从constant改为cosine)

总结与最佳实践

学习率和批大小的调优需要根据模型类型、数据规模和硬件条件综合考虑。以下是经过实践验证的最佳配置建议:

  1. 新任务快速验证

    • LoRA微调 + learning_rate: 1e-4 + per_device_train_batch_size: 2
  2. 生产环境部署

    • 全参数微调 + learning_rate: 1e-5 + 大批次(>32)训练
  3. 资源受限场景

    • QLoRA微调 + per_device_train_batch_size: 1 + 梯度累积(>8步)

通过合理配置学习率和批大小,结合LLaMA-Factory提供的灵活参数系统,用户可以在不同硬件条件下高效微调大语言模型,获得更优的任务性能。更多高级调优技巧可参考官方示例配置文件,所有示例均位于examples/目录下,涵盖从基础微调到分布式训练的各种场景。

掌握参数调优技巧后,建议进一步探索学习率预热(learning rate warmup)、权重衰减(weight decay)等相关参数,构建更全面的超参数优化策略。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐