Mini Qwen 1B 大模型从头训练全流程经验总结
本文分享了基于 Mini Qwen 1B 大模型进行预训练、SFT 微调及 DPO 偏好对齐的完整实践经验。项目开源地址:https://github.com/qiufengqijun/mini_qwen
训练配置概览
本次实验在 6 张 H800 GPU 上进行,主要参数配置如下:
| 阶段 | 数据量 | 训练时间 (h) | Epoch | Batch Size | 学习率 | 序列长度 | 训练策略 |
|---|---|---|---|---|---|---|---|
| 预训练 | 16B token | 25 | 1 | 1152 | 1e-4 | 1024 | zero-2 |
| SFT | 9M 条 | 43 | 3 | 1152 | 1e-5 | 1024 | zero-2 |
| DPO | 60K 条 | 1 | 3 | 384 | 5e-7 | 1024 | zero-2 |
技术栈与工具
全部流程采用以下工具链进行分布式训练与加速:
- 分布式框架:Accelerate + DeepSpeed
- 注意力机制:Flash Attention 2(显著提升训练速度)
- 预训练:Hugging Face Trainer(参考 LLaMA-Factory 实现序列打包)
- SFT 微调:TRL 库中的 SFTTrainer
- DPO 对齐:TRL 库中的 DPOTrainer
一、预训练阶段 (Pre-training)
数据处理
预训练使用了 16B token 的数据集。在数据预处理中,采用了序列打包(Sequence Packing)技术以提高显存利用率。
遇到的问题与分析
-
复读现象:
- 即使更改了序列打包方式,模型仍出现复读现象。
- 对比官方 Qwen2.5-0.5B 和 Qwen2.5-1.5B 发现复读严重程度近似,但 Instruct 版本较轻。
- 原因推测:预训练数据多样性不足,标点符号过多导致模型误判其重要性;Instruct 版本因包含人类偏好的格式化结构,更容易理解用户问题从而减轻复读。


