跳转到内容

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 的编码能力。

  • 基于 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 + 仓库级理解)

五类数据:

  1. 源代码:GitHub(2024 年 2 月前),92 种编程语言
  2. 文本-代码对齐数据:Common Crawl 代码文档,四阶段分层过滤(fastText)
  3. 合成数据:CodeQwen1.5 生成 + executor 验证
  4. 数学数据:来自 Qwen2.5-Math 语料
  5. 文本数据:Qwen2.5 预训练中的高质量通用文本

阶段 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 去污染

最优比例:代码:数学:文本 = 70:20:10

  • 数学和文本数据对代码性能有正向贡献
  • 但需要达到特定阈值比例才有效
  • Qwen2.5-Coder-32B-Instruct 匹配 GPT-4o(2024-08-06)的编码能力
  • 在 10+ 编码基准上达到 SOTA
  • 涵盖代码生成、补全、推理、修复
  • 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四阶段分层数据过滤

  1. 代码模型需要专门的架构 token——FIM token 和仓库级 token 是必须的
  2. 三阶段训练(文件级→仓库级→指令)优于端到端训练
  3. 数据混合比例(70:20:10)是最优的——纯代码数据反而不好
  4. fastText 的四阶段分层过滤比大模型过滤更高效——避免语义复杂性
  5. 仓库级 FIM 是让模型理解跨文件依赖的关键
  6. 多语言代码沙箱 + DPO 是对齐代码模型的最佳奖励机制