Qwen2.5-Coder — 代码专用模型的规模化
Qwen2.5-Coder: 代码专用模型的规模化
Section titled “Qwen2.5-Coder: 代码专用模型的规模化”发布日期: 2024-11 (arXiv 2409.12186) 来源: arXiv 2409.12186 工程范式: 代码专用 MoE——Qwen2.5 架构 + 5.5T 代码令牌训练 + 三阶段训练管线(文件级→仓库级→指令对齐),32B-Instruct 匹配 GPT-4o 编码能力。
Qwen2.5-Coder 的核心信念是:代码模型需要专门的训练策略,而非在通用模型上简单微调。团队构建了从数据清洗、合成数据生成、领域平衡到三阶段训练管线的完整代码模型创建体系。关键成果:32B 的编码专用模型匹配 GPT-4o 的编码能力。
关键架构决策
Section titled “关键架构决策”- 基于 Qwen2.5 架构(GQA、SwiGLU、RoPE、RMSNorm)
- 六种尺寸:0.5B / 1.5B / 3B / 7B / 14B / 32B
- 特殊 token:
<|fim_prefix|>、<|fim_middle|>、<|fim_suffix|>、<|fim_pad|>、<|repo_name|>、<|file_sep|>(Fill-in-the-Middle + 仓库级理解)
训练数据(5.5T tokens)
Section titled “训练数据(5.5T tokens)”五类数据:
- 源代码:GitHub(2024 年 2 月前),92 种编程语言
- 文本-代码对齐数据:Common Crawl 代码文档,四阶段分层过滤(fastText)
- 合成数据:CodeQwen1.5 生成 + executor 验证
- 数学数据:来自 Qwen2.5-Math 语料
- 文本数据:Qwen2.5 预训练中的高质量通用文本
三阶段训练管线
Section titled “三阶段训练管线”阶段 1:文件级预训练
- 5.2T tokens,最大序列长度 8,192
- 目标:NTP + Fill-in-the-Middle (FIM)
阶段 2:仓库级预训练
- 300B tokens 长上下文代码数据
- 上下文扩展到 32,768 tokens(RoPE base 10,000→1,000,000)
- 仓库级 FIM(文件级 FIM 的扩展)
- YARN 支持 128K tokens
阶段 3:后训练
- 粗到细微调:合成低质量多样化 → 高质量 + 拒绝采样 + SFT
- 混合训练:标准 SFT + FIM 指令样本
- DPO:多语言代码沙箱执行反馈 + LLM-as-a-judge
- 10-gram 去污染
关键数据混合比例
Section titled “关键数据混合比例”最优比例:代码:数学:文本 = 70:20:10
- 数学和文本数据对代码性能有正向贡献
- 但需要达到特定阈值比例才有效
- Qwen2.5-Coder-32B-Instruct 匹配 GPT-4o(2024-08-06)的编码能力
- 在 10+ 编码基准上达到 SOTA
- 涵盖代码生成、补全、推理、修复
四阶段过滤收益
Section titled “四阶段过滤收益”- 1.5B 模型上,过滤改进使 HumanEval+MBPP 平均从 41.6%→46.8%
| 模型 | 描述 |
|---|---|
| 0.5B/1.5B | 轻量移动端部署 |
| 7B | 标准开发者场景 |
| 32B | 旗舰,匹配 GPT-4o |
vs DeepSeek-Coder-V2(MoE,更大),Qwen2.5-Coder-32B 以密集架构在更小规模下匹配性能。vs CodeQwen1.5(前代),Qwen2.5-Coder 的三阶段训练和 5.5T 数据带来全面超越。vs GPT-4o(闭源),32B-Instruct 在编码任务上达到匹配水平。核心创新:仓库级 FIM 和 四阶段分层数据过滤。
可复用的工程经验
Section titled “可复用的工程经验”- 代码模型需要专门的架构 token——FIM token 和仓库级 token 是必须的
- 三阶段训练(文件级→仓库级→指令)优于端到端训练
- 数据混合比例(70:20:10)是最优的——纯代码数据反而不好
- fastText 的四阶段分层过滤比大模型过滤更高效——避免语义复杂性
- 仓库级 FIM 是让模型理解跨文件依赖的关键
- 多语言代码沙箱 + DPO 是对齐代码模型的最佳奖励机制