Code Llama 简介,一种最先进的大型编码语言模型
2023 年 8 月 24 日

要点

 

更新:2024 年 1 月 29 日:发布代码 Llama 70B

  • 我们正在发布 Code Llama 70B,这是 Code Llama 系列中最大、性能最好的型号
  • Code Llama 70B 提供与之前发布的 Code Llama 型号相同的三个版本,全部免费用于研究和商业用途:
    • CodeLlama - 70B,基础代码模型;
    • CodeLlama - 70B - Python,70B 专门针对 Python;
    • Code Llama - 70B - Instruct 70B,它针对理解自然语言指令进行了微调。
 
  • Code Llama 是最先进的法学硕士,能够根据代码和自然语言提示生成代码和有关代码的自然语言。
  • Code Llama 可免费用于研究和商业用途。
  • Code Llama 构建于 Llama 2 之上,提供三种型号:
    • Code Llama,基础代码模型;
    • Codel Llama - 专门针对 Python 的 Python;
    • Code Llama - Instruct,它针对理解自然语言指令进行了微调。
  • 在我们自己的基准测试中,Code Llama 在代码任务上的表现优于最先进的公开可用的法学硕士

推荐读物

今天,我们发布了 Code Llama,这是一个可以使用文本提示生成代码的大型语言模型 (LLM)。 Code Llama 是针对代码任务的公开法学硕士的最先进技术,有可能使当前开发人员的工作流程更快、更高效,并降低学习编码人员的进入门槛。 Code Llama 有潜力用作生产力和教育工具,帮助程序员编写更强大、文档更齐全的软件。

生成式人工智能领域正在迅速发展,我们相信当今人工智能的开放方法是开发创新、安全和负责任的新人工智能工具的最佳方法。我们将在与 Llama 2 相同的社区许可证下发布 Code Llama 。

代码骆驼的工作原理

Code Llama 是Llama 2的代码专用版本,是通过在其特定于代码的数据集上进一步训练 Llama 2 来创建的,从同一数据集中采样更多数据的时间更长。从本质上讲,Code Llama 具有增强的编码功能,建立在 Llama 2 之上。它可以根据代码和自然语言提示生成代码和有关代码的自然语言(例如,“给我写一个输出斐波那契序列的函数。”)它还可用于代码完成和调试。它支持当今使用的许多最流行的语言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。

 

我们将发布四种尺寸的 Code Llama,参数分别为 7B、13B、34B 和 70B。这些模型中的每一个都使用 500B 代码令牌和代码相关数据进行训练,70B 模型则使用 1T 令牌进行训练。 7B 和 13B 基础和指令模型还经过了中间填充 (FIM) 功能的训练,允许它们将代码插入到现有代码中,这意味着它们可以立即支持代码完成等任务。

这三种模型满足不同的服务和延迟要求。例如,7B 模型可以在单个 GPU 上运行。 34B 和 70B 模型返回最佳结果并提供更好的编码辅助,但较小的 7B 和 13B 模型速度更快,更适合需要低延迟的任务,例如实时代码完成。

 

Code Llama 模型提供了具有多达 100,000 个上下文标记的稳定生成。所有模型都在 16,000 个标记的序列上进行训练,并在最多 100,000 个标记的输入上显示出改进。

除了是生成更长程序的先决条件之外,拥有更长的输入序列还可以为代码法学硕士解锁令人兴奋的新用例。例如,用户可以为模型提供来自其代码库的更多上下文,以使各代更相关。它还有助于在较大的代码库中调试场景,在这种情况下,掌握与具体问题相关的所有代码对于开发人员来说可能是一项挑战。当开发人员面临调试大量代码时,他们可以将整个代码长度传递到模型中。

此外,我们还进一步微调了 Code Llama 的两个附加变体:Code Llama - Python 和 Code Llama - Instruct。

Code Llama - Python 是 Code Llama 的语言专用变体,在 Python 代码的 100B 标记上进一步微调。因为 Python 是代码生成方面最具基准测试的语言,并且因为 Python 和PyTorchAI 社区中发挥着重要作用,所以我们相信专门的模型可以提供额外的实用性。

