
搜索文档
Coder:当大型语言模型遇到编程时-代码智能的兴起
杭州深度求索人工智能基础技术研究· 2025-02-12 17:00
报告的核心观点 - 推出DeepSeek - Coder系列开源代码模型,规模从13亿到330亿不等,在多个基准测试中表现出色,超越现有开源模型,缩小与闭源模型性能差距,且处于宽松许可下可用于研究和商业 [2][8] - 通过精心筛选数据、采用特定训练策略和架构优化等方式提升模型性能,并通过额外预训练增强自然语言理解和数学推理能力 [7][21][59] 各部分总结 1. Introduction - 大型语言模型推动代码智能发展,但开源与闭源模型存在性能差距,许多研究人员和开发者难以访问闭源模型 [6] - 推出DeepSeek - Coder系列开源代码模型,涵盖不同规模和版本,从2万亿个标记重新训练,采用仓库级数据和FIM方法,扩展上下文长度以提升性能 [7] 2. 数据收集 - 训练数据集由87%源代码、10%英语代码相关自然语言语料库和3%代码无关中文自然语言语料库组成 [11] - GitHub数据抓取和过滤:收集截至2023年2月前创建的公共仓库,应用过滤规则将数据总量减至原始大小的32.8% [12] - Dependency Parsing:解析文件间依赖关系,按依赖顺序排列文件,采用拓扑排序算法处理文件列表 [14] - Repo级重复数据删除:在代码仓库级别进行近似去重,确保仓库结构完整性 [17] - 质量筛选和去污:使用编译器、质量模型和启发式规则过滤低质量数据,实施n - 克gram过滤过程防止数据污染,总数据量798GB,共6亿个文件 [18] 3. 培训政策 3.1. 培训策略 - Next Token预测:连接文件形成固定长度条目,训练模型根据上下文预测后续标记 [21] - Fill - in - the - middle:采用FIM预训练方法,有PSM和SPM两种模式,实验表明FIM和代码完成能力存在权衡,最终选择50%的PSM率为首选训练策略 [22][25] 3.2. Tokenizer - 使用HuggingFace Tokenizer库训练字 - piece编码(BPE)分词器,词汇量大小为32,000 [27] 3.3. 模型体系结构 - 开发参数量为1.3B、6.7B和33B的模型,基于DeepSeek大型语言模型(LLM)框架构建,采用旋转位置嵌入(RoPE),33B模型集成分组查询注意力(GQA),使用FlashAttention v2加速计算 [28] 3.4. 优化 - 使用AdamW作为优化器,调整批量大小和相关参数 [29] 3.5. Environments - 使用HAI - LLM框架进行实验,采用张量并行、ZeRO数据并行和PipeDream管道并行策略,利用配备NVIDIA A100和H800 GPU的集群,采用InfiniBand互连技术 [29][30] 3.6. Long Context - 重新配置RoPE参数扩展上下文窗口,将缩放因子从1增加到4,基本频率从10000调整到100000,模型在16K令牌范围内表现最佳 [31] 3.7. Instruction Tuning - 通过基于指令的微调方法,使用高质量数据开发DeepSeek - Coder - Instruct,使用余弦调度策略,包含100步预热阶段,初始学习率为1e - 5,使用4000万个令牌的批量大小和总共20亿个令牌 [32] 4. 实验结果 4.1. 代码生成 - HumanEval和MBPP基准:DeepSeek - Coder - Base在这两个基准上取得先进性能,超越同样规模的开源模型CodeLlama - Base 34B,指令微调后超越闭源的GPT - 3.5 - Turbo模型,缩小与GPT - 4差距 [38][40] - DS - 1000基准:DeepSeek - Coder模型在所有库中实现较高准确性,能在实际数据科学工作流程中准确使用库 [41][42] - LeetCode竞赛基准:DeepSeek - Coder模型在开源编码模型中表现出色,DeepSeek - Coder - Instruct 33B是唯一优于GPT - 3.5 - Turbo的开源模型,采用Chain - of - Thought(CoT)提示可提升模型能力 [44][46] 4.2. 填写中间代码完成 - DeepSeek - Coder模型使用0.5的FIM率训练,在单行填充基准测试中表现优于StarCoder和CodeLlama,建议在代码补全工具中部署DeepSeek - Coder - Base 6.7B模型 [50][53] 4.3. 跨文件代码完成 - 使用CrossCodeEval评估模型跨文件完成能力,DeepSeek - Coder在多种语言的跨文件完成任务中始终优于其他模型,仓库级别预训练有效 [54][56] 4.4. 基于程序的数学推理 - 采用程序辅助数学推理(PAL)方法,在七个基准测试中,DeepSeek - Coder模型表现出色,33B变体潜力巨大 [57] 5. 继续从一般LLM的预培训 - 从通用语言模型DeepSeek - LLM - 7B Base进行额外预训练,生成DeepSeek - Coder - v1.5 7B,该模型在数学推理和自然语言处理能力上显著提升 [59][62] 6. Conclusion - 介绍DeepSeek - Coder系列模型,基于精心筛选的项目级代码语料库训练,扩展上下文窗口,在多种标准测试中超越现有开源代码模型 [64] - 微调后的DeepSeek - Coder - Instruct 33B在编程相关任务中优于GPT - 3.5 Turbo,额外预训练后的DeepSeek - Coder - v1.5增强了自然语言理解能力 [65][66]