GPU_lecture_train

24 downloads 0 likes on ModelScope updated

Model card

Qwen2.5-3B 模型微调指南

本项目使用LoRA方法对Qwen2.5-3B-Instruct模型进行微调。

环境要求

pip install torch transformers datasets peft accelerate bitsandbytes

具体版本:

  • torch >= 2.0.0
  • transformers >= 4.36.0
  • datasets >= 2.14.0
  • peft >= 0.7.0
  • accelerate >= 0.24.0

使用步骤

1. 训练模型

python train_qwen.py

训练过程中会:

  • 自动将数据集分为90%训练集和10%验证集
  • 使用LoRA进行高效微调(节省显存)
  • 每50步保存一个checkpoint
  • 每50步评估一次验证集
  • 最终保存最佳模型

训练参数说明:

  • Batch size: 4
  • Gradient accumulation: 4(等效batch size = 16)
  • Learning rate: 2e-4
  • Epochs: 3
  • LoRA rank: 8
  • 使用FP16混合精度训练

预计显存占用: 约10-15GB(使用单卡A100/V100/3090等)

2. 测试模型

python inference_qwen.py

这个脚本会:

  • 加载微调后的模型
  • 运行几个示例问题
  • 进入交互模式,可以自由提问

3. 合并LoRA权重(可选)

如果需要部署,建议合并LoRA权重:

python merge_lora.py

合并后的模型可以直接用transformers加载,无需PEFT库。

文件结构

.
├── train_qwen. py              # 训练脚本
├── inference_qwen.py          # 推理测试脚本
├── merge_lora.py              # 权重合并脚本
├── qwen_finetuned_model/      # 训练输出目录
│   ├── checkpoint-50/         # 中间checkpoint
│   ├── checkpoint-100/
│   └── final_model/           # 最终模型(LoRA权重)
└── qwen_merged_model/         # 合并后的完整模型(运行merge_lora.py后生成)

训练技巧

调整学习率

如果loss下降太慢,可以增加学习率到5e-4;如果不稳定,降低到1e-4。

调整LoRA参数

  • r: 增加到16可以提升性能,但会增加显存占用
  • lora_alpha: 通常设置为r的2-4倍

显存不足

如果显存不足,可以:

  1. 减小batch size到2或1
  2. 增加gradient_accumulation_steps
  3. 减小MAX_LENGTH到256
  4. 使用int8量化:添加load_in_8bit=True

过拟合问题

如果训练集loss很低但验证集loss不降:

  1. 减少训练epochs
  2. 增加weight_decay
  3. 增加lora_dropout

性能监控

训练过程中可以观察:

  • loss: 训练损失,应该持续下降
  • eval_loss: 验证损失,用于判断是否过拟合
  • learning_rate: 学习率变化(使用cosine调度)

常见问题

Q: 为什么使用LoRA而不是全参数微调? A: LoRA只训练少量参数(约1-2%),大大降低显存需求和训练时间,同时效果接近全参数微调。

Q: 训练需要多长时间? A: 390条数据,3个epoch,在A100上约需要10-20分钟。

Q: 如何评估模型效果? A: 运行inference_qwen.py测试模型回答,或者计算验证集上的perplexity。

Q: 可以继续训练吗? A: 可以,在TrainingArguments中设置resume_from_checkpoint参数。