介绍
嗨,科技爱好者们!今天,我很兴奋地带你进入建立和训练大规模语言模型(LLMs)的迷人世界。我们将深入探讨一个令人惊叹的模型,名为StarCoder,它是BigCode项目的一部分——这是一个在AI和代码开发交叉领域的开放倡议。
在开始之前,我要感谢Hugging Face的机器学习工程师Loubna Ben Allal,她在“为代码构建大语言模型”上的数据小时会议上的演讲成为本文的基础。现在,请系好安全带,让我们探索这一前沿技术背后的魔力!
学习目标:
- 通过BigCode合作,强调透明和道德开发,掌握在编码AI中的开放和负责任的实践。
- 了解LLM训练的基本要点:数据选择、架构选择和高效并行,利用Megatron-LM等框架。
- 通过HumanEval等基准评估LLM,借助BigCode评估工具,实现有效的模型比较。
- 使用VS Code扩展等工具,实现LLM在开发环境中的实际集成,与道德的AI利用相一致。
释放大语言模型在代码中的力量
那么,关于这些大规模语言模型有什么热议呢?它们就像虚拟的编码巫师,可以完成代码片段、生成整个函数,甚至可以提供修复错误的见解——所有这些都是基于自然语言描述的。我们今天的主角,StarCoder,拥有惊人的155亿个参数,并展示了出色的代码完成能力和负责任的AI实践。
数据筛选和准备:成功的基石
好了,让我们谈谈秘密酱料——数据筛选。我们的旅程始于The Stack数据集,这是一个横跨300多种编程语言的GitHub代码的大规模汇编。然而,数量并不总是胜过质量。我们精选了86种相关的语言,优先考虑了流行度和包容性,同时删除了过时的语言。
但是这里有个问题:经过广泛的清理,我们最终只得到了约800GB的80种编程语言的代码。我们通过一种称为去重的过程来删除自动生成的文件和重复的内容,以确保模型不会记住重复的模式。这种做法注重数据集的质量而不是数量,并为有效训练铺平了道路。
标记化和元数据的训练:破解代码
接下来是标记化!我们将我们的干净文本数据转换为模型可以理解的数值输入。为了保留存储库和文件名等元数据,我们在每个代码片段的开头添加了特殊标记。这些元数据就像模型的路线图,指导它如何在不同的编程语言中生成代码片段。
我们还巧妙地处理了GitHub问题、git提交和Jupyter笔记本等内容。所有这些元素都被结构化为特殊标记,为模型提供上下文。这些元数据和格式化后来在模型的性能和微调中起到关键作用。
StarCoder的架构选择:创造新高度
StarCoder的架构是一个设计选择的杰作。我们追求速度和成本效益,因此选择了1550亿个参数,在实力和实用性之间取得了平衡。我们还采用了多查询注意力(MQA)技术,这种技术可以高效处理更大批量的数据,并在不损失质量的情况下加快推理时间。
但创新并没有止步于此。我们引入了大上下文长度,得益于巧妙的闪光注意力。这使我们能够扩展到8000个标记,保持效率和速度。如果你想知道双向上下文,我们找到了一种方法让StarCoder能够理解从左到右和从右到左的代码片段,提高了它的多功能性。
训练和评估:让StarCoder接受考验
现在,让我们谈谈训练。我们利用了512个GPU的强大计算能力,并使用Tensor Parallelism(TP)和Pipeline Parallelism(PP)确保StarCoder适应计算难题。我们使用Megatron-LM框架进行了24天的训练,结果令人印象深刻。但是训练只是旅程的一半,评估才是检验成果的关键。
我们将StarCoder与HumanEval基准进行了比较,模型完成代码片段,其解决方案在各种场景中进行测试。StarCoder表现出色,达到了33.6%的一次通过率。尽管像WizardCoder这样的新模型已经领先,但StarCoder在多语言领域的表现值得称赞。
工具和生态系统:超越StarCoder
我们的旅程不会完整,如果不突出展示围绕StarCoder构建的工具和生态系统。我们发布了一个VS Code扩展,提供代码建议、完成甚至代码归属。您还可以找到适用于Jupyter、VIM和EMACs的插件,以满足开发人员的各种喜好。
为了简化评估过程,我们创建了BigCode评估工具包,这是一个简化基准评估和单元测试、确保可复现性的框架。我们还推出了BigCode排行榜,提供透明度,允许社区评估各种模型和语言的性能。
走向未来:社区驱动的努力
到现在为止,大型语言模型用于代码的世界已经明显发展。BigCode生态系统继续蓬勃发展,包括OctoCoder、WizardCoder等模型,每个模型都在StarCoder奠定的基础上不断发展。这些模型不仅仅是工具,它们是协作创新和开源开发的证明。
所以,这就是StarCoder和BigCode社区如何推动代码生成领域可能性的故事。从细致的数据整理到先进的架构选择和尖端工具,这是一个由激情和对塑造AI在代码开发领域未来的承诺推动的旅程。当我们踏入未来时,谁知道社区将会揭示什么令人难以置信的创新呢?
今天的技能,明天的LLMs
以下是我们将在未来建立和训练大型语言模型的旅程中继续发展的内容:
- 训练设置和框架:训练如此庞大的模型需要并行性来加快过程。我们使用了3D并行性,即数据、张量和管道并行性的结合。这种方法使我们能够在512个GPU上训练24天,取得最佳结果。虽然我们主要使用了Megatron-LM框架,但我们也介绍了其他框架,如Hugging Face Trainer与Deepspeed集成,以实现更易访问和更短的微调过程。
- 评估性能:评估代码模型并不是一项简单的任务。我们讨论了HumanEval和Multi-PLE等基准,这些基准衡量了模型生成通过特定测试的代码解决方案的能力。这些基准帮助我们了解模型在各种编程语言和上下文中的性能。我们还推出了BigCode评估工具包,这是一个通过提供一致的环境和可复现的结果来简化评估过程的框架。
- 工具和生态系统:我们探索了BigCode生态系统提供的工具和扩展。从VS Code扩展到在Jupyter笔记本、VIM、EMACs等方面的支持,我们正在让开发人员更轻松地将StarCoder及其后代集成到他们的工作流程中。StarCoder Plus和StarChart的发布进一步扩展了我们模型的功能,使它们更加多功能和有用。
- 负责任的AI和许可:根据负责任的AI实践,我们强调模型使用中的伦理准则。我们的模型基于CodeML OpenRAIL许可证构建,该许可证促进免版税使用、分发衍生物和伦理考虑。我们致力于确保我们的模型是有益于社会并负责任使用的强大工具。
结论
在本文中,我们深入探讨了为代码构建大型语言模型(LLMs)的领域,探索了它们令人印象深刻的代码补全能力。Hugging Face和ServiceNow共同开展的协作BigCode项目被提出,作为开放和负责任的代码模型典范,解决了数据隐私和可复现性等挑战。
我们的技术旅程涵盖了数据整理、像StarCoder这样的模型的架构决策以及使用并行技术的训练方法。模型评估,以HumanEval和Multi-PLE等基准为标志,展示了各种编程语言之间的性能比较,其中StarCoder版本处于领先地位。
关键要点:
- HuggingFace和ServiceNow的BigCode合作促进了负责任的代码模型开发。
- 以StarCoder为例,我们涵盖了各种训练方面,包括数据准备、架构和高效的并行性。
- 我们讨论了使用HumanEval和Multi-PLE等基准进行AI模型评估。