📖标题:OpenCoder: The Open Cookbook for Top-Tier Code Large Language Models
🌐来源:arXiv, 2411.04905
🌟摘要
🔸用于代码的大型语言模型 (LLM) 在各个领域都变得不可缺少,包括代码生成、推理任务和代理系统。虽然开放访问代码llm越来越多地接近专有模型的性能水平,但适合严格科学研究的高质量代码LLM,特别是那些具有可重复数据处理管道和透明训练协议的代码LLM仍然有限。稀缺性是由于各种挑战,包括资源限制、伦理考虑以及保持模型先进竞争优势。
🔸为了解决这一差距,我们引入了OpenCoder,这是一个顶级代码LLM,它不仅实现了与领先模型相当的性能,而且可以作为研究社区的“开放食谱”。与大多数先前的工作不同,我们不仅发布了模型权重和推理代码,还发布了可重复的训练数据、完整的数据处理管道、严格的实验消融结果以及开放科学研究的详细训练方案。
🔸通过这个全面的发布,我们确定了构建顶级代码LLM的关键因素:(1)代码优化的数据清理启发式规则和重复数据删除方法,(2)回忆与代码相关的文本语料库,(3)退火和监督微调阶段的高质量合成数据。通过提供这一开放水平,我们的目标是扩大对顶级代码LLM的各个方面的访问,OpenCoder作为一个强大的模型和一个用于加速研究的开放基础,并使代码AI的可重现进步成为可能。主页见https://opencoder-llm.github.io
🛎️文章简介
🔸研究问题:开源代码大语言模型(Code LLM)在性能上与顶尖私有模型存在差距,主要由于训练数据的不透明性限制了研究社区的发展。
🔸主要贡献:论文提出了OpenCoder,一个开源的代码大语言模型,并通过详细的数据处理和训练方法,显著提升了模型在多个代码生成评估基准上的表现。
📝重点思路
🔺相关工作
🔸代码大语言模型:开源模型包括CodeGen、StarCoder、CodeLlama和DeepSeekCoder等。
🔸代码基准:根据给定的问题描述自动创建编程解决方案,涉及代码检索、代码翻译、代码效率以及具有挑战性的存储库级代码完成任务。
🔸开源大语言模型:包括模型如LLaMA、Mistral、Qwen和ChatGLM,数据包括WildChat和LMSYS-Chat-1M等,以及许多训练细节。
🔺预训练数据构建
🔸预训练阶段:强调了数据清理的重要性,去除非信息性数据,如纯十六进制代码和过短的代码片段。
🔸退火阶段:需要高质量数据,对于进一步增强模型能力至关重要,因此进一步合并了算法语料库和合成数据。
🔺预训练
🔸模型架构:有1.5B和8B两个版本,都使用SwiGLU激活函数,词汇量为96640。
🔸训练细节:数据集包含中文和英文,以及607种编程语言,都采用了WSD训练计划。
🔺后训练数据
🔸开源指令:从网站上收集了开源指令语料库,并通过LLM提取与代码相关的片段,剔除低质量响应。
🔸教学合成指令:为了确保指令调整数据集的多样性和丰富性,使用评分器模型识别高质量种子数据。
🔸包相关指令:预训练数据中存在大量过时的包,因此通过外部文档合成了工具使用指令。
🔸大规模多样化指令:为了增加指令数据集的多样性,创建了一个大规模指令数据合成框架。
🔺两阶段微调
🔸阶段1:侧重于合成与理论计算机科学相关的问答对,如算法、数据结构和网络原理,让模型首先获取广泛能力。
🔸阶段2:从理论知识转移到实际编码任务,使用GitHub上的高质量代码创建了一个数据集,旨在提高模型生成和使用代码的能力。
💡个人观点
论文的核心在于提高各阶段训练数据的质量和任务分布,并做好每阶段的能力学习。
🧩附录