Code Llama:代码的开放基础模型

【翻译 llama-2.ai 的《Code Llama: Open Foundation Models for Code》】

Meta 发布了 Code Llama,这是一系列基于 Llama 2 的大型语言模型,可在开放模型中提供最先进的性能、填充功能、对大型输入上下文的支持以及用于编程任务的零样本指令跟踪能力。Meta 提供了多种风格来涵盖广泛的应用程序:基础模型 (Code Llama)、Python 专业化 (Code Llama – Python) 和指令遵循模型 (Code Llama – Instruct),每个模型都有 7B、13B 和 34B 参数。所有模型均在 16k 个 tokens 上进行训练,并在具有多达 100k 个令牌的输入上显示出改进。7B 和 13B Code Llama 和 Code Llama – Instruct 变体支持基于周围内容进行填充。

Code Llama 在多个代码基准测试中达到了开放模型中最先进的性能,在 HumanEval 和 MBPP(Mostly Basic Python Programming) 上的得分分别高达 53% 和 55%。值得注意的是,Code Llama – Python 7B 在 HumanEval 和 MBPP 上优于 Llama 2 70B,我们所有的模型在 MultiPL-E 上都优于其他所有公开可用的模型。Meta 在允许研究和商业用途的宽松许可下发布 Code Llama。

下面我们列出了代码骆驼模型卡文档的一部分。

Code Llama 型号系列

Code Llama

Code Llama 模型构成了代码生成的基础模型。它们有三种型号尺寸:7B、13B 和 34B 参数。7B 和 13B 模型使用填充目标(第 2.3 节)进行训练,例如,适合在 IDE 中用于完成文件中间的代码。34B模型是在没有填充目标的情况下训练的。所有 Code Llama 模型都使用 Llama 2 模型权重进行初始化,并使用来自代码密集型数据集的 500B tokens 进行训练(有关详细信息,请参见第 2.2 节)。它们都经过微调,可以处理长上下文,如第 2.4 节所述。

Code Llama – Python

Code Llama – Python 模型专门用于 Python 代码生成,也有 7B、13B 和 34B 参数的大小。它们旨在研究与通用代码生成模型相比,为单一编程语言量身定制的模型的性能。Code Llama – Python 模型从 Llama 2 模型初始化,并使用 Code Llama 数据集中的 500B tokens 进行训练,使用 Python 密集型数据集进一步专门研究 100B tokens。所有 Code Llama – Python 模型都经过训练,无需填充,随后进行微调以处理长上下文。

Code Llama – Instruct(人类指令)

Code Llama – Instruct 模型基于 Code Llama,并使用额外的大约 5B tokens 进行微调,以更好地遵循人类指令。有关 Code Llama – Instruct 的更多详细信息,请参见第 2.5 节。

Dataset

我们在初始阶段使用 500B tokens 训练 Code Llama,从 Llama 2 的 7B、13B 和 34B 版本开始。如表 1 所示,Code Llama 主要在近乎重复数据删除的公开可用代码数据集上进行训练。我们还从与代码相关的自然语言数据集中获取了 8% 的样本数据。此数据集包含许多关于自然语言问题或答案中包含的代码和代码片段的讨论。

为了帮助模型保留自然语言理解技能,我们还从自然语言数据集中抽取了一小部分批次。数据通过字节对编码进行标记化,使用与 Llama 和 Llama 2 相同的标记器。初步实验表明,添加从自然语言数据集中采样的批次可以提高模型在 MBPP 上的性能。

培训详情

优化

我们的优化器是 AdamW (Loshchilov & Hutter, 2019),β1 和 β2 值分别为 0.9 和 0.95。我们使用具有 1000 个预热步骤的余弦计划,并将最终学习率设置为峰值学习率的 1/30。我们使用 4M tokens 的批量大小,每个令牌以 4,096 个tokens 的序列形式呈现。尽管在微调阶段使用比在预训练阶段更低的学习率的标准做法,但在保留 Llama 2 基础模型的原始学习率时,我们获得了最佳结果。我们将这些发现带到13B和34B模型中,并将它们的学习率分别设置为3e-4和1.5e-4。对于 python 微调,我们将初始学习率设置为 1e−4。对于 Code Llama – Instruct,我们使用 524,288 个 tokens 的批量大小进行训练,总共使用大约 5B 个 tokens 进行训练。

长上下文微调

对于长上下文微调(LCFT),我们使用2e−5的学习率,16,384的序列长度,并以θ = 106的基值重置RoPE频率。对于模型大小 7B 和 13B,批处理大小分别设置为 2M tokens,对于模型大小 34B,批处理大小分别设置为 1M tokens。默认情况下,训练持续 10,000 个梯度步长。我们观察到某些配置的下游性能不稳定,因此将 34B 型号的梯度步长数设置为 11,000,将 Code Llama 7B 的梯度步长数设置为 3,000。

你可能感兴趣的:(llama,人工智能,深度学习)