Code Llama 是一个基于 Llama 2 的编码大语言模型系列,在开源模型中提供了最先进的性能、填充能力、对大型输入上下文的支持,以及编程任务的zero-shot指令跟踪能力。提供多种风格以覆盖广泛的应用:基础模型(Code Llama)、Python专门化(Code Llama - Python)和指令遵循模型(Code Llama - Instruct),每个模型分别具有7B, 13B和34B参数。所有模型都在16k个标记的序列上进行训练,并且在输入多达100000个标记时显示出改进。与 Llama 2 一样,我们在模型的微调版本中应用了相当多的安全缓解措施。本文主要是对 Code Llama 的入门了解 以及关于模型架构和参数、训练示例、微调示例、评估和安全的详细信息请参见研究论文。
一、简介
Code Llama 是最先进的LLM,能够从代码和自然语言提示中生成代码和关于代码的自然语言。 Code Llama 是免费的研究和商业用途。 Code Llama 是建立在 Llama2 之上的,有三种模型: Code Llama
:主要为一般代码合成和理解而设计的基础模型;Codel Llama - Python
:专为Python设计;Code Llama - Instruct
:旨在更安全地用于代码助理和生成应用程序,用于遵循指令和更安全的部署。
在基准测试中,Code Llama 在代码任务上的表现优于最先进的公开可用LLMs。
Meta AI 发布了 Code Llama,这是一个大型语言模型(LLM),可以使用文本提示生成代码。Code Llama 是面向公开可用的 LLMs 的最先进的代码任务,它有可能使当前开发人员的工作流程更快、更高效,并降低正在学习代码的人的进入门槛。Code Llama有潜力作为一种生产力和教育工具来帮助程序员编写更健壮、文档更完善的软件。
生成式AI领域正在迅速发展,我们认为对当今的AI采取开放的方法是开发创新、安全和负责任的新AI工具的最佳方法。
二、Code Llama 工作流程
输入类型:只输入文本。 输出类型:只输出文本。 模型架构:Code Llama及其变体是使用优化的转换器体系结构的自回归语言模型。代码Llama 7B和13B还支持填充文本生成。所有模型都使用最多16K个令牌进行了微调,并在推理时支持最多100K个令牌。 这是一个在离线数据集上训练的静态模型。以后发布的Code Llama - Instruct版本的,官方将根据社区反馈改进模型安全性。

