一句话总结:DeepSeek-Coder-V2 是基于 DeepSeek-V2 继续预训练 6T tokens(代码 60% + 数学 10% + 自然语言 30%)得到的开源代码 MoE 模型,支持 338 种编程语言和 128K 上下文,在代码和数学 benchmark 上首次让开源模型达到与 GPT-4 Turbo 同等的性能水平。

Figure 1: DeepSeek-Coder-V2 在数学和代码 benchmark 上的性能。
Intro
Motivation
开源代码模型(StarCoder、CodeLlama、DeepSeek-Coder 等)虽然取得了显著进展,但与 GPT-4 Turbo、Claude 3 Opus、Gemini 1.5 Pro 等闭源模型之间仍存在差距。DeepSeek-Coder-V2 旨在打破这个壁垒。
贡献
- 首个开源千亿参数代码模型(236B 总参数/21B 激活),在代码和数学上超越 GPT-4 Turbo 等闭源模型
- 轻量版本 16B/2.4B 激活,支持 FIM(Fill-In-Middle)代码补全
- 支持 338 种编程语言(vs DeepSeek-Coder 的 86 种),上下文长度从 16K 扩展到 128K
- 采用 GRPO 强化学习 对齐,使用编译器反馈 + 奖励模型 + 测试用例
Method 核心方法
DeepSeek-Coder-V2 从 DeepSeek-V2 中间 checkpoint 出发,通过代码为主的继续预训练,将通用 MoE 模型特化为代码智能模型。
1. 模型规模
| 版本 | 总参数 | 激活参数 | 专家数 | 架构 |
|---|---|---|---|---|
| DeepSeek-Coder-V2 (16B) | 16B | 2.4B | 2 experts | MoE (细粒度代码) |
| DeepSeek-Coder-V2 (236B) | 236B | 21B | 160 experts | MoE (继承 V2) |
2. 训练策略
- 继续预训练:从 DeepSeek-V2 的中间 checkpoint(已训 4.2T tokens)开始,继续训练 6T tokens,总 10.2T tokens
- 数据配比:代码 60% + 数学 10% + 自然语言 30%
- 16B 版本使用 FIM(Fill-In-Middle)训练(PSM 模式,FIM 率 0.5),236B 仅用 Next-Token-Prediction
- 优化器:AdamW(β1=0.9, β2=0.95, weight_decay=0.1),余弦衰减至初始值的 10%
2. 数据构建
代码数据(1,170B tokens):
- GitHub(2023 年 11 月前公开仓库):严格过滤 + 近似去重后得 821B 代码 + 185B 代码相关文字
- Common Crawl:用 fastText 多轮召回代码论坛、文档网站等,收集 70B tokens
- 再次用相同 pipeline 从 GitHub 召回高质量代码 94B
数学数据(221B tokens):
- 用 DeepSeekMath 的 pipeline 从 Common Crawl 收集
消融验证(1B 模型):新代码语料在 HumanEval 上提升 6.7%,MBPP 上提升 9.4%。
3. 长上下文扩展
用 YaRN 扩展到 128K(scale s=40, α=1, β=32),两阶段继续训练(32K + 128K)。
4. 对齐
- SFT:30 万条指令(代码 2 万 + 数学 3 万 + 通用数据),共 300M tokens
- RL:GRPO 算法。关键发现:用奖励模型信号优于用原始编译器信号。编译器只能给 0/1 反馈且测试用例覆盖不全,训练一个奖励模型更鲁棒。

Figure 3: RL 训练中奖励模型信号 vs 原始编译器信号的对比。奖励模型提供更鲁棒的训练信号,在 LeetCode 和 LeetCode-zh 上均优于编译器 0/1 反馈。
实验/评估/结果
代码生成(HumanEval + MBPP)
- DeepSeek-Coder-V2 236B:平均 75.3%,仅次于 GPT-4o 的 76.4%,在 Java 和 PHP 上最高
- DeepSeek-Coder-V2-Lite 16B:65.6%,超过 33B 的 DeepSeek-Coder(61.9%)
竞赛编程(LiveCodeBench + USACO)
- LiveCodeBench 整体 43.4%,与 GPT-4o 持平,仅次于 GPT-4-Turbo(45.7%)
- USACO 12.1%
代码补全(FIM)
- DeepSeek-Coder-V2-Lite(2.4B 激活):FIM 任务平均 86.4%,与 DeepSeek-Coder 33B(86.4%)持平
代码修复
- Aider:73.7%,超越所有模型(包括闭源)
- SWE-Bench:12.7%
- Defects4J:21.0%
数学推理
- MATH:75.7%,与 GPT-4o 持平
- AIME 2024:4/30(maj@64 可达 5/30)
- GSM8K:94.9%
通用语言能力
- Arena-Hard:65.0,远高于 DeepSeek-V2 Chat(41.6),代码/数学/推理训练提升了通用推理能力
- MMLU:79.2,BBH:83.9
- 知识密集型任务(TriviaQA 等)略逊于 DeepSeek-V2 Chat
结论
DeepSeek-Coder-V2 证明了:在强大的通用基座模型上进行大规模的代码/数学继续预训练,可以让开源模型在代码智能上达到甚至超越闭源模型的水平。但论文也坦承在指令遵循能力上与 GPT-4 Turbo 仍有差距,后续需要加强。
思考
优点
- 开源里程碑意义重大:首个开源模型在代码/数学上达到 GPT-4 Turbo 级别的性能
- 继续预训练策略高效:基于 DeepSeek-V2 的中间 checkpoint 做 domain-specific 继续训练,比从头训练经济得多
- 奖励模型优于编译器信号的发现:对 RLHF 实践有指导意义
- 语言范围扩展(86→338 种):大幅提升了实用性
- FIM + 仓库级补全:16B 版本的 FIM 能力使得轻量级本地代码补全成为可能
缺点
- SWE-Bench 表现较弱(12.7%):论文自己也指出指令遵循能力不足是主要原因
- 复杂修复任务仍是瓶颈:Defects4J 上 21% vs GPT-4o 的 26%,仍有差距
- 知识密集型任务有所下降:代码/数学训练对通用知识任务有一定负面影响
- 236B 模型的 FIM 缺失:最大模型不支持 FIM,限制了在仓库级补全场景的应用
- 奖励模型训练的偏好数据细节不足:编译器和测试用例生成的具体方法描述较少