Code Llama - Instruct 是 Code Llama 的指令微调和对齐变体。指令调整继续训练过程,但目标不同。该模型接受“自然语言指令”输入和预期输出。这使得它能够更好地理解人们对提示的期望。我们建议在使用 Code Llama 进行代码生成时使用 Code Llama - Instruct 变体,因为 Code Llama - Instruct 已经过微调,可以用自然语言生成有用且安全的答案。

我们不建议使用 Code Llama 或 Code Llama - Python 执行一般自然语言任务,因为这两个模型都不是为遵循自然语言指令而设计的。 Code Llama 专门用于特定于代码的任务,不适合作为其他任务的基础模型。

使用 Code Llama 模型时,用户必须遵守我们的许可和可接受的使用政策。

评估 Code Llama 的性能

为了针对现有解决方案测试 Code Llama 的性能,我们使用了两个流行的编码基准:HumanEval和 Mostly Basic Python 编程 ( MBPP )。 HumanEval 测试模型根据文档字符串完成代码的能力,MBPP 测试模型根据描述编写代码的能力。

我们的基准测试表明,Code Llama 的表现优于开源、特定代码的 Llama,并且优于 Llama 2。例如,Code Llama 34B 在 HumanEval 上得分为 53.7%,在 MBPP 上得分为 56.2%,与其他状态相比最高。最先进的开放解决方案,与 ChatGPT 相当。

 

与所有尖端技术一样,Code Llama 也存在风险。负责任地构建人工智能模型至关重要,我们在发布 Code Llama 之前采取了许多安全措施。作为我们红队工作的一部分,我们对 Code Llama 生成恶意代码的风险进行了定量评估。我们创建了试图以明确意图征求恶意代码的提示,并根据 ChatGPT (GPT3.5 Turbo) 对 Code Llama 对这些提示的响应进行了评分。我们的结果发现,Code Llama 的回答更安全。

有关负责任人工智能、进攻性安全工程、恶意软件开发和软件工程领域专家的红队工作的详细信息,请参阅我们的研究论文

释放代码骆驼

程序员已经在使用法学硕士来协助完成各种任务,从编写新软件到调试现有代码。目标是使开发人员的工作流程更加高效,以便他们可以专注于工作中最以人为本的方面,而不是重复性任务。

在 Meta,我们相信人工智能模型,尤其是编码领域的法学硕士,无论是在创新还是安全方面,都从开放方法中受益最多。公开的、特定于代码的模型可以促进新技术的开发,从而改善人们的生活。通过发布 Code Llama 等代码模型,整个社区可以评估其能力、识别问题并修复漏洞。

Code Llama 的培训食谱可在我们的Github 存储库中找到。

还提供模型重量。

负责任的使用

我们的研究论文披露了 Code Llama 的开发细节以及我们如何进行基准测试。它还提供了有关模型局限性、我们遇到的已知挑战、我们采取的缓解措施以及我们打算调查的未来挑战的更多信息。

我们还更新了《负责任的使用指南》,其中包括有关负责任地开发下游模型的指南,包括:

  • 定义内容策略和缓解措施。
  • 准备数据。
  • 微调模型。
  • 评估和改进绩效。
  • 解决投入和产出层面的风险。
  • 在用户交互中建立透明度和报告机制。

开发人员应使用特定于代码的评估基准来评估其模型,并对特定于代码的用例(例如生成恶意软件、计算机病毒或恶意代码)进行安全研究。我们还建议利用安全数据集进行自动和人工评估,并根据对抗性提示进行红队。

生成式人工智能编码的未来

Code Llama 旨在为所有领域的软件工程师提供支持,包括研究、工业、开源项目、非政府组织和企业。但是,还有更多的用例需要支持,超出了我们的基础模型和指导模型所能提供的服务范围。

我们希望 Code Llama 能够激励其他人利用 Llama 2 为研究和商业产品创建新的创新工具。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