Code Llama 是 Llama2
的代码专用版本,它是通过进一步训练 Llama2 在其代码特定数据集上创建的,从同一数据集中采样更多数据的时间更长。本质上,Code Llama 在 Llama2 的基础上增强了编码能力。它可以从代码和自然语言提示中生成代码,以及关于代码的自然语言(例如:"给我写一个输出斐波那契数列的函数"),它也可以用于代码完成和调试。它支持许多目前最流行的开发语言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash
。
Meta AI 发布了三种模型的 Code Llama,参数量分别是7B、13B和34B
。这些模型中的每一个都是用500B个代码令牌和代码相关数据进行训练的。7B和13B基本模型和指令模型也经过了中间填充(FIM)能力的训练,允许它们将代码插入到现有代码中,这意味着它们可以支持像代码完成这样的任务。
这三种模型解决了不同的服务和延迟需求。例如,7B型号可以在单个GPU上提供服务。34B模型返回最优秀的结果,并允许更好的编码辅助,但较小的7B和13B模型更快,更适合需要低延迟的任务,如实时代码完成。
Code Llama模型提供了多达100,000个上下文token的稳定生成。所有模型都在16,000个令牌的序列上进行训练,并在多达100,000个token的输入上显示改进。
除了是生成更长的程序的先决条件外,拥有更长的输入序列为代码LLM解锁了令人兴奋的新用例。例如,用户可以从他们的代码库中为模型提供更多的上下文,以使生成的代码更相关。它还有助于在更大的代码库中调试场景,在这些场景中,保持与具体问题相关的所有代码的顶部对开发人员来说可能是具有挑战性的。当开发人员面临调试大量代码时,他们可以将整个代码长度传递到模型中。
此外,Meta AI 进一步微调了 Code Llama 的两个额外变体:Code Llama - Python
和 Code Llama - Instruct
。
Code Llama - Python
是 Code Llama 的语言专用变体,对Python代码的100B标记进行了进一步的微调。因为Python是代码生成最基准的语言——而且Python和PyTorch在AI社区中扮演着重要的角色——我们相信一个专门的模型提供了额外的实用程序。
Code Llama - Instruct
是一个指令微调和对齐的 Code Llama 的变化。指令调优继续训练过程,但目标不同。模型得到"自然语言指令"输入和预期输出。这使得它能够更好地理解人类期望从提示中得到什么。
建议在使用 Code Llama 生成代码时使用 Code Llama - Instruct 变体,因为 Code Llama - Instruct 已经经过微调,可以用自然语言生成有用和安全的答案。
不建议使用 Code Llama 或 Code Llama - Python 来执行一般的自然语言任务,因为这两个模型都不是按照自然语言指令设计的。Code Llama 专门用于特定于代码的任务,不适合作为其他任务的基础模型。
在使用Code Llama模型时,用户必须遵守 Meta AI 的许可和可接受的使用政策。
三、预训练
Code Llama 和 Code Llama - Python 模型没有按照指令进行微调。他们应该促使这样的预期的答案是提示的自然延续。。
参考以下命令,使用 CodeLlama-7b 模型运行(需要将nproc_per_node设置为MP值):
torchrun --nproc_per_node 1 example_completion.py \
--ckpt_dir CodeLlama-7b/ \
--tokenizer_path CodeLlama-7b/tokenizer.model \
--max_seq_len 128 --max_batch_size 4
预训练的代码模型包括: Code Llama 模型和 Code Llama-Python 模型。
CodeLlama-7b、CodeLlama-13b、CodeLlama-34b CodeLlama-7b-Python、CodeLlama-13b-Python、CodeLlama-34b-Python
四、代码填充
Code Llama、Code Llama-Instruct 7b 和 13B 能够在给定的环境中填充代码。
参考以下命令,使用 CodeLlama-7b 模型可以用下面的命令运行填充(nproc_per_node需要设置为MP值):
torchrun --nproc_per_node 1 example_infilling.py \
--ckpt_dir CodeLlama-7b/ \
--tokenizer_path CodeLlama-7b/tokenizer.model \
--max_seq_len 192 --max_batch_size 4
预训练的填充模型包括:Code Llama 模型 和 Code Llama-Instruct 模型。
CodeLlama-7b、CodeLlama-13b CodeLlama-7b-Instruct、CodeLlama-13b-Instruct
五、微调指令模型
Code Llama-Instruct 模型根据遵循指令微调。为了获得预期的特性和性能,需要遵循chat_completion中定义的特定格式,包括INST和<
您还可以部署额外的分类器来过滤被认为不安全的输入和输出。有关如何向推理代码的输入和输出添加安全检查器的示例,请参阅 llama-recipes repo (https://github.com/facebookresearch/llama-recipes/blob/main/inference/inference.py)。
参考以下命令,使用 CodeLlama-7b-Instruct模型可以用下面的命令进行微调(nproc_per_node需要设置为MP值):
torchrun --nproc_per_node 1 example_instructions.py \
--ckpt_dir CodeLlama-7b-Instruct/ \
--tokenizer_path CodeLlama-7b-Instruct/tokenizer.model \
--max_seq_len 512 --max_batch_size 4
微调指令模型:Code Llama - Instruct
CodeLlama-7b-Instruct, CodeLlama-13b-Instruct, CodeLlama-34b-Instruct。
Code Llama及其变体是一项新技术,使用时存在风险。迄今为止进行的测试都是用英语进行的,没有涵盖,也不可能涵盖所有的场景。由于这些原因,与所有llm一样,Code Llama的潜在输出无法提前预测,并且该模型在某些情况下可能会对用户提示产生不准确或令人反感的响应。因此,在部署Code Llama的任何应用程序之前,开发人员应该执行安全测试,并根据模型的特定应用程序进行调整。为了帮助开发人员处理这些风险,更多的细节请见论文(https://github.com/facebookresearch/llama/blob/main/Responsible-Use-Guide.pdf)
六、推理
不同的模型需要不同的模型并行(MP)值:
Model | MP |
---|---|
7B | 1 |
13B | 2 |
34B | 3 |
所有模型都支持高达100,000个令牌的序列长度,但我们根据max_seq_len和max_batch_size值预先分配缓存。所以要根据你的硬件和用例来设置。
七、Code Llama 性能评估
为了测试Code Llama与现有解决方案的性能,使用了两个流行的编码基准:HumanEval 和 Mostly Basic Python Programming (MBPP)。HumanEval测试模型基于文档字符串完成代码的能力,MBPP测试模型基于描述编写代码的能力。
基准测试结果表明,Code Llama的性能优于开源、特定于代码的llm,并且优于 Llama2。例如,Code Llama 34B 在HumanEval上得分为 53.7%
,在MBPP上得分为 56.2%
,与其他最先进的开放解决方案相比是最高的,与 ChatGPT 相当。

与所有前沿技术一样,Code Llama也有风险。负责任地构建AI模型至关重要,在发布Code Llama之前,我们采取了许多安全措施。作为红客工作的一部分,我们对 Code Llama 生成恶意代码的风险进行了定量评估。我们创建了试图以明确的意图征求恶意代码的提示,并将 Code Llama 对这些提示的响应与 ChatGPT (GPT3.5 Turbo)进行了比较。我们的结果发现,Code Llama 的反应更安全。
八、发布 Code Llama
目前开发人员已经在使用 LLMs 来协助完成各种任务,从编写新软件到调试现有代码。其目标是让开发人员的工作流程更高效,这样他们就可以专注于工作中最以人为中心的方面,而不是重复的任务。
在Meta,我们相信AI模型,尤其是编码的 LLMs,从开放的方法中获益最多,无论是在创新还是在安全方面。公开可用的、特定于代码的模型可以促进新技术的发展,从而改善人们的生活。通过发布像 Code Llama 这样的代码模型,整个社区都可以评估它们的功能,识别问题,并修复漏洞。
Code Llama的训练脚本的Github代码库 :https://github.com/facebookresearch/codellama
模型权重:https://ai.meta.com/llama/
九、使用注意事项
研究报告披露了 Code Llama 开发的细节以及我们如何进行基准测试。它还提供了关于该模型的局限性、遇到的已知挑战、采取的缓解措施以及我们打算调查的未来挑战的更多信息。官方还更新了责任的使用指南,其中包括开发下游模型的指导,包括:
定义内容策略和缓解措施 准备数据 对模型进行微调 评估和改进性能 应对投入和产出层面的风险 在用户交互中建立透明度和报告机制
开发人员应该使用特定于代码的评估基准来评估他们的模型,并对特定于代码的用例(如生成恶意软件、计算机病毒或恶意代码)进行安全性研究。官方建议利用安全数据集进行自动和人工评估。(https://ai.meta.com/blog/facebooks-five-pillars-of-responsible-ai/)
十、生成式AI编码的未来
Code Llama旨在支持所有领域的软件工程师,包括研究、工业、开源项目、非政府组织和企业。但是仍然有更多的用例需要支持,而不是这些基础模型所能服务的。希望 Code Llama 能够激励其他人利用 Llama2 来为研究和商业产品创造新的创新工具。
引用
https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/ https://ai.meta.com/blog/code-llama-large-language-model-coding/ https://github.com/facebookresearch/codellama.git
关于我们
本人投身于互联网软件行业近十载,专注于WEB工程落地、大数据领域、图谱领域以及AI领域(大模型-GPT-应用落地),平时会在公众号不定期发布一些技术类和实践类的文章,欢迎关注,一起进步一起成长~
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