The Llama 3 Herd of Models

文章标题: Llama 3 模型家族
作者/机构: Llama Team, AI @ Meta

A1 主要贡献

本文介绍了一套名为 Llama 3 的新型基础模型。Llama 3 模型家族原生支持多语言、编码、推理和工具使用。其中最大的模型是一个拥有4050亿(405B)参数的密集型 Transformer,支持高达 128K tokens 的上下文窗口。本文通过广泛的实证评估,发现 Llama 3 在众多任务上达到了与 GPT-4 等顶尖语言模型相当的质量。

核心研究目标与创新点:
作者认为,开发高质量基础模型有三个关键杠杆:数据、规模和复杂性管理。Llama 3 的开发过程围绕这三点进行了优化:
1. 数据质量与数量提升:与 Llama 2 相比,Llama 3 在预训练和后训练阶段的数据数量和质量上都得到了显著提升。
* 预训练:预训练使用了约 15T 的多语言 tokens,远超 Llama 2 的 1.8T tokens。开发了更精细的预处理和管理流程。
* 后训练:为后训练数据开发了更严格的质量保证和过滤方法。
2. 规模大幅扩展:训练规模远超以往的 Llama 模型。
* 计算量:旗舰模型(405B)使用了 3.8 × 10²⁵ FLOPs 进行预训练,是 Llama 2 最大版本的近 50 倍。
* 模型尺寸:旗舰模型拥有 405B 可训练参数,在 15.6T 文本 tokens 上进行训练。根据扩展法则(scaling laws),该模型尺寸在其训练预算下接近计算最优。
* 小模型优化:较小的模型(8B, 70B)的训练时间远超计算最优所需,使其在相同的推理预算下性能优于计算最优模型。同时,利用旗舰模型在后训练阶段进一步提升小模型的质量。
3. 复杂性管理:采用简洁有效的设计以最大化扩展能力。
* 模型架构:选择标准的密集型 Transformer 架构【索引218,Attention is all you need,2017】,而非专家混合模型(MoE)【索引176,Outrageously large neural networks: The sparsely-gated mixture-of-experts layer,2017】,以保证训练稳定性。
* 后训练流程:采用相对简单的后训练流程,包括监督微调(SFT)、拒绝采样(RS)和直接偏好优化(DPO)【索引152,Direct preference optimization: Your language model is secretly a reward model,2024】,避免了复杂且不稳定的强化学习算法【索引137,Training language models to follow instructions with human feedback,2022;索引171,Proximal policy optimization algorithms,2017】。

主要成果与发布:
* 模型家族:发布了三个多语言模型,参数量分别为 8B、70B 和 405B。所有模型均为 Llama 3.1 版本。
* 性能:旗舰模型(405B)在多种任务上与 GPT-4 等领先模型表现相当,接近最先进水平。小模型(8B、70B)在同参数量级中表现最佳。
* 开源发布:公开发布了所有三个 Llama 3 模型(预训练和后训练版本),以及新版的 Llama Guard 3 模型,旨在促进社区创新并加速通向负责任的通用人工智能(AGI)发展。
* 多模态探索:初步实验通过组合方法为 Llama 3 集成了图像、视频和语音能力,并在识别任务上取得了有竞争力的结果,但这些多模态模型仍在开发中,尚未发布。

Table 1 Llama 3 模型家族概览。本文所有结果均为 Llama 3.1 模型。

Table 2 微调后的 Llama 3 模型在关键基准评估上的性能。该表比较了 8B、70B 和 405B 版本的 Llama 3 与竞争模型的性能。在三个模型规模等效类别中,性能最佳的模型已加粗。△使用 5-shot 提示(无 CoT)获得的结果。◁未使用 CoT 获得的结果。♢使用 zero-shot 提示获得的结果。

A3 总体概述

Llama 3 语言模型开发流程。Llama 3 的模型架构如图1所示,其开发主要包括两个阶段。
* 语言模型预训练:首先,将一个大型多语言文本语料库转换为离散的 tokens,然后在此数据上预训练一个大型语言模型(LLM)来执行下一词元预测任务。在此阶段,模型学习语言结构并从文本中获取大量世界知识。为有效实现这一点,预训练在极大规模下进行:在 15.6T tokens 上预训练了一个 405B 参数的模型,上下文窗口为 8K tokens。标准预训练之后,还有一个持续预训练阶段,将支持的上下文窗口增加到 128K tokens。详细信息见第3节。
* 语言模型后训练:预训练后的语言模型对语言有丰富的理解,但还不能遵循指令或像助手一样行事。我们通过几轮对齐来使其与人类反馈对齐,每一轮都涉及在指令调优数据上的监督微调(SFT)和直接偏好优化(DPO)【索引152,Direct preference optimization: Your language model is secretly a reward model,2024】。在后训练阶段,我们还集成了新功能,如工具使用,并观察到在编码和推理等其他领域的显著提升。详细信息见第4节。最后,在后训练阶段还融入了安全缓解措施,详情见第5.4节。


Figure 1 Llama 3 的整体架构和训练示意图。Llama 3 是一个 Transformer 语言模型,训练用于预测文本序列的下一个词元。详见正文。

Llama 3 模型能力。最终得到的模型具备丰富的能力集。它们能用至少八种语言回答问题,编写高质量代码,解决复杂推理问题,并且能开箱即用或以零样本方式使用工具。

多模态能力实验。我们还进行了实验,采用组合方法为 Llama 3 增加了图像、视频和语音能力。我们研究的方法包括图28中所示的三个额外阶段。
* 多模态编码器预训练:我们为图像和语音分别训练了独立的编码器。图像编码器在大量的图像-文本对上进行训练,这让模型学习到视觉内容与自然语言描述之间的关系。语音编码器采用自监督方法训练,即遮蔽部分语音输入,并尝试通过离散词元表示来重构被遮蔽的部分,从而让模型学习语音信号的结构。图像编码器详情见第7节,语音编码器详情见第8节。
* 视觉适配器训练:我们训练一个适配器,将预训练的图像编码器集成到预训练的语言模型中。该适配器由一系列交叉注意力层组成,将图像编码器表示输入到语言模型中。适配器在文本-图像对上进行训练,以此对齐图像和语言表示。在适配器训练期间,我们也更新图像编码器的参数,但有意不更新语言模型的参数。我们还在图像适配器之上,利用成对的视频-文本数据训练了一个视频适配器,使模型能够跨帧聚合信息。详情见第7节。
* 语音适配器训练:最后,我们通过一个适配器将语音编码器集成到模型中,该适配器将语音编码转换为可以直接输入到微调后语言模型的词元表示。在监督微调阶段,适配器和编码器的参数被联合更新,以实现高质量的语音理解。在语音适配器训练期间,我们不改变语言模型。我们还集成了一个文本到语音系统。详情见第8节。

多模态实验成果。我们的多模态实验产生了能够识别图像和视频内容,并支持通过语音界面进行交互的模型。这些模型仍在开发中,尚未准备好发布。

A2 方法细节

3 预训练

语言模型预训练包括:(1) 一个大规模训练语料库的策划和过滤,(2) 模型架构的开发和用于确定模型大小的相应扩展法则,(3) 大规模高效预训练技术的开发,以及 (4) 预训练配方的制定。下面我们分别介绍这些组成部分。

3.1 预训练数据

数据来源与处理原则。我们从包含截至2023年底知识的各种数据源创建了用于语言模型预训练的数据集。我们对每个数据源应用了多种去重方法和数据清洗机制以获得高质量的 tokens。我们移除了包含大量个人身份信息(PII)的域和已知包含成人内容的域。

3.1.1 网络数据管理

数据清洗过程。我们使用的大部分数据来自网络,下面描述我们的清洗过程。

PII 和安全过滤。除其他缓解措施外,我们实施了过滤器,旨在移除可能包含不安全内容或大量个人可识别信息(PII)的网站数据、根据 Meta 的多种安全标准被评为有害的域,以及已知包含成人内容的域。

文本提取与清洗。我们处理未截断网络文档的原始 HTML 内容,以提取高质量的多样化文本。为此,我们构建了一个自定义解析器,它能提取 HTML 内容并优化样板代码移除的精确度和内容召回率。在人工评估中,我们将我们的解析器与优化文章类内容的流行第三方 HTML 解析器进行了比较,发现其表现良好。我们仔细处理包含数学和代码内容的 HTML 页面以保留其内容结构。我们保留了图像的 alt 属性文本,因为数学内容常以预渲染图像形式表示,而数学公式也提供在 alt 属性中。我们实验性地评估了不同的清洗配置。我们发现,与纯文本相比,markdown 对主要在网络数据上训练的模型性能有害,因此我们移除了所有 markdown 标记。

数据去重。我们在 URL、文档和行级别应用了多轮去重:
* URL 级别去重:我们对整个数据集进行了 URL 级别的去重。对于每个 URL 对应的页面,我们保留最新版本。
* 文档级别去重:我们在整个数据集上进行了全局 MinHash【索引20,On the resemblance and containment of documents,1997】去重,以移除近似重复的文档。
* 行级别去重:我们进行了类似于 ccNet【索引226,Ccnet: Extracting high quality monolingual datasets from web crawl data,2019】的激进的行级别去重。我们移除了在每 3000 万个文档的桶中出现超过 6 次的行。尽管我们的人工定性分析表明,行级别去重不仅移除了各种网站的残留样板,如导航菜单、cookie 警告,还移除了频繁出现的高质量文本,但我们的实证评估显示了显著的改进。

启发式过滤。我们开发了启发式方法来移除额外的低质量文档、异常值和包含过多重复内容的文档。一些启发式方法的例子包括:
* 我们使用重复 n-gram 覆盖率【索引150,Scaling language models: Methods, analysis & insights from training gopher,2021】来移除由重复内容(如日志或错误消息)组成的行。这些行可能很长且独特,因此无法通过行级去重过滤。
* 我们使用“脏话”计数【索引153,Exploring the limits of transfer learning with a unified text-to-text transformer,2020】来过滤未被域名黑名单覆盖的成人网站。
* 我们使用词元分布的 Kullback-Leibler 散度来过滤掉与训练语料库分布相比包含过多异常词元的文档。

基于模型的质量过滤。此外,我们尝试应用各种基于模型的质量分类器来筛选高质量的 tokens。这些分类器包括使用像 fasttext【索引103,Bag of tricks for efficient text classification,2017】这样的快速分类器,训练它识别给定文本是否会被维基百科引用【索引210,Llama: Open and efficient foundation language models,2023a】,以及计算密集型但更强大的基于 Roberta 的分类器【索引125,Roberta: A robustly optimized bert pretraining approach,2019a】,这些分类器在 Llama 2 的预测上进行训练。为了训练一个基于 Llama 2 的质量分类器,我们创建了一个清洗过的网页文档训练集,描述了质量要求,并指示 Llama 2 的聊天模型来判断这些文档是否满足这些要求。出于效率考虑,我们使用 DistilRoberta【索引164,Distilbert, a distilled version of bert: smaller, faster, cheaper and lighter,2019】为每个文档生成质量分数。我们实验性地评估了各种质量过滤配置的有效性。

代码和推理数据处理。类似于 DeepSeek-AI 等人【索引47,Deepseek-coder-v2: Breaking the barrier of closed-source models in code intelligence,2024】的工作,我们构建了特定领域的处理管道,用于提取代码和数学相关的网页。具体来说,代码和推理分类器都是在 Llama 2 标注的网络数据上训练的 DistilRoberta 模型。与上面提到的一般质量分类器不同,我们进行了提示调优,以针对包含数学推导、STEM 领域推理以及自然语言与代码交错的网页。由于代码和数学的词元分布与自然语言有显著不同,这些管道实现了特定领域的 HTML 提取、定制的文本特征和用于过滤的启发式方法。

多语言数据处理。类似于我们为英语描述的处理流程,我们实施了过滤器来移除可能包含个人身份信息(PII)或不安全内容的网站数据。我们的多语言文本处理流程有几个独特之处:
* 我们使用一个基于 fasttext 的语言识别模型,将文档分为 176 种语言。
* 我们在每种语言的数据内部进行文档级别和行级别的去重。
* 我们应用特定语言的启发式方法和基于模型的过滤器来移除低质量文档。
此外,我们使用一个基于多语言 Llama 2 的分类器对多语言文档进行质量排序,以确保高质量内容得到优先处理。我们通过实验确定预训练中使用的多语言 tokens 数量,以平衡模型在英语和多语言基准测试上的性能。

3.1.2 确定数据混合比例

确定数据混合比例的方法。为了获得高质量的语言模型,仔细确定预训练数据混合中不同数据源的比例至关重要。我们确定此数据混合的主要工具是知识分类和扩展法则实验。

知识分类。我们开发了一个分类器来对我们的网络数据中包含的信息类型进行分类,以便更有效地确定数据混合比例。我们使用这个分类器来降采样在网络上过度代表的数据类别,例如艺术和娱乐。

数据混合的扩展法则。为了确定最佳的数据混合比例,我们进行了扩展法则实验,即在一种数据混合上训练几个小型模型,并用它来预测大型模型在该混合上的性能(参见第3.2.1节)。我们对不同的数据混合重复此过程多次,以选择一个新的候选数据混合。随后,我们在此候选数据混合上训练一个更大的模型,并评估该模型在几个关键基准上的性能。

数据混合总结。我们最终的数据混合包含大约 50% 的通用知识 tokens,25% 的数学和推理 tokens,17% 的代码 tokens,以及 8% 的多语言 tokens。

3.1.3 数据退火

退火(Annealing)的作用。根据经验,我们发现在少量高质量代码和数学数据上进行退火(参见第3.4.3节)可以提升预训练模型在关键基准测试上的性能。类似于 Li 等人【索引120,Datacomp-lm: In search of the next generation of training sets for language models,2024b】的研究,我们使用一个数据混合进行退火,该混合对特定领域的高质量数据进行了上采样。我们的退火数据中不包含任何常用基准测试的训练集。这使我们能够评估 Llama 3 真实的少样本学习能力和域外泛化能力。

退火对特定数据集的评估。遵循 OpenAI【索引135,Gpt-4 technical report,2023a】的做法,我们评估了在退火中使用 GSM8k【索引36,Training verifiers to solve math word problems,2021】和 MATH【索引88,Measuring mathematical problem solving with the MATH dataset,2021b】训练集的有效性。我们发现,退火将预训练的 Llama 3 8B 模型在 GSM8k 和 MATH 验证集上的性能分别提高了 24.0% 和 6.4%。然而,对 405B 模型的提升微乎其微,这表明我们的旗舰模型具有很强的上下文学习和推理能力,不需要特定的领域内训练样本来获得强劲的性能。

使用退火评估数据质量。类似于 Blakeney 等人【索引19,Does your data spark joy? performance gains from domain upsampling at the end of training,2024】的研究,我们发现退火使我们能够判断小型领域特定数据集的价值。我们通过将一个训练了50%的 Llama 3 8B 模型的学习率在 40B tokens 上线性退火至 0 来衡量这些数据集的价值。在这些实验中,我们将 30% 的权重分配给新数据集,其余 70% 的权重分配给默认数据混合。使用退火来评估新数据源比为每个小数据集进行扩展法则实验更有效。

3.2 模型架构

架构选择。Llama 3 使用标准的密集型 Transformer 架构【索引218,Attention is all you need,2017】。在模型架构方面,它与 Llama 和 Llama 2【索引210,Llama: Open and efficient foundation language models,2023a;索引211,Llama 2: Open foundation and fine-tuned chat models,2023b】没有显著差异;我们的性能提升主要由数据质量和多样性的改善以及训练规模的增加所驱动。

与 Llama 2 的微小改动。我们对 Llama 2 进行了一些小的修改:
* 我们使用了分组查询注意力(GQA)【索引2,Gqa: Training generalized multi-query transformer models from multi-head checkpoints,2023】,设有 8 个键值头,以提高推理速度并减少解码期间键值缓存的大小。
* 我们使用了一种注意力掩码,防止同一序列中不同文档之间的自注意力。我们发现在标准预训练期间,这一改变影响有限,但在对极长序列进行持续预训练时非常重要。

Table 3 Llama 3 的关键超参数概览。我们展示了 8B、70B 和 405B 语言模型的设置。

  • 我们使用了一个包含 128K tokens 的词汇表。我们的词元词汇表结合了 tiktoken3 分词器的 100K tokens 和额外的 28K tokens,以更好地支持非英语语言。与 Llama 2 的分词器相比,我们的新分词器在英语数据样本上的压缩率从 3.17 提高到了 3.94 字符/词元。这使得模型能够用相同的训练计算量“阅读”更多文本。我们还发现,增加来自特定非英语语言的 28K tokens 既提高了压缩率,也提升了下游任务的性能,且对英语分词没有影响。
  • 我们将 RoPE 的基础频率超参数增加到 500,000。这使我们能更好地支持更长的上下文;Xiong 等人【索引236,Effective long-context scaling of foundation models,2023】的研究表明,这个值对于高达 32,768 的上下文长度是有效的。

405B 模型的架构细节。Llama 3 405B 使用一个包含 126 层的架构,词元表示维度为 16,384,并有 128 个注意力头;详见表3。根据我们数据上的扩展法则,对于我们 3.8 × 10²⁵ FLOPs 的训练预算,这个模型大小大约是计算最优的。

3.2.1 扩展法则

扩展法则的应用。我们开发了扩展法则【索引89,Training compute-optimal large language models,2022;索引106,Scaling laws for neural language models,2020】,以根据我们的预训练计算预算确定旗舰模型的最佳大小。除了确定最佳模型大小,一个主要挑战是预测旗舰模型在下游基准任务上的性能,这涉及几个问题:(1) 现有的扩展法则通常只预测下一个词元的预测损失,而不是特定的基准性能。(2) 扩展法则可能嘈杂且不可靠,因为它们是基于小计算预算的预训练运行开发的【索引223,Emergent abilities of large language models,2022b】。

两阶段方法。为了解决这些挑战,我们实施了一个两阶段方法来开发能够准确预测下游基准性能的扩展法则:
1. 我们首先建立计算最优模型在下游任务上的负对数似然与训练 FLOPs 之间的相关性。
2. 接着,我们利用扩展法则模型和用更高计算 FLOPs 训练的旧模型,将下游任务上的负对数似然与任务准确率相关联。在这一步,我们特别利用了 Llama 2 系列模型。
这种方法使我们能够为计算最优模型在给定特定数量的训练 FLOPs 下预测下游任务的性能。我们使用类似的方法来选择我们的预训练数据混合(参见第3.4节)。

扩展法则实验细节。具体来说,我们通过使用 6 × 10¹⁸ FLOPs 到 10²² FLOPs 之间的计算预算预训练模型来构建我们的扩展法则。在每个计算预算下,我们预训练了大小在 40M 到 16B 参数之间的模型,每个计算预算使用一部分模型大小。在这些训练运行中,我们使用带有 2,000 个训练步骤线性预热的余弦学习率调度。峰值学习率根据模型大小设置在 2 × 10⁻⁴ 到 4 × 10⁻⁴ 之间。我们将余弦衰减设置为峰值的 0.1。每一步的权重衰减设置为该步学习率的 0.1 倍。我们为每个计算规模使用固定的批量大小,范围在 250K 到 4M 之间。


Figure 2 6 × 10¹⁸ 和 10²² FLOPs 之间的扩展法则 IsoFLOPs 曲线。损失是在一个留出的验证集上的负对数似然。我们使用二阶多项式近似每个计算规模的测量值。


Figure 3 已识别的计算最优模型中训练 tokens 的数量与预训练计算预算的关系。我们还包括了拟合的扩展法则预测。计算最优模型对应于图2中抛物线的最小值。

IsoFLOPs 曲线分析。这些实验产生了图2中的 IsoFLOPs 曲线。这些曲线中的损失是在一个单独的验证集上测量的。我们使用二阶多项式拟合测量的损失值,并识别每个抛物线的最小值。我们将抛物线的最小值称为在相应预训练计算预算下的计算最优模型。

最优训练 tokens 预测。我们使用我们以这种方式确定的计算最优模型来预测特定计算预算下的最佳训练 tokens 数。为此,我们假设计算预算 $C$ 和最佳训练 tokens 数 $N^{\star}(C)$ 之间存在幂律关系:

我们使用图2中的数据来拟合 $A$ 和 $\alpha$。我们发现 $(\alpha, A) = (0.53, 0.29)$;相应的拟合如图3所示。将得到的扩展法则外推到 3.8 × 10²⁵ FLOPs,建议在 16.55T tokens 上训练一个 402B 参数的模型。

IsoFLOPs 曲线的平坦化趋势。一个重要的观察是,随着计算预算的增加,IsoFLOPs 曲线在最小值附近变得更平坦。这意味着旗舰模型的性能对模型大小和训练 tokens 之间权衡的微小变化相对稳健。基于这一观察,我们最终决定训练一个 405B 参数的旗舰模型。

下游任务性能预测。我们使用得到的计算最优模型来预测旗舰 Llama 3 模型在基准数据集上的性能。首先,我们将基准测试中正确答案的(归一化)负对数似然与训练 FLOPs 进行线性关联。在此分析中,我们仅使用在上述数据混合上训练至 10²² FLOPs 的扩展法则模型。接下来,我们使用扩展法则模型和 Llama 2 模型(这些模型使用 Llama 2 数据混合和分词器进行训练),建立对数似然和准确率之间的 S 型关系。我们在图4中展示了这项实验在 ARC Challenge 基准上的结果。我们发现这种跨越四个数量级外推的两步扩展法则预测相当准确:它仅略微低估了旗舰 Llama 3 模型的最终性能。

3.3 基础设施、扩展和效率

本节概述。我们描述了支持 Llama 3 405B 大规模预训练的硬件和基础设施,并讨论了几个提高训练效率的优化措施。

3.3.1 训练基础设施

基础设施演进。Llama 1 和 Llama 2 模型是在 Meta 的 AI 研究超级集群【索引115,Introducing the AI Research SuperCluster — Meta’s cutting-edge AI supercomputer for AI research,2022】上训练的。随着我们进一步扩展,Llama 3 的训练迁移到了 Meta 的生产集群【索引116,Building meta’s genai infrastructure,2024】。这种设置为生产级可靠性进行了优化,这在我们扩大训练规模时至关重要。


Figure 4 ARC Challenge 的扩展法则预测。左图:ARC Challenge 基准测试中正确答案的归一化负对数似然与预训练 FLOPs 的关系。右图:ARC Challenge 基准测试准确率与正确答案的归一化负对数似然的关系。此分析使我们能够在预训练开始前预测模型在 ARC Challenge 基准测试上的性能。详见正文。

计算资源。Llama 3 405B 在多达 16K 个 H100 GPU 上进行训练,每个 GPU 运行在 700W TDP,配备 80GB HBM3,使用 Meta 的 Grand Teton AI 服务器平台【索引128,Meta open compute project, grand teton ai platform,2022】。每台服务器配备八个 GPU 和两个 CPU。在一台服务器内,八个 GPU 通过 NVLink 连接。训练任务使用 Meta 的全球规模训练调度器 MAST【索引33,MAST: Global scheduling of ml training across geo-distributed datacenters at hyperscale,2024】进行调度。

存储系统。Tectonic【索引142,Facebook’s tectonic filesystem: Efficiency from exascale,2021】,Meta 的通用分布式文件系统,被用来为 Llama 3 预训练构建一个存储网络【索引14,Training llama: A storage perspective,2024】。它由 7500 台配备 SSD 的服务器提供 240 PB 的存储空间,并支持 2 TB/s 的持续吞吐量和 7 TB/s 的峰值吞吐量。一个主要的挑战是支持高度突发性的检查点写入,这些写入会在短时间内使存储网络饱和。检查点保存每个 GPU 的模型状态,范围从 1 MB 到 4 GB 不等,用于恢复和调试。我们的目标是最小化检查点期间的 GPU 暂停时间,并增加检查点频率,以减少恢复后损失的工作量。

网络配置。Llama 3 405B 使用基于 Arista 7800 和 Minipack2 开放计算项目(OCP)机架交换机的 RDMA over Converged Ethernet (RoCE) 网络。Llama 3 家族中的较小模型则使用 Nvidia Quantum2 Infiniband 网络。RoCE 和 Infiniband 集群都利用 400 Gbps 的互连技术连接 GPU。尽管这些集群的底层网络技术存在差异,但我们对两者进行了调整,以便为这些大型训练工作负载提供相当的性能。我们将进一步详细介绍我们的 RoCE 网络,因为我们完全拥有其设计。
* 网络拓扑:我们的基于 RoCE 的 AI 集群包含 24K 个 GPU,通过一个三层 Clos 网络连接【索引116,Building meta’s genai infrastructure,2024】。在底层,每个机架托管 16 个 GPU,分布在两台服务器上,由一个 Minipack2 机架顶(ToR)交换机连接。在中间层,192 个这样的机架由集群交换机连接,形成一个拥有 3,072 个 GPU 和全对分带宽的 pod,确保没有过载。在顶层,同一数据中心建筑内的八个这样的 pod 通过聚合交换机连接,形成一个 24K GPU 的集群。然而,聚合层的网络连接并未维持全对分带宽,而是有 1:7 的过载比。我们的模型并行方法(见第3.3.2节)和训练作业调度器【索引33,MAST: Global scheduling of ml training across geo-distributed datacenters at hyperscale,2024】都经过优化,能够感知网络拓扑,旨在最小化跨 pod 的网络通信。
* 负载均衡:LLM 训练产生的大量网络流(fat network flows)很难使用传统方法(如等价多路径路由 ECMP)在所有可用的网络路径上进行负载均衡。为了应对这一挑战,我们采用了两种技术。首先,我们的集合通信库在两个 GPU 之间创建 16 个网络流,而不是只有一个,从而减少了每个流的流量,并为负载均衡提供了更多的流。其次,我们的增强型 ECMP (E-ECMP) 协议通过对 RoCE 数据包头的附加字段进行哈希,有效地将这 16 个流平衡到不同的网络路径上。

Table 4 Llama 3 405B 预训练各阶段的扩展配置和 MFU。关于每种并行类型的描述,请参见正文和图5。

  • 拥塞控制:我们在骨干网络中使用深缓冲交换机【索引62,RDMA over Ethernet for Distributed AI Training at Meta Scale,2024】,以适应集合通信模式引起的瞬时拥塞和缓冲。这种设置有助于限制由训练中常见的慢速服务器引起的持续拥塞和网络背压的影响。最后,通过 E-ECMP 实现更好的负载均衡,显著降低了拥塞的可能性。通过这些优化,我们成功运行了一个 24K GPU 的集群,而没有使用传统拥塞控制方法,如数据中心量化拥塞通知(DCQCN)。
3.3.2 模型扩展的并行化策略

4D 并行化方法。为了扩展我们最大模型的训练,我们使用了 4D 并行——结合了四种不同类型的并行方法——来分片模型。这种方法有效地将计算分布到多个 GPU 上,并确保每个 GPU 的模型参数、优化器状态、梯度和激活值都适合其 HBM。我们的 4D 并行实现如图5所示。它结合了张量并行(TP)【索引112,Imagenet classification with deep convolutional neural networks,2012;索引180,Megatron-lm: Training multi-billion parameter language models using model parallelism,2019;索引111,Reducing activation recomputation in large transformer models,2023】、流水线并行(PP)【索引90,Gpipe: Efficient training of giant neural networks using pipeline parallelism,2019;索引131,Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM,2021;索引113,Breadth-first pipeline parallelism,2023】、上下文并行(CP)【索引123,Ring attention with blockwise transformers for near-infinite context,2023a】和数据并行(DP)【索引154,Zero: Memory optimizations toward training trillion parameter models,2020;索引157,Zero-offload: Democratizing billion-scale model training,2021;索引251,Pytorch fsdp: Experiences on scaling fully sharded data parallel,2023b】。

各类并行化策略的定义。张量并行将单个权重张量分割成不同设备上的多个块。流水线并行按层垂直划分模型为多个阶段,以便不同设备可以并行处理完整模型流水线的不同阶段。上下文并行将输入上下文分割成段,减少了极长序列长度输入时的内存瓶颈。我们使用完全分片数据并行(FSDP)【索引154,Zero: Memory optimizations toward training trillion parameter models,2020;索引157,Zero-offload: Democratizing billion-scale model training,2021;索引251,Pytorch fsdp: Experiences on scaling fully sharded data parallel,2023b】,它对模型、优化器和梯度进行分片,同时实现数据并行,即在多个 GPU 上并行处理数据,并在每个训练步骤后进行同步。我们为 Llama 3 使用的 FSDP 对优化器状态和梯度进行分片,但对于模型分片,我们在前向计算后不重新分片,以避免在后向传递期间进行额外的 all-gather 通信。

GPU 利用率。通过仔细调整并行配置、硬件和软件,我们为表4中所示的配置实现了 38-43% 的整体 BF16 模型 FLOPs 利用率(MFU)【索引34,Palm: Scaling language modeling with pathways,2023】。在 16K GPU 上,DP=128 的 MFU 略降至 41%,而 8K GPU 上 DP=64 的 MFU 为 43%,这是因为为了在训练期间保持全局每批次 tokens 不变,每个 DP 组的批量大小需要降低。

流水线并行的改进。我们遇到了现有实现的一些挑战:
* 批次大小限制:当前实现对每个 GPU 支持的批次大小有限制,要求它能被流水线阶段数整除。在图6的例子中,流水线并行的深度优先调度(DFS)【索引131,Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM,2021】要求 $N = PP = 4$,而广度优先调度(BFS)【索引113,Breadth-first pipeline parallelism,2023】要求 $N = M$,其中 $M$ 是微批次总数,$N$ 是同一阶段前向或后向的连续微批次数。然而,预训练通常需要灵活性来调整批次大小。
* 内存不平衡:现有的流水线并行实现导致资源消耗不平衡。第一阶段因嵌入层和预热微批次而消耗更多内存。
* 计算不平衡:在模型的最后一层之后,我们需要计算输出和损失,使这一阶段成为执行延迟的瓶颈。


Figure 5 4D 并行化示意图。GPU 按 [TP, CP, PP, DP] 的顺序分为并行组,其中 DP 代表 FSDP。在此示例中,16 个 GPU 配置为 |TP|=2, |CP|=2, |PP|=2, |DP|=2 的组大小。GPU 在 4D 并行中的位置表示为向量 [D1, D2, D3, D4],其中 Di 是第 i 个并行维度上的索引。在此示例中,GPU0[TP0, CP0, PP0, DP0] 和 GPU1[TP1, CP0, PP0, DP0] 在同一个 TP 组中,GPU0 和 GPU2 在同一个 CP 组中,GPU0 和 GPU4 在同一个 PP 组中,GPU0 和 GPU8 在同一个 DP 组中。

针对流水线并行问题的解决方案。为了解决这些问题,我们修改了流水线调度,如图6所示,允许灵活设置 $N$——在这种情况下 $N = 5$,可以在每个批次中运行任意数量的微批次。这使我们能够:(1) 在大规模批次大小受限时运行比阶段数更少的微批次;或 (2) 运行更多微批次以隐藏点对点通信,找到 DFS 和 BFS 之间的最佳平衡点,以实现最佳的通信和内存效率。为了平衡流水线,我们分别从第一和最后一个阶段各减少一个 Transformer 层。这意味着第一阶段的第一个模型块只有嵌入层,最后一个阶段的最后一个模型块只有输出投影和损失计算。为了减少流水线气泡,我们使用了交错调度【索引131,Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM,2021】,在一个流水线 rank 上有 $V$ 个流水线阶段。总的流水线气泡率为 $\frac{PP-1}{V*M}$。此外,我们在 PP 中采用异步点对点通信,这大大加快了训练速度,特别是在文档掩码引入额外计算不平衡的情况下。我们启用 TORCH_NCCL_AVOID_RECORD_STREAMS 来减少异步点对点通信的内存使用。最后,为了降低内存成本,基于详细的内存分配分析,我们主动释放未来计算中不会使用的张量,包括每个流水线阶段的输入和输出张量。通过这些优化,我们可以在不使用激活检查点的情况下,对 8K tokens 的序列进行 Llama 3 的预训练。

长序列的上下文并行。我们利用上下文并行(CP)来提高扩展 Llama 3 上下文长度时的内存效率,并支持在长达 128K 的极长序列上进行训练。在 CP 中,我们跨序列维度进行分区,具体来说,我们将输入序列划分为 $2 \times CP$ 个块,以便每个 CP rank 接收两个块以实现更好的负载均衡。第 i 个 CP rank 接收第 i 个和第 $(2 \times CP - 1 - i)$ 个块。

上下文并行的实现选择。与现有的在环状结构中重叠通信和计算的 CP 实现【索引123,Ring attention with blockwise transformers for near-infinite context,2023a】不同,我们的 CP 实现采用了一种基于 all-gather 的方法,即我们首先对键(K)和值(V)张量进行 all-gather,然后为本地查询(Q)张量块计算注意力输出。尽管 all-gather 的通信延迟暴露在关键路径中,我们仍采用这种方法主要有两个原因:(1) 在基于 all-gather 的 CP 注意力中支持不同类型的注意力掩码(如文档掩码)更容易、更灵活;(2) 暴露的 all-gather 延迟很小,因为由于使用了 GQA【索引2,Gqa: Training generalized multi-query transformer models from multi-head checkpoints,2023】,通信的 K 和 V 张量远小于 Q 张量。因此,注意力计算的时间复杂度比 all-gather 大一个数量级($O(S^2)$ vs $O(S)$,其中 $S$ 代表全因果掩码中的序列长度),使得 all-gather 的开销可以忽略不计。


Figure 6 Llama 3 中的流水线并行图示。流水线并行将八个流水线阶段(0 到 7)划分到四个流水线 rank(PP ranks 0 到 3)上,其中 rank 0 的 GPU 运行阶段 0 和 4,rank 1 的 GPU 运行阶段 1 和 5,以此类推。彩色块(0 到 9)表示一系列微批次,其中 M 是微批次的总数,N 是同一阶段前向或后向的连续微批次数。我们的关键洞见是使 N 可调。

网络感知的并行配置。并行维度的顺序 [TP, CP, PP, DP] 是为网络通信优化的。最内层的并行需要最高的网络带宽和最低的延迟,因此通常限制在同一台服务器内。最外层的并行可能跨越一个多跳网络,并应能容忍更高的网络延迟。因此,根据对网络带宽和延迟的要求,我们将并行维度按 [TP, CP, PP, DP] 的顺序排列。DP(即 FSDP)是最外层的并行,因为它可以通过异步预取分片的模型权重和减少梯度来容忍更长的网络延迟。确定具有最小通信开销同时避免 GPU 内存溢出的最佳并行配置是具有挑战性的。我们开发了一个内存消耗估算器和一个性能预测工具,帮助我们探索各种并行配置,并有效地预测整体训练性能和识别内存差距。

数值稳定性。通过比较不同并行设置下的训练损失,我们修复了几个影响训练稳定性的数值问题。为确保训练收敛,我们在多个微批次的后向计算中使用 FP32 梯度累积,并在 FSDP 中跨数据并行工作者以 FP32 reduce-scatter 梯度。对于中间张量,例如在前向计算中多次使用的视觉编码器输出,其后向梯度也在 FP32 中累积。

3.3.3 集合通信

NCCLX 的应用与优化。我们用于 Llama 3 的集合通信库基于 Nvidia NCCL 库的一个分支,名为 NCCLX。NCCLX 显著提高了 NCCL 的性能,尤其是在延迟较高的网络上。回想一下,并行维度的顺序是 [TP, CP, PP, DP],其中 DP 对应 FSDP。最外层的并行维度 PP 和 DP 可能通过多跳网络进行通信,延迟可达几十微秒。原始的 NCCL 集合通信——FSDP 中的 all-gather 和 reduce-scatter,以及 PP 中的点对点通信——需要数据分块和分阶段的数据复制。这种方法带来了几个低效率问题,包括 (1) 需要在网络上交换大量小的控制消息以促进数据传输,(2) 额外的内存复制操作,以及 (3) 为通信消耗额外的 GPU 周期。对于 Llama 3 的训练,我们通过调整分块和数据传输以适应我们的网络延迟(在大集群中可能高达几十微秒)来解决这些低效率问题的一部分。我们还允许小的控制消息以更高的优先级在我们的网络中传输,特别是避免在深缓冲核心交换机中被队头阻塞。我们未来 Llama 版本的持续工作涉及在 NCCLX 中进行更深层次的更改,以全面解决上述所有问题。

Table 5 Llama 3 405B 预训练 54 天期间意外中断的根本原因分类。约 78% 的意外中断归因于已确认或可疑的硬件问题。

3.3.4 可靠性与操作挑战

大规模训练的挑战。16K GPU 训练的复杂性和潜在故障场景超过了我们运营过的更大规模的 CPU 集群。此外,训练的同步性使其容错性较低——单个 GPU 故障可能需要重启整个作业。尽管存在这些挑战,对于 Llama 3,我们实现了超过 90% 的有效训练时间,同时支持自动化集群维护,如固件和 Linux 内核升级【索引219,Maintaining large-scale ai capacity at meta,2024】,这导致每天至少有一次训练中断。有效训练时间衡量的是在经过的时间内用于有效训练的时间。

中断分析。在为期 54 天的预训练快照期间,我们共经历了 466 次作业中断。其中,47 次是计划中断,由固件升级等自动化维护操作或操作员发起的配置或数据集更新等操作引起。其余 419 次是意外中断,分类见表5。大约 78% 的意外中断归因于已确认的硬件问题,如 GPU 或主机组件故障,或可疑的硬件相关问题,如静默数据损坏和计划外的单个主机维护事件。GPU 问题是最大的类别,占所有意外问题的 58.7%。尽管故障数量众多,但在此期间仅需三次重大的手动干预,其余问题均由自动化处理。

提高有效训练时间的措施。为了提高有效训练时间,我们减少了作业启动和检查点时间,并开发了用于快速诊断和问题解决的工具。我们广泛使用 PyTorch 内置的 NCCL 飞行记录器【索引8,Pytorch 2: Faster machine learning through dynamic python bytecode transformation and graph compilation,2024】,该功能将集合元数据和堆栈跟踪捕获到一个环形缓冲区中,从而使我们能够快速诊断大规模下的挂起和性能问题,尤其是在 NCCLX 方面。利用这一点,我们高效地记录了每个通信事件和每个集合操作的持续时间,并在 NCCLX 看门狗或心跳超时时自动转储跟踪数据。我们通过在线配置更改【索引204,Holistic Configuration Management at Facebook,2015】在生产环境中按需选择性地启用计算密集型更高的跟踪操作和元数据收集,而无需代码发布或作业重启。

大规模训练的调试复杂性。在我们的网络中混合使用 NVLink 和 RoCE,使得大规模训练中的问题调试变得复杂。通过 NVLink 的数据传输通常通过 CUDA 内核发出的加载/存储操作进行,远程 GPU 或 NVLink 连接的故障通常表现为 CUDA 内核内加载/存储操作的停滞,而不会返回明确的错误代码。NCCLX 通过与 PyTorch 的紧密协同设计,提高了故障检测和定位的速度和准确性,允许 PyTorch 访问 NCCLX 的内部状态并跟踪相关信息。虽然无法完全防止因 NVLink 故障引起的停滞,但我们的系统会监控通信库的状态,并在检测到此类停滞时自动超时。此外,NCCLX 会跟踪每个 NCCLX 通信的内核和网络活动,并提供故障 NCCLX 集合内部状态的快照,包括所有 rank 之间已完成和待处理的数据传输。我们分析这些数据来调试 NCCLX 的扩展问题。

慢节点(straggler)检测。有时,硬件问题可能导致功能正常但速度缓慢的“掉队者”(stragglers),这些掉队者很难被检测到。即使只有一个掉队者也能拖慢数千个其他 GPU,通常表现为功能正常但通信缓慢。我们开发了工具来优先处理来自选定进程组的潜在问题通信。通过仅调查少数几个头号嫌疑,我们通常能够有效地识别出掉队者。

环境因素对训练性能的影响。一个有趣的观察是环境因素对大规模训练性能的影响。对于 Llama 3 405B,我们注意到基于一天中不同时间的 1-2% 的吞吐量日变化。这种波动是由于中午较高的温度影响了 GPU 的动态电压和频率缩放。

数据中心功耗波动。在训练期间,成千上万的 GPU 可能会同时增加或减少功耗,例如,由于所有 GPU 都在等待检查点或集合通信完成,或者整个训练作业的启动或关闭。当这种情况发生时,可能会导致整个数据中心的功耗瞬间波动数十兆瓦,挑战了电网的极限。随着我们为未来更大规模的 Llama 模型扩展训练,这对我们来说是一个持续的挑战。

3.4 训练配方

训练阶段概述。用于预训练 Llama 3 405B 的配方包括三个主要阶段:(1) 初始预训练,(2) 长上下文预训练,和 (3) 退火。下面分别描述这三个阶段。我们使用类似的配方来预训练 8B 和 70B 模型。

3.4.1 初始预训练

训练参数与稳定性。我们使用 AdamW 预训练 Llama 3 405B,峰值学习率为 8 × 10⁻⁵,线性预热 8,000 步,余弦学习率调度在 1,200,000 步内衰减至 8 × 10⁻⁷。我们在训练早期使用较小的批量大小以提高训练稳定性,随后增加批量大小以提高效率。具体来说,我们使用 4M tokens 的初始批量大小和 4,096 的序列长度,在预训练 252M tokens 后将这些值翻倍至 8M tokens 和 8,192 序列长度。在预训练 2.87T tokens 后,我们再次将批量大小翻倍至 16M。我们发现这种训练配方非常稳定:我们观察到很少的损失尖峰,并且不需要干预来纠正模型训练发散。

数据混合调整。在训练期间,我们对预训练数据混合进行了几次调整,以提高模型在特定下游任务上的性能。特别是,我们在预训练期间增加了非英语数据的百分比,以提高 Llama 3 的多语言性能。我们还上采样了数学数据,以提高模型的数学推理性能;我们在预训练的后期阶段增加了更多近期的网络数据,以推进模型的知识截止日期;并且我们降采样了后来被识别为质量较低的预训练数据子集。

3.4.2 长上下文预训练

长上下文预训练策略。在预训练的最后阶段,我们对长序列进行训练,以支持高达 128K tokens 的上下文窗口。我们没有在更早的阶段对长序列进行训练,因为自注意力层的计算量随序列长度呈二次方增长。我们分阶段增加支持的上下文长度,进行预训练直到模型成功适应增加的上下文长度。我们通过测量 (1) 模型在短上下文评估上的性能是否完全恢复,以及 (2) 模型是否能完美解决该长度下的“大海捞针”任务来评估成功的适应。在 Llama 3 405B 预训练中,我们分六个阶段逐步增加上下文长度,从最初的 8K 上下文窗口开始,最终达到 128K 的上下文窗口。这个长上下文预训练阶段使用了大约 800B 的训练 tokens。


Figure 7 Llama 3 整体后训练方法示意图。我们的后训练策略包括拒绝采样、监督微调和直接偏好优化。详见正文。

3.4.3 退火

退火阶段的设置。在预训练的最后 40M tokens 期间,我们线性地将学习率退火至 0,同时保持 128K tokens 的上下文长度。在这个退火阶段,我们还调整了数据混合,以对质量非常高的数据源进行上采样;详见第 3.1.3 节。最后,我们在退火期间计算模型检查点的平均值(Polyak (1991) 平均法【索引147,New stochastic approximation type procedures,1991】),以产生最终的预训练模型。

4 后训练

后训练流程。我们通过在预训练的检查点上应用多轮后训练,或称将模型与人类反馈对齐【索引137,Training language models to follow instructions with human feedback,2022;索引152,Direct preference optimization: Your language model is secretly a reward model,2024】,来产生对齐的 Llama 3 模型。每一轮后训练都包括监督微调(SFT),然后是对通过人类标注或合成生成收集的示例进行直接偏好优化(DPO)【索引152,Direct preference optimization: Your language model is secretly a reward model,2024】。我们的后训练建模和数据方法分别在第4.1节和第4.2节中描述。我们在第4.3节中进一步详细说明了用于提高推理、编码、事实性、多语言、工具使用、长上下文和精确指令遵循的自定义数据管理策略。

4.1 建模

建模主干。我们后训练策略的主干是一个奖励模型和一个语言模型。我们首先在预训练的检查点上,使用人类标注的偏好数据训练一个奖励模型(见第4.1.2节)。然后,我们通过监督微调(SFT;见第4.1.3节)对预训练的检查点进行微调,并进一步通过直接偏好优化(DPO;见第4.1.4节)使检查点对齐。此过程如图7所示。除非另有说明,我们的建模过程适用于 Llama 3 405B,为简洁起见,我们将其称为 Llama 3。

4.1.1 聊天对话格式

新聊天协议的设计。为了调整 LLMs 用于人机交互,我们需要定义一个聊天对话协议,让模型能够理解人类指令并执行对话任务。与前代产品相比,Llama 3 具有新功能,如工具使用(第4.3.5节),这可能需要在单轮对话中生成多个消息并将其发送到不同位置(例如,用户、ipython)。为了支持这一点,我们设计了一种新的多消息聊天协议,该协议使用各种特殊的头标记和终止标记。头标记用于指示对话中每条消息的来源和目的地。同样,终止标记指示何时轮到人类和 AI 交替发言。

4.1.2 奖励建模

奖励模型训练。我们在预训练的检查点上训练了一个覆盖不同能力的奖励模型(RM)。训练目标与 Llama 2 相同,只是我们去除了损失中的边际项,因为我们观察到在数据扩展后改进效果递减。遵循 Llama 2 的做法,我们在过滤掉具有相似响应的样本后,使用我们所有的偏好数据进行奖励建模。除了标准的(选择的,拒绝的)响应偏好对外,标注员还为一些提示创建了第三个“编辑后的响应”,即对选择的响应进行进一步编辑以求改进(见第4.2.1节)。因此,每个偏好排序样本都有两到三个具有明确排序的响应(编辑 > 选择 > 拒绝)。我们在训练期间将提示和多个响应连接成单行,响应随机打乱。这是对将响应放在不同行并计算分数的标准场景的一种近似,但在我们的消融实验中,这种方法提高了训练效率而没有损失准确性。

4.1.3 监督微调

SFT 流程。然后,奖励模型用于对我们的人类标注提示进行拒绝采样,其细节在第4.2节中描述。结合这些拒绝采样的数据和其他数据源(包括合成数据),我们使用标准交叉熵损失对预训练的语言模型进行微调,目标是目标 tokens(同时屏蔽提示 tokens 的损失)。有关数据混合的更多细节可以在第4.2节中找到。我们将这个阶段称为监督微调(SFT)【索引222,Finetuned language models are zero-shot learners,2022a;索引165,Multitask prompted training enables zero-shot task generalization,2022;索引220,Super-naturalinstructions: Generalization via declarative instructions on 1600+ nlp tasks,2022b】,尽管许多训练目标是模型生成的。我们最大的模型使用 10⁻⁵ 的学习率,在 8.5K 到 9K 步的过程中进行微调。我们发现这些超参数设置在不同的轮次和数据混合中都表现良好。

4.1.4 直接偏好优化

DPO 训练。我们进一步使用直接偏好优化(DPO)【索引152,Direct preference optimization: Your language model is secretly a reward model,2024】对我们的 SFT 模型进行训练,以实现人类偏好对齐。对于训练,我们主要使用最新批次的偏好数据,这些数据是使用前几轮对齐中表现最佳的模型收集的。因此,我们的训练数据更好地符合每轮中正在优化的策略模型的分布。我们也探索了如 PPO【索引171,Proximal policy optimization algorithms,2017】这样的在线策略算法,但发现对于大规模模型,DPO 所需的计算量更少,并且表现更好,特别是在像 IFEval【索引254,Instruction-following evaluation for large language models,2023】这样的指令遵循基准上。对于 Llama 3,我们使用 10⁻⁵ 的学习率,并将 β 超参数设置为 0.1。此外,我们对 DPO 应用了以下算法修改:
* 在 DPO 损失中屏蔽格式化 tokens:我们在损失中屏蔽了选择和拒绝响应中的特殊格式化 tokens,包括头标记和终止标记(在第4.1.1节中描述),以稳定 DPO 训练。我们观察到,让这些 tokens 对损失产生贡献可能导致不期望的模型行为,如尾部重复或突然生成终止 tokens。我们假设这是由于 DPO 损失的对比性质——在选择和拒绝响应中都存在共同的 tokens 会导致一个矛盾的学习目标,因为模型需要同时增加和减少这些 tokens 的可能性。
* 使用 NLL 损失进行正则化:我们在选择的序列上增加了一个额外的负对数似然(NLL)损失项,缩放系数为 0.2,类似于 Pang 等人【索引144,Iterative reasoning preference optimization,2024】的做法。这通过保持生成的期望格式和防止选择响应的对数概率下降【索引144,Iterative reasoning preference optimization,2024;索引138,Smaug: Fixing failure modes of preference optimisation with dpo-positive,2024】,帮助进一步稳定 DPO 训练。

4.1.5 模型平均

模型平均法。最后,我们对在每个 RM、SFT 或 DPO 阶段使用不同版本数据或超参数的实验中获得的模型进行平均【索引93,Averaging weights leads to wider optima and better generalization,2019;索引228,Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time,2022;索引122,Branch-train-merge: Embarrassingly parallel training of expert language models,2022】。

Table 6 人类偏好数据统计。我们列出了用于 Llama 3 对齐的内部收集的人类偏好数据的统计信息。我们要求标注员与模型进行多轮对话,并在每轮对响应进行比较。在后处理中,我们将每个对话在轮次级别拆分为多个示例。每个示例包括一个提示(如果可用,则包括之前的对话)和一个响应(例如,选择的或拒绝的响应)。

4.1.6 迭代轮次

迭代优化。继 Llama 2 之后,我们在六个轮次中应用了上述方法。在每个周期中,我们收集新的偏好标注和 SFT 数据,并从最新的模型中采样合成数据。

4.2 后训练数据

数据构成的重要性。后训练数据的构成对语言模型的实用性和行为起着至关重要的作用。在本节中,我们讨论了我们的人类标注程序和偏好数据收集(第4.2.1节)、我们 SFT 数据的构成(第4.2.2节),以及数据质量控制和清洗的方法(第4.2.3节)。

4.2.1 偏好数据

偏好数据标注过程。我们的偏好数据标注过程与 Llama 2 相似。我们在每一轮之后部署多个模型进行标注,并为每个用户提示从两个不同的模型中采样两个响应。这些模型可以用不同的数据混合和对齐配方进行训练,从而实现不同的能力强度(例如,代码专业知识)和增加数据多样性。我们要求标注员根据他们对所选响应比被拒响应的偏好程度,将其偏好强度分为四个级别之一:显著更好、更好、略好或勉强更好。我们还在偏好排序后加入了一个编辑步骤,以鼓励标注员进一步改进所选响应。标注员直接编辑所选响应或用反馈提示模型以完善其自身的响应。因此,我们的一部分偏好数据有三个被排序的响应(编辑 > 选择 > 拒绝)。

偏好数据统计与质量控制。在表6中,我们报告了用于 Llama 3 训练的偏好标注统计数据。通用英语涵盖了多个子类别,如基于知识的问答或精确指令遵循,这些都超出了特定能力的范围。与 Llama 2 相比,我们观察到提示和响应的平均长度有所增加,这表明我们训练 Llama 3 完成了更复杂的任务。此外,我们实施了质量分析和人工评估流程,以严格评估收集的数据,从而使我们能够完善我们的提示并向标注员提供系统性、可操作的反馈。例如,随着 Llama 3 在每一轮后的改进,我们相应地增加提示的复杂性,以针对模型滞后的领域。

偏好数据的使用策略。在每一轮后训练中,我们使用当时可用的所有偏好数据进行奖励建模,而仅使用来自各种能力的最新批次进行 DPO 训练。对于奖励建模和 DPO,我们都使用被标记为“选择的响应显著优于或优于被拒对应物”的样本进行训练,并丢弃响应相似的样本。

4.2.2 SFT 数据

SFT 数据来源。我们的微调数据主要由以下来源组成:
* 我们人类标注收集的提示,其响应经过拒绝采样。
* 针对特定能力的合成数据(更多细节见第4.3节)。

Table 7 SFT 数据统计。我们列出了用于 Llama 3 对齐的内部收集的 SFT 数据。每个 SFT 示例包括一个上下文(即除最后一轮外的所有对话轮次)和一个最终响应。

  • 少量人类策划的数据(更多细节见第4.3节)。
    随着我们的后训练轮次进行,我们开发出更强大的 Llama 3 变体,用于收集覆盖广泛复杂能力的大型数据集。在本节中,我们讨论拒绝采样程序的细节以及我们最终 SFT 数据混合的整体构成。

拒绝采样(Rejection Sampling)。在拒绝采样(RS)期间,对于在人类标注期间收集的每个提示(第4.2.1节),我们从最新的聊天模型策略(通常是前一轮后训练迭代中表现最佳的检查点,或特定能力表现最佳的检查点)中采样 K 个(通常在10到30之间)输出,并使用我们的奖励模型选择最佳候选者,这与 Bai 等人【索引12,Constitutional AI: harmlessness from AI feedback,2022】的做法一致。在后训练的后期轮次中,我们引入系统提示来引导 RS 响应,使其符合理想的语调、风格或格式,这对于不同能力可能有所不同。

拒绝采样效率优化。为了提高拒绝采样的效率,我们采用了 PagedAttention【索引112,Efficient memory management for large language model serving with pagedattention,2023】。PagedAttention 通过动态键值缓存分配来提高内存效率。它通过根据当前缓存容量动态调度请求来支持任意输出长度。不幸的是,这带来了内存耗尽时换出的风险。为了消除这种交换开销,我们定义了一个最大输出长度,并且仅在有足够内存容纳该长度的输出时才执行请求。PagedAttention 还使我们能够在一个提示的所有相应输出之间共享键值缓存页面。总的来说,这在拒绝采样期间带来了超过 2 倍的吞吐量提升。

整体数据构成。表7显示了我们“帮助性”混合中每个大类的数据统计。虽然 SFT 和偏好数据包含重叠的领域,但它们的策划方式不同,产生了不同的计数统计。在第4.2.3节中,我们描述了对数据样本的主题、复杂性和质量进行分类的技术。在每一轮后训练中,我们仔细调整我们在这些轴上的整体数据混合,以调整在广泛基准测试中的性能。我们最终的数据混合对一些高质量来源进行多次迭代,并对其他来源进行降采样。

4.2.3 数据处理和质量控制

数据质量控制的重要性。鉴于我们大部分训练数据是模型生成的,它需要仔细的清洗和质量控制。

数据清洗。在早期轮次中,我们观察到数据中存在一些不希望出现的模式,例如过度使用表情符号或感叹号。因此,我们实施了一系列基于规则的数据移除和修改策略,以过滤或清理有问题的数据。例如,为了缓解过度道歉的语调问题,我们识别出过度使用的短语(如“我很抱歉”或“我道歉”),并仔细平衡数据集中此类样本的比例。

数据剪枝。我们还应用了一系列基于模型的技术来移除低质量的训练样本并提高整体模型性能:
* 主题分类:我们首先将 Llama 3 8B 微调成一个主题分类器,并对所有数据进行推断,将其分类到粗粒度桶(“数学推理”)和细粒度桶(“几何和三角学”)中。
* 质量评分:我们使用奖励模型和基于 Llama 的信号来为每个样本获得一个质量分数。对于基于 RM 的分数,我们将 RM 分数排在前四分之一的数据视为高质量。对于基于 Llama 的分数,我们提示 Llama 3 检查点对每个样本在通用英语数据上按三点量表(准确性、指令遵循、语调/呈现)和在编码数据上按两点量表(错误识别和用户意图)进行评分,并将获得最高分数的样本视为高质量。RM 和基于 Llama 的分数有很高的不一致率,我们发现结合这些信号可以在我们的内部测试集上获得最佳的召回率。最终,我们选择被 RM 或基于 Llama 的过滤器标记为高质量的示例。
* 难度评分:因为我们也希望优先考虑对模型更复杂的示例,我们使用两种难度度量来对数据进行评分:Instag【索引127,Instag: Instruction tagging for analyzing supervised fine-tuning of large language models,2023】和基于 Llama 的评分。对于 Instag,我们提示 Llama 3 70B 对 SFT 提示进行意图标记,意图越多意味着复杂性越高。我们还提示 Llama 3 在三点量表上衡量对话的难度【索引126,What makes good data for alignment? a comprehensive study of automatic data selection in instruction tuning,2024c】。
* 语义去重:最后,我们进行语义去重【索引1,Semdedup: Data-efficient learning at web-scale through semantic deduplication,2023;索引126,What makes good data for alignment? a comprehensive study of automatic data selection in instruction tuning,2024c】。我们首先使用 RoBERTa【索引125,Roberta: A robustly optimized BERT pretraining approach,2019b】对完整的对话进行聚类,并在每个聚类内按质量分数 × 难度分数进行排序。然后我们通过迭代所有排序的示例进行贪婪选择,只保留那些与聚类中迄今为止看到的示例的最大余弦相似度低于阈值的示例。

4.3 能力提升

特定能力提升概述。我们重点介绍了为提升特定能力所做的特别努力,例如代码(第4.3.1节)、多语言性(第4.3.2节)、数学与推理(第4.3.3节)、长上下文(第4.3.4节)、工具使用(第4.3.5节)、事实性(第4.3.6节)和可控性(第4.3.7节)。

4.3.1 代码

代码能力的重要性。自 Copilot 和 Codex【索引28,Evaluating large language models trained on code,2021】发布以来,用于代码的 LLM 受到了极大的关注。开发人员现在广泛使用这些模型来生成代码片段、调试、自动化任务和提高代码质量。对于 Llama 3,我们的目标是为以下高优先级编程语言改进和评估代码生成、文档、调试和审查能力:Python、Java、Javascript、C/C++、Typescript、Rust、PHP、HTML/CSS、SQL、bash/shell。在这里,我们介绍了我们通过训练代码专家、为 SFT 生成合成数据、通过系统提示引导改进格式化以及创建质量过滤器以从我们的训练数据中移除不良样本来提高这些编码能力的工作。

专家训练。我们训练了一个代码专家,用它在后续的后训练轮次中为代码收集高质量的人类标注。这是通过分支主预训练运行,并在一个主要由(>85%)代码数据组成的 1T token 混合上继续预训练来实现的。在特定领域数据上继续预训练已被证明能有效提高特定领域的性能【索引85,Don’t stop pretraining: Adapt language models to domains and tasks,2020】。我们遵循类似于 CodeLlama【索引161,Code llama: Open foundation models for code,2023】的配方。在训练的最后几千步中,我们执行长上下文微调(LCFT),以将专家的上下文长度扩展到 16K tokens,使用高质量的仓库级代码数据混合。最后,我们遵循第4.1节中描述的类似后训练建模配方来对齐这个模型,只是 SFT 和 DPO 数据混合主要针对代码。这个模型也用于编码提示的拒绝采样(第4.2.2节)。

合成数据生成。在开发过程中,我们确定了代码生成中的关键问题,包括难以遵循指令、代码语法错误、不正确的代码生成以及难以修复错误。虽然密集的人类标注理论上可以解决这些问题,但合成数据生成提供了一种成本更低、规模更大的补充方法,不受标注员专业水平的限制。因此,我们使用 Llama 3 和代码专家来生成大量的合成 SFT 对话。

合成代码数据生成的三种方法。我们描述了三种生成合成代码数据的高级方法。总共,我们生成了超过 270 万个在 SFT 期间使用的合成示例。
1. 合成数据生成:执行反馈。8B 和 70B 模型在训练于由更大、更强大的模型生成的数据上时,表现出显著的性能提升。然而,我们最初的实验表明,在 Llama 3 405B 自身生成的数据上训练并没有帮助(甚至可能降低性能)。为了解决这个限制,我们引入了执行反馈作为真理的来源,使模型能够从错误中学习并保持正轨。特别是,我们使用以下过程生成了大约一百万个合成编码对话的大型数据集:
* 问题描述生成:首先,我们生成了大量涵盖各种主题的编程问题描述,包括长尾分布中的主题。为了实现这种多样性,我们从各种来源中随机抽取代码片段,并提示模型生成受这些示例启发的编程问题。这使我们能够涉足广泛的主题,并创建一个全面的问题描述集【索引225,Magicoder: Empowering code generation with oss-instruct,2024】。
* 解决方案生成:然后,我们提示 Llama 3 以给定的编程语言解决每个问题。我们观察到,在提示中添加良好编程的一般规则可以提高生成的解决方案质量。此外,我们发现要求模型在注释中解释其思考过程是很有帮助的。
* 正确性分析:生成解决方案后,认识到其正确性不能保证至关重要,在微调数据集中包含不正确的解决方案可能会损害模型的质量。虽然我们不确保完全正确,但我们开发了近似正确性的方法。为实现这一点,我们从生成的解决方案中提取源代码,并应用静态和动态分析技术的组合来测试其正确性,包括:
* 静态分析:我们通过解析器和 linter 运行所有生成的代码,以确保语法正确性,捕获诸如语法错误、使用未初始化变量或未导入函数、代码风格问题、类型错误等错误。
* 单元测试生成和执行:对于每个问题和解决方案,我们提示模型生成单元测试,在容器化环境中与解决方案一起执行,捕获运行时执行错误和一些语义错误。
* 错误反馈和迭代自我修正:当解决方案在任何步骤失败时,我们提示模型进行修正。提示包括原始问题描述、错误的解决方案以及来自解析器/linter/测试器的反馈(stdout、stderr/和返回码)。在单元测试执行失败后,模型可以修复代码以通过现有测试,或修改其单元测试以适应生成的代码。只有通过所有检查的对话才被包含在最终数据集中,用于监督微调(SFT)。值得注意的是,我们观察到大约 20% 的解决方案最初是不正确的,但经过自我修正,这表明模型从执行反馈中学习并提高了其性能。
* 微调和迭代改进:微调过程分多轮进行,每一轮都建立在前一轮的基础上。每一轮之后,模型都会得到改进,为下一轮生成更高质量的合成数据。这个迭代过程允许对模型性能进行渐进式提炼和增强。

  1. 合成数据生成:编程语言翻译。我们观察到主要编程语言(如 Python/C++)与不太常见的语言(如 Typescript/PHP)之间存在性能差距。这并不奇怪,因为我们对不太常见编程语言的训练数据较少。为了缓解这个问题,我们通过将常见编程语言的数据翻译成不太常见的语言来补充我们现有的数据(类似于 Chen 等人【索引29,Breaking language barriers in multilingual mathematical reasoning: Insights and observations,2023】在推理方面的做法)。这是通过提示 Llama 3 并通过语法解析、编译和执行来确保质量来实现的。图8展示了一个从 Python 翻译成 PHP 的合成 PHP 代码示例。这显著提高了在 MultiPL-E【索引24,MultiPL-E: A scalable and polyglot approach to benchmarking neural code generation,2023】基准测试中测得的不太常见语言的性能。

  2. 合成数据生成:回译。为了提高某些编码能力(例如,文档、解释),其中执行反馈在确定质量方面信息量较少,我们采用了一种替代的多步骤方法。使用此过程,我们生成了大约 120 万个与代码解释、生成、文档和调试相关的合成对话。从我们预训练数据中的多种语言的代码片段开始:


Figure 8 代码翻译示例。我们展示了一个使用 Llama 3 将 Python 代码(左)翻译成 PHP 代码(右)的示例,以扩充我们的 SFT 数据集,使其包含更广泛的编程语言。


Figure 9 使用系统提示提高生成代码的质量。左图:没有系统提示。右图:有系统提示。

* **生成**:我们提示 Llama 3 生成代表我们目标能力的数据(例如,我们为代码片段添加注释和文档字符串,或者我们要求模型解释一段代码)。 * **回译**:然后,我们提示模型将合成生成的数据“回译”成原始代码(例如,我们提示模型仅从其文档生成代码,或者我们要求模型仅从其解释生成代码)。 * **过滤**:使用原始代码作为参考,我们提示 Llama 3 确定输出的质量(例如,我们询问模型回译的代码与原始代码的忠实度如何)。然后,我们在 SFT 中使用具有最高自我验证分数的生成示例。

拒绝采样中的系统提示引导。在拒绝采样过程中,我们使用代码特定的系统提示来提高代码的可读性、文档、详尽性和特异性。回想一下,在第7节中,这些数据用于微调语言模型。图9展示了一个系统提示如何帮助提高生成代码质量的例子——它添加了必要的注释,使用了更具信息性的变量名,节省了内存等。

使用执行和“模型即评判者”信号过滤训练数据。如第4.2.3节所述,我们偶尔在拒绝采样数据中遇到质量问题,例如代码块包含错误。在我们拒绝采样数据中检测这些问题并不像在我们的合成代码数据中那么直接,因为拒绝采样响应通常包含自然语言和代码的混合,其中代码可能并不总是期望是可执行的。(例如,用户提示可能明确要求伪代码或仅对可执行程序的很小片段进行编辑。)为了解决这个问题,我们利用“模型即评判者”的方法,其中早期版本的 Llama 3 评估并根据两个标准分配一个二进制(0/1)分数:代码正确性和代码风格。我们只保留那些获得完美分数2的样本。最初,这种严格的过滤导致了下游基准性能的回归,主要是因为它不成比例地移除了带有挑战性提示的示例。为了抵消这一点,我们策略性地修改了一些被归类为最具挑战性的编码数据的响应,直到它们满足基于 Llama 的“模型即评判者”标准。通过完善这些具有挑战性的问题,编码数据在质量和难度之间达到了平衡,从而实现了最佳的下游性能。

4.3.2 多语言性

多语言能力提升策略。我们描述了如何提升 Llama 3 的多语言能力,包括训练一个专注于大量多语言数据的专家模型,为德语、法语、意大利语、葡萄牙语、印地语、西班牙语和泰语采购和生成高质量的多语言指令调优数据,并解决多语言语言引导的特定挑战,以增强模型的整体性能。

专家训练。我们的 Llama 3 预训练数据混合中包含的英语 tokens 远多于非英语 tokens。为了收集更高质量的非英语语言的人类标注,我们通过从预训练运行中分支出一个分支,并继续在一个包含 90% 多语言 tokens 的数据混合上进行预训练,来训练一个多语言专家。然后,我们按照第4.1节对此专家模型进行后训练。该专家模型随后被用于收集更高质量的非英语语言标注,直到预训练完全完成。

多语言数据收集。我们的多语言 SFT 数据主要来源于以下来源。总体分布为 2.4% 的人类标注,44.2% 来自其他 NLP 任务的数据,18.8% 的拒绝采样数据,以及 34.6% 的翻译推理数据。
* 人类标注:我们从语言学家和母语者那里收集高质量、手动标注的数据。这些标注主要包括代表真实世界用例的开放式提示。
* 来自其他 NLP 任务的数据:为了进一步扩充,我们使用来自其他任务的多语言训练数据,并将其改写成对话格式。例如,我们使用了来自 exams-qa【索引86,EXAMS: A multi-subject high school examinations dataset for cross-lingual and multilingual question answering,2020】和 Conic10k【索引229,Conic10k: A challenging math problem understanding and reasoning dataset,2023】的数据。为了改善语言对齐,我们还使用了来自 GlobalVoices【索引149,Parallel global voices: a collection of multilingual corpora with citizen media stories,2016】和 Wikimedia【索引209,Parallel data, tools and interfaces in opus,2012】的平行文本。我们使用基于 LID 的过滤和 Blaser2.0【索引172,Seamlessm4t—massively multilingual & multimodal machine translation,2023】来移除低质量数据。对于平行文本数据,我们没有直接使用双语对,而是应用了一个受 Wei 等人【索引222,Finetuned language models are zero-shot learners,2022a】启发的多语言模板,以更好地模拟翻译和语言学习场景中的真实对话。
* 拒绝采样数据:我们对人类标注的提示应用拒绝采样,以生成高质量的微调样本,与英语数据的处理过程相比,做了一些修改:
* 生成:在早期后训练轮次中,我们探索了从 0.2-1 的范围内随机选择温度超参数,以获得多样化的生成。在高温下,多语言提示的响应可以变得富有创造性和启发性,但也容易出现不必要或不自然的语码转换。在最后一轮后训练中,我们使用一个恒定的 0.6 值来平衡这种权衡。此外,我们使用了专门的系统提示来改善响应的格式、结构和总体可读性。
* 选择:在基于奖励模型的选择之前,我们实施了多语言特定的检查,以确保提示和响应之间的高语言匹配率(例如,罗马化的印地语提示不应期望得到印地语天城文脚本的响应)。
* 翻译数据:我们尽量避免使用机器翻译的数据来微调模型,以防止翻译腔【索引18,How human is machine translationese? comparing human and machine translations of text and speech,2020;索引133,Crosslingual generalization through multitask finetuning,2023】或可能的名称偏见【索引219,Measuring and mitigating name biases in neural machine translation,2022a】、性别偏见【索引166,Gender Bias in Machine Translation,2021】或文化偏见【索引95,Cultural and Linguistic Bias of Neural Machine Translation Technology,2023】。此外,我们的目标是防止模型仅接触植根于英语文化背景的任务,这可能不代表我们旨在捕捉的语言和文化多样性。我们对此做了一个例外,翻译了我们的合成定量推理数据(详见第4.3.3节),以提高非英语语言的定量推理性能。由于这些数学问题中语言的简单性,翻译后的样本发现几乎没有质量问题。我们观察到,加入这些翻译数据后,在 MGSM【索引178,Language models are multilingual chain-of-thought reasoners,2022】上的性能有显著提升。

4.3.3 数学和推理

推理能力定义与挑战。我们将推理定义为执行多步计算并得出正确最终答案的能力。在训练擅长数学推理的模型方面,有几个挑战指导着我们的方法:
* 缺乏提示:随着问题复杂性的增加,用于监督微调(SFT)的有效提示或问题的数量减少。这种稀缺性使得为教授模型各种数学技能创建多样化和代表性的训练数据集变得困难【索引241,Metamath: Bootstrap your own mathematical questions for large language models,2023;索引242,Mammoth: Building math generalist models through hybrid instruction tuning,2023;索引128,Wizardmath: Empowering mathematical reasoning for large language models via reinforced evol-instruct,2023;索引132,Orca-math: Unlocking the potential of slms in grade school math,2024;索引175,Deepseekmath: Pushing the limits of mathematical reasoning in open language models,2024;索引243,Mammoth2: Scaling instructions from the web,2024b】。
* 缺乏真实思维链:有效的推理需要一个逐步的解决方案来促进推理过程【索引224,Chain-of-thought prompting elicits reasoning in large language models,2022c】。然而,通常缺乏真实的思维链,而这对于指导模型如何逐步分解问题并得出最终答案至关重要【索引244,Star: Bootstrapping reasoning with reasoning,2022】。
* 不正确的中间步骤:当使用模型生成的思维链时,中间步骤可能不总是正确的【索引36,Training verifiers to solve math word problems,2021;索引212,Solving math word problems with process-and outcome-based feedback,2022;索引124,Let’s verify step by step,2023;索引219,Math-shepherd: Verify and reinforce llms step-by-step without human annotations,2023a】。这种不准确性可能导致不正确的最终答案,需要加以解决。
* 教模型使用外部工具:增强模型利用外部工具(如代码解释器)的能力,使其能够通过交错代码和文本进行推理【索引63,Pal: Program-aided language models,2023;索引30,Program of thoughts prompting: Disentangling computation from reasoning for numerical reasoning tasks,2022;索引82,Tora: A tool-integrated reasoning agent for mathematical problem solving,2023】。这种能力可以显著提高其解决问题的能力。
* 训练与推理的差异:模型的微调方式与推理时的使用方式之间通常存在差异。在推理期间,微调后的模型可能与人类或其他模型互动,需要利用反馈来改进其推理。确保训练与现实世界使用之间的一致性对于维持推理性能至关重要。

应对挑战的方法。为了应对这些挑战,我们采用了以下方法:
* 解决提示不足问题:我们从数学背景的预训练数据中获取相关内容,并将其转换为问答格式,然后可用于监督式微调。此外,我们识别出模型表现不佳的数学技能,并积极向人类征集相关提示,以教授模型这些技能。为便于此过程,我们创建了一个数学技能分类法【索引50,Metacognitive capabilities of llms: An exploration in mathematical problem solving,2024】,并要求人类据此提供相关提示/问题。
* 用分步推理轨迹增强训练数据:我们使用 Llama 3 为一组提示生成分步解决方案。对于每个提示,模型会产生可变数量的生成结果。然后根据正确答案对这些生成结果进行过滤【索引119,Common 7b language models already possess strong math capabilities,2024a】。我们还进行自我验证,即使用 Llama 3 来验证某个分步解决方案对于给定问题是否有效。这个过程通过消除模型未产生有效推理轨迹的实例,提高了微调数据的质量。
* 过滤不正确的推理轨迹:我们训练了结果和步骤奖励模型【索引124,Let’s verify step by step,2023;索引219,Math-shepherd: Verify and reinforce llms step-by-step without human annotations,2023a】,以过滤掉中间推理步骤不正确的训练数据。这些奖励模型用于消除含有无效分步推理的数据,确保微调数据的高质量。对于更具挑战性的提示,我们使用带有学习到的步骤奖励模型的蒙特卡洛树搜索(MCTS)来生成有效的推理轨迹,进一步增强了高质量推理数据的收集【索引237,Monte carlo tree search boosts reasoning via iterative preference learning,2024】。
* 交错代码和文本推理:我们提示 Llama 3 通过结合文本推理和相关的 Python 代码来解决推理问题【索引82,Tora: A tool-integrated reasoning agent for mathematical problem solving,2023】。代码执行被用作反馈信号,以消除推理链无效的情况,确保推理过程的正确性。
* 从反馈和错误中学习:为了模拟人类反馈,我们利用不正确的生成结果(即导致不正确推理轨迹的生成结果),并通过提示 Llama 3 产生正确的生成结果来进行错误纠正【索引7,Learning from mistakes makes llm better reasoner,2023b;索引225,Generating sequences by learning to self-correct,2022;索引129,Self-refine: Iterative refinement with self-feedback,2024a】。利用来自不正确尝试的反馈并纠正它们的过程,有助于提高模型准确推理并从错误中学习的能力。

4.3.4 长上下文

长上下文能力平衡。在最后的预训练阶段,我们将 Llama 3 的上下文长度从 8K tokens 扩展到 128K tokens(详见第3.4节)。与预训练类似,我们发现在微调期间必须仔细调整配方,以平衡短上下文和长上下文的能力。

SFT 和合成数据生成。简单地将我们现有的仅包含短上下文数据的 SFT 配方应用于模型,导致了预训练中长上下文能力的显著退步,这凸显了在我们的 SFT 数据混合中加入长上下文数据的必要性。然而,在实践中,由于阅读冗长上下文的乏味和耗时性,让人们标注此类示例在很大程度上是不切实际的,因此我们主要依靠合成数据来填补这一空白。我们使用早期版本的 Llama 3 基于关键的长上下文用例生成合成数据:(可能是多轮的)问答、长文档摘要以及对代码库的推理,下面将更详细地描述它们。
* 问答:我们从预训练混合数据中精心挑选了一组长文档。我们将这些文档分割成 8K tokens 的块,并提示 Llama 3 的早期版本根据随机选择的块生成问答对。在训练期间,整个文档被用作上下文。
* 摘要:我们通过先使用我们最强的 Llama 3 8K 上下文模型对 8K 输入长度的块进行摘要,然后对这些摘要再进行摘要,从而对长上下文文档进行分层摘要。在训练期间,我们提供完整的文档,并提示模型在保留所有重要细节的同时对文档进行摘要。我们还根据文档的摘要生成问答对,并向模型提出需要对整个长文档有全局理解的问题。
* 长上下文代码推理:我们解析 Python 文件以识别导入语句并确定它们的依赖关系。从这里,我们选择最常被依赖的文件,特别是那些被至少五个其他文件引用的文件。我们从一个仓库中移除其中一个关键文件,并提示模型识别哪些文件依赖于这个缺失的文件,并生成必要的缺失代码。
我们根据序列长度(16K、32K、64K 和 128K)进一步对这些合成生成的样本进行分类,以便更精细地针对输入长度。

数据混合比例探索。通过仔细的消融实验,我们观察到,将 0.1% 的合成生成的长上下文数据与原始短上下文数据混合,可以在短上下文和长上下文基准测试中优化性能。

DPO 中的上下文长度。我们观察到,只要 SFT 模型在长上下文任务中质量高,在 DPO 中仅使用短上下文训练数据并不会对长上下文性能产生负面影响。我们怀疑这是因为我们的 DPO 配方比 SFT 有更少的优化器步骤。鉴于这一发现,我们在长上下文 SFT 检查点的基础上,为 DPO 保留了标准的短上下文配方。

4.3.5 工具使用

工具使用的重要性。教导 LLM 使用搜索引擎或代码解释器等工具,极大地扩展了它们可以解决的任务范围,将它们从纯粹的聊天模型转变为更通用的助手【索引134,Webgpt: Browser-assisted question-answering with human feedback,2021;索引208,Lamda: Language models for dialog applications,2022;索引145,Talm: Tool augmented language models,2022;索引63,Pal: Program-aided language models,2023;索引130,Augmented language models: a survey,2023a;索引169,Toolformer: Language models can teach themselves to use tools,2024】。我们训练 Llama 3 与以下工具进行交互:
* 搜索引擎。Llama 3 被训练使用 Brave Search 来回答有关超出其知识截止日期的近期事件或需要从网络上检索特定信息的问题。
* Python 解释器。Llama 3 可以生成和执行代码来进行复杂的计算,读取用户上传的文件并基于这些文件解决任务,例如问答、摘要、数据分析或可视化。
* 数学计算引擎。Llama 3 可以使用 Wolfram Alpha API 更准确地解决数学、科学问题,或从 Wolfram 的数据库中检索准确信息。
由此产生的模型能够在聊天设置中使用这些工具来解决用户的查询,包括在多轮对话中。如果一个查询需要多次调用工具,模型可以编写一个分步计划,按顺序调用工具,并在每次工具调用后进行推理。

零样本工具使用。我们还改进了 Llama 3 的零样本工具使用能力——在给定上下文中的、可能是未见过的工具定义和用户查询的情况下,我们训练模型生成正确的工具调用。

工具实现。我们将核心工具实现为具有不同方法的 Python 对象。零样本工具可以实现为带有描述、文档(即如何使用它们的示例)的 Python 函数,模型只需要函数的签名和文档字符串作为上下文即可生成适当的调用。我们还将函数定义和调用转换为 JSON 格式,例如用于 Web API 调用。所有工具调用都由 Python 解释器执行,该解释器必须在 Llama 3 系统提示中启用。核心工具可以在系统提示中单独启用或禁用。

数据收集。与 Schick 等人【索引169,Toolformer: Language models can teach themselves to use tools,2024】不同,我们依赖人类标注和偏好来教 Llama 3 使用工具。这与 Llama 3 通常使用的后训练流程有两个主要区别:
* 对于工具,对话通常包含不止一条助手消息(例如,调用工具和对工具输出进行推理)。因此,我们在消息级别进行标注以收集细粒度的反馈:标注员在具有相同上下文的两条助手消息之间提供偏好,或者如果两条消息都存在重大问题,则编辑其中一条消息。然后将选择或编辑的消息添加到上下文中,对话继续。这为助手调用工具的能力和对工具输出进行推理的能力提供了人类反馈。标注员不能对工具输出进行排序或编辑。
* 我们不进行拒绝采样,因为我们没有在我们的工具基准测试中观察到收益。
为了加快标注过程,我们通过在先前 Llama 3 检查点生成的合成数据上进行微调来引导基本的工具使用能力。因此,标注员需要执行的编辑更少。本着同样的精神,随着 Llama 3 通过其开发逐渐改进,我们逐步复杂化我们的人类标注协议:我们从单轮工具使用标注开始,然后转向对话中的工具使用,最后标注多步工具使用和数据分析。

工具数据集构建。为了创建用于工具使用应用的数据,我们利用以下程序:
* 单步工具使用:我们首先通过少样本生成合成的用户提示,这些提示根据设计需要调用我们的一个核心工具(例如,超出我们知识截止日期的问题)。然后,仍然依赖少样本生成,我们为这些提示生成适当的工具调用,执行它们,并将输出添加到模型的上下文中。最后,我们再次提示模型根据工具输出生成对用户查询的最终答案。我们最终得到以下形式的轨迹:系统提示、用户提示、工具调用、工具输出、最终答案。我们还过滤了大约 30% 的这个数据集,以移除无法执行的工具调用或其他格式问题。
* 多步工具使用:我们遵循类似的协议,首先生成合成数据以教模型基本的多步工具使用能力。为此,我们首先提示 Llama 3 生成需要至少两次工具调用的用户提示,这些工具可以是我们核心集中的相同或不同工具。然后,以这些提示为条件,我们少样本提示 Llama 3 生成一个由交错的推理步骤和工具调用组成的解决方案,类似于 ReAct【索引247,React: Synergizing reasoning and acting in language models,2022】。图10 展示了一个 Llama 3 执行涉及多步工具使用任务的示例。
* 文件上传:我们为以下文件类型进行标注:.txt、.docx、.pdf、.pptx、.xlsx、.csv、.tsv、.py、.json、.jsonl、.html、.xml。我们的提示基于提供的文件,并要求总结文件内容、查找和修复错误、优化一段代码、执行数据分析或可视化。图11 展示了一个 Llama 3 执行涉及文件上传任务的示例。
在对这些合成数据进行微调后,我们在各种具有挑战性的场景中收集人类标注,包括多轮互动、超过三步的工具使用,以及工具调用未产生满意答案的实例。我们用不同的系统提示来增强我们的合成数据,以教导模型仅在激活时使用工具。为了训练模型避免为简单查询调用工具,我们还添加了来自简单数学或问答数据集的查询【索引16,Semantic parsing on Freebase from question-answer pairs,2013;索引110,Mawps: A math word problem repository,2016;索引102,TriviaQA: A large scale distantly supervised challenge dataset for reading comprehension,2017;索引6,Mathqa: Towards interpretable math word problem solving with operation-based formalisms,2019】及其不带工具的响应,但在系统提示中激活了工具。


Figure 10 多步工具使用。Llama 3 执行多步规划、推理和工具调用以解决任务的示例。

零样本工具使用数据。我们通过在一个大型多样的部分合成(函数定义、用户查询、相应调用)元组集上进行微调,来提升 Llama 3 的零样本工具使用能力(也称为函数调用)。我们在一组未见过的工具上评估我们的模型。
* 单次、嵌套和并行函数调用:调用可以是简单的、嵌套的(即我们将一个函数调用作为另一个函数的参数传递),或并行的(即模型返回一个独立的函数调用列表)。生成多样化的函数、查询和基准真实值可能具有挑战性【索引129,Toolverifier: Generalization to new tools via self-verification,2024】,我们借助挖掘 Stack【索引109,The stack: 3 tb of permissively licensed source code,2022】来为我们的合成用户查询提供真实函数的依据。更确切地说,我们提取函数调用及其定义,进行清理和过滤,例如对于缺失的文档字符串或不可执行的函数,并使用 Llama 3 生成与函数调用相对应的自然语言查询。
* 多轮函数调用:我们还为带有函数调用的多轮对话生成合成数据,遵循类似于 Li 等人【索引121,Api-bank: A comprehensive benchmark for tool-augmented llms,2023b】提出的协议。我们使用多个代理来生成领域、API、用户查询、API 调用和响应,同时确保生成的数据覆盖了多样化的领域和现实的 API。所有代理都是 Llama 3 的变体,根据其角色以不同方式进行提示,并以分步方式协作。

4.3.6 事实性

事实性挑战。幻觉仍然是大型语言模型面临的主要挑战。即使在知识储备很少的领域,模型也倾向于过度自信。尽管存在这些缺点,它们仍常被用作知识库,这可能导致错误信息的传播等风险。虽然我们认识到事实性不仅仅是幻觉,但我们在这里采取了幻觉优先的方法。

8用户提示

麦片含糖量与其总体评分之间有什么关系?你能将这种关系可视化,并提供一种根据含糖量估算麦片评分的方法吗?

目系统提示

工具:brave_search, wolfram_alpha 知识截止日期:2023年12月 今日日期:2024年7月11日

助手响应


Figure 11 处理文件上传。Llama 3 执行上传文件分析和可视化的示例。

事实性提升方法。我们遵循的原则是,后训练应使模型对齐以“知道它所知道的”,而不是增加知识【索引64,Does fine-tuning llms on new knowledge encourage hallucinations?,2024;索引131,Linguistic calibration through metacognition: aligning dialogue agent responses with expected correctness,2020】。我们的主要方法是生成数据,使模型生成的内容与预训练数据中存在的事实数据子集对齐。为实现此目的,我们开发了一种知识探测技术,利用了 Llama 3 的上下文能力。此数据生成过程包括以下步骤:
1. 从预训练数据中提取一个数据片段。
2. 通过提示 Llama 3,生成关于这些片段(上下文)的事实性问题。
3. 从 Llama 3 中对问题进行响应采样。
4. 使用原始上下文作为参考,并以 Llama 3 作为评判者,对生成内容的正确性进行评分。
5. 以 Llama 3 作为评判者,对生成内容的信息量进行评分。
6. 对于在所有生成中都信息丰富但持续不正确的响应,使用 Llama 3 生成一个拒绝回答。
我们使用从知识探针生成的数据来鼓励模型只回答它有知识的问题,并拒绝回答它不确定的问题。此外,预训练数据并不总是事实一致或正确的。因此,我们还收集了一套有限的标记事实性数据,处理那些普遍存在事实矛盾或不正确陈述的敏感话题。

4.3.7 可控性

可控性定义与目标。可控性是指导模型行为和结果以满足开发者和用户规范的能力。作为一种通用的基础模型,Llama 3 应该能够最大限度地轻松适应不同的下游用例。对于 Llama 3,我们专注于通过自然语言指令的系统提示来增强其可控性,特别是在响应长度、格式、语调和角色/人设方面。

数据收集。我们通过要求标注员为 Llama 3 设计不同的系统提示,在通用英语类别中收集可控性偏好样本。然后,标注员与模型进行对话,以评估它们在对话过程中遵循系统提示中定义的指令的一致性。下面我们展示一个用于增强可控性的定制系统提示示例:
你是一个乐于助人、开朗的 AI 聊天机器人,为忙碌的家庭担任膳食计划助手。这个家庭有2个成人、3个青少年和2个学龄前儿童。一次计划两到三天的餐食,并利用剩菜或多余的食材来计划第二天的餐食。用户会告诉你他们想要两天还是三天的计划。如果他们没有说,就假设是三天。每个计划应包括早餐、午餐、点心和晚餐。询问用户是否批准计划或需要调整。在他们批准后,提供一份考虑到家庭规模的购物清单。始终牢记家庭的偏好,如果有什么他们不喜欢的,提供替代品。如果用户没有灵感,就问他们本周最想去哪里度假,然后根据该地点的文化推荐餐食。周末的餐食可以更复杂。工作日的餐食应该快速简便。早餐和午餐,首选简单的食物,如麦片、带预煮培根的英式松饼和其他快速简便的食物。这个家庭很忙。一定要问他们手头是否有咖啡或能量饮料等必需品和喜爱物品,以免他们忘记购买。记住要注重预算,除非是特殊场合。

建模。在我们收集了偏好数据之后,我们利用这些数据进行奖励建模、拒绝采样、SFT 和 DPO,以增强 Llama 3 的可控性。

A4 实验环境

  • 模型架构与参数:Llama 3 模型家族包括 8B、70B 和 405B 三种规模。所有模型均采用标准的密集型 Transformer 架构。关键超参数如层数、维度、注意力头数、词汇表大小(128K)、RoPE 基础频率(500K)等详见方法部分的表3。405B 模型包含 126 层,维度为 16384,有 128 个注意力头。
  • 硬件配置
    • GPU:Llama 3 405B 在多达 16,000 个 NVIDIA H100 GPU 上训练,每个 GPU 运行功率为 700W TDP,配备 80GB HBM3 内存。
    • 服务器平台:使用 Meta 的 Grand Teton AI 服务器平台,每台服务器配备 8 个 GPU 和 2 个 CPU,GPU 之间通过 NVLink 连接。
    • 网络:大规模训练使用了基于 Arista 7800 和 Minipack2 OCP 交换机的 RDMA over Converged Ethernet (RoCE) 网络。较小模型使用了 NVIDIA Quantum2 InfiniBand 网络。两种集群均采用 400 Gbps 互连。RoCE 集群采用三层 Clos 拓扑结构。
    • 存储:使用 Meta 的 Tectonic 分布式文件系统,提供 240 PB 存储空间,峰值吞吐量达 7 TB/s。
  • 软件配置
    • 代码实现:训练基于 PyTorch 框架。
    • 依赖库:使用了 NVIDIA NCCL 库的一个分支 NCCLX 进行集合通信优化。
    • 并行策略:采用了结合张量并行(TP)、流水线并行(PP)、上下文并行(CP)和完全分片数据并行(FSDP)的 4D 并行策略。
  • 数据集
    • 预训练数据:使用了约 15T tokens 的多语言语料库,数据截至 2023 年底。最终数据混合包含约 50% 通用知识、25% 数学与推理、17% 代码和 8% 多语言 tokens。
    • 后训练数据:使用了大量人类标注的偏好数据和 SFT 数据,并结合了合成数据。具体统计数据见方法部分的表6和表7。数据涵盖了通用英语、编码、推理、多语言、工具使用等多个领域。
    • 评估基准:使用了大量的公开学术基准,涵盖常识推理、知识、阅读理解、数学、代码、长上下文、多语言、工具使用等多个方面。具体列表见结果部分的表8和表16。

A4 实验结果

5.1 预训练语言模型

  • 标准基准测试
    • 8B 和 70B 模型:Llama 3 8B 在几乎所有类别中都优于同类竞争模型。Llama 3 70B 显著优于其前身 Llama 2 70B 和 Mixtral 8x22B(图12)。详细的阅读理解、代码、常识、数学和通用任务性能见表9至表13。
    • 405B 模型:Llama 3 405B 的性能与同类顶尖模型具有竞争力,并显著优于之前的开源模型。
    • 长上下文:在长上下文任务上,405B 模型表现出色,例如在 InfiniteBench 的 http://En.QA 任务上大幅领先(表14)。
  • 模型鲁棒性测试 (MMLU)
    • 实验内容:评估了模型对多项选择题(MCQ)设置中不同设计选择的鲁棒性,包括少样本标签偏差、标签变体、答案顺序和提示格式。
    • 实验结果:Llama 3 模型,特别是 405B 版本,对 MCQ 标签、少样本提示标签结构、答案顺序和提示格式的变化表现出很强的鲁棒性(图13、图14)。
  • 对抗性基准测试
    • 实验内容:在问答(Adversarial SQuAD)、数学推理(GSM-Plus)和释义检测(PAWS)的对抗性基准上进行评估。
    • 实验结果:在释义检测方面,模型表现出很强的鲁棒性。然而,在数学推理和问答方面,对抗性基准的性能显著低于非对抗性基准,这在预训练和后训练模型中都存在(图15)。
  • 数据污染分析
    • 实验内容:使用 8-gram 重叠法分析了评估数据在预训练语料库中的污染程度及其对性能的潜在影响。
    • 实验结果:分析表明,不同基准受污染的影响各不相同。例如,PiQA 和 HellaSwag 的污染评估和性能增益估计都很高,而 Natural Questions 的高污染估计对性能几乎没有影响(表15)。

5.2 后训练语言模型

  • 通用知识与指令遵循
    • 在 MMLU 和 MMLU-Pro 知识问答基准上,8B 和 70B 模型在同类中表现最佳。405B 模型优于 GPT-4,但落后于 Claude 3.5 Sonnet。
    • 在 IFEval 指令遵循基准上,所有 Llama 3 变体都优于同类模型(表2)。
  • 能力倾向测试
    • 在 GRE、LSAT、SAT 等多种为人类设计的专业能力测试中,Llama 3 405B 的性能与 Claude 3.5 Sonnet 和 GPT-4o 非常相似。70B 模型的表现同样出色,在许多测试中击败了 Nemotron 4 340B(表17)。
  • 代码基准
    • 在 Python 代码生成基准(HumanEval, MBPP)上,8B 和 70B 模型优于同类。405B 模型与 Claude 3.5 Sonnet 和 GPT-4o 表现相似(表18)。
    • 在多语言代码生成(MultiPL-E)上,性能相比 Python 有所下降,但 Llama 3 仍然具有竞争力(表19)。
  • 多语言基准
    • 在多语言 MMLU 和 MGSM 基准上,8B 和 70B 模型在同类竞争者中大幅领先。405B 模型在 MGSM 上表现最佳,在 MMLU 上略低于 GPT-4o(表20)。
  • 数学与推理基准
    • Llama 3 405B 在 GSM8K 和 ARC-C 上是同类最佳,在 MATH 上是第二名,在 GPQA 上与 GPT-4o 相当(表2)。
  • 长上下文基准
    • 在“大海捞针”测试中,Llama 3 模型实现了 100% 的完美检索。在 ZeroSCROLLS 和 InfiniteBench 等基准上,405B 和 70B 模型也达到或超过了其他模型(表21)。
  • 工具使用性能
    • 在 Nexus、API-Bank 等零样本工具使用基准上,Llama 3 各变体均表现出色,通常优于或接近同类最佳模型(表22)。
    • 在代码执行任务的人工评估中,Llama 3 405B 在纯文本代码执行和绘图生成方面显著击败 GPT-4o,但在文件上传用例上落后(图16)。

5.3 人工评估

  • 实验内容:收集了约 7,000 个高质量、跨能力、跨难度的提示,对 Llama 3 405B 与 GPT-4 (0125 API)、GPT-4o 和 Claude 3.5 Sonnet 进行了成对比较。
  • 实验结果
    • Llama 3 405B 与 GPT-4 (0125) 表现大致相当。
    • 与 GPT-4o 相比,在英语提示上表现相当。
    • 与 Claude 3.5 Sonnet 相比,在多语言提示上表现相当,在单轮和多轮英语提示上胜出,但在编码和推理方面落后。
    • 总体而言,人工评估结果证实 Llama 3 405B 与行业领先的闭源模型非常有竞争力(图17)。

5.4 安全性

  • 安全评估
    • 通过内部构建的涵盖多种风险类别的基准(超过 4000 个提示),评估模型的违规率(VR)和错误拒绝率(FRR)。
    • 结果显示,Llama 3 在保持低错误拒绝率的同时,实现了非常有竞争力的低违规率,达到了帮助性和安全性之间的良好平衡(图19、20、21)。
  • 特定能力安全性
    • 多语言:通过收集特定语言的安全数据,有效降低了多语言场景下的安全风险(图19)。
    • 长上下文:通过在 SFT 数据中加入对抗性示例,有效抵御了多样本越狱攻击(图20)。
    • 工具使用:在搜索用例中,Llama 3 405B 比竞争对手更安全(图20)。
  • 网络安全与生化武器风险
    • 网络安全:在 CyberSecEval 基准测试中,Llama 3 在生成恶意代码方面没有显著漏洞,但对某些提示注入和代码解释器滥用提示易感(图22、23)。在提升新手和专家网络攻击者能力的“uplift”测试中,Llama 3 未显示出比开放互联网显著的额外风险。
    • 生化武器:在评估模型是否会增加生化武器攻击规划能力的“uplift”测试中,与仅使用网络搜索的对照组相比,使用 Llama 3 并未显示出显著的性能提升。
  • 红队测试
    • 通过内部专家团队进行对抗性测试,发现了多轮对话、角色扮演、混合语言、工具链等多种攻击向量,并将这些发现用于改进安全微调。
  • 系统级安全
    • 发布了 Llama Guard 3,一个基于 Llama 3 8B 的安全分类器,可检测输入输出是否违反安全策略。它能将违规率平均降低 65%,同时提供了可配置的灵活性(表25、26)。
    • 发布了 Prompt Guard(检测提示攻击)和 Code Shield(检测不安全代码生成)等基于提示的过滤机制,进一步增强系统级安全性(表28)。

A7 补充细节

6 推理

推理效率优化。我们研究了两种主要技术来提高 Llama 3 405B 模型的推理效率:(1) 流水线并行和 (2) FP8 量化。我们已经公开发布了我们的 FP8 量化实现。

6.1 流水线并行

推理并行化设置。当使用 BF16 数字表示模型参数时,Llama 3 405B 无法装入单台配备 8 个 Nvidia H100 GPU 的机器的 GPU 内存中。为了解决这个问题,我们在两台机器上的 16 个 GPU 上使用 BF16 精度进行模型推理的并行化。在每台机器内部,高 NVLink 带宽使得可以使用张量并行【索引180,Megatron-lm: Training multi-billion parameter language models using model parallelism,2019】。然而,在节点之间,连接带宽较低且延迟较高,因此我们改用流水线并行【索引90,Gpipe: Efficient training of giant neural networks using pipeline parallelism,2019】。

微批处理(Micro-batching)。在带流水线并行的训练中,气泡是主要的效率问题(参见第3.3节)。然而,在推理过程中它们不是问题,因为推理不涉及需要流水线刷新的后向传播。因此,我们使用微批处理来提高带流水线并行的推理吞吐量。

微批处理效果评估。我们评估了在 4,096 输入 tokens 和 256 输出 tokens 的推理工作负载中,在推理的键值缓存预填充阶段和解码阶段使用两个微批次的效果。我们发现,微批处理提高了相同本地批次大小的推理吞吞吐量;参见图24。这些改进是由于微批处理使得在这两个阶段中微批次能够并行执行。微批处理带来的额外同步点也增加了延迟,但总体而言,微批处理仍然导致了更好的吞吐量-延迟权衡。


Figure 24 微批处理对推理吞吐量和延迟的影响。左图:预填充阶段。右图:解码阶段。图中的数字对应于(微)批次大小。

6.2 FP8 量化

FP8 量化应用。我们利用 H100 GPU 的原生 FP8 支持进行低精度推理实验。为实现低精度推理,我们对模型内的大多数矩阵乘法应用 FP8 量化。具体来说,我们量化了模型中前馈网络层的大多数参数和激活值,这部分约占推理计算时间的 50%。我们没有量化模型自注意力层中的参数。我们利用动态缩放因子以获得更好的准确性【索引234,Smoothquant: Accurate and efficient post-training quantization for large language models,2024b】,并优化了我们的 CUDA 内核以减少计算缩放因子的开销。我们发现 Llama 3 405B 的质量对某些类型的量化很敏感,并做了一些额外的改动以提高模型输出质量:
1. 类似于 Zhang 等人【索引249,Training deep neural networks with joint quantization and pruning of weights and activations,2021】的做法,我们不在第一个和最后一个 Transformer 层中执行量化。
2. 高困惑度的 tokens(如日期)可能导致较大的激活值。这反过来又会导致 FP8 中的动态缩放因子过高和不可忽略的下溢数量,从而导致解码错误。


Figure 25 张量级和行级 FP8 量化示意图。右图:行级量化比左图的张量级量化能够使用更精细的激活因子。


Figure 26 Llama 3 405B 使用 BF16 和 FP8 推理的奖励分数分布。我们的 FP8 量化方法对模型的响应影响微乎其微。
为解决此问题,我们将动态缩放因子的上限设为 1200。
3. 我们使用行级量化,对参数和激活矩阵的行计算缩放因子(见图25)。我们发现这种方法比张量级量化效果更好。

量化误差的影响。在标准基准测试上的评估通常表明,即使没有这些缓解措施,FP8 推理的性能也与 BF16 推理相当。然而,我们发现这类基准测试并不能充分反映 FP8 量化的影响。当缩放因子没有上限时,即使基准测试性能强劲,模型偶尔也会产生损坏的响应。我们发现,与其依赖基准测试来衡量量化引起的分发变化,不如分析使用 FP8 和 BF16 产生的 100,000 个响应的奖励模型分数分布。图26 显示了我们量化方法得到的奖励分布结果。图中的结果表明,我们的 FP8 量化方法对模型的响应影响非常有限。

效率的实验评估。图27描绘了在预填充和解码阶段,使用 4,096 个输入 tokens 和 256 个输出 tokens 进行 Llama 3 405B 的 FP8 推理的吞吐量-延迟权衡。该图将 FP8 推理的效率与第6.1节中描述的两机 BF16 推理方法进行了比较。结果显示,在预填充阶段,使用 FP8 推理可带来高达 50% 的吞吐量提升,并且在解码阶段,吞吐量-延迟权衡也得到了显著改善。


Figure 27 与使用不同流水线并行设置的 BF16 推理相比,Llama 3 405B 进行 FP8 推理的吞吐量-延迟权衡。左图:预填充结果。右图:解码结果。

7 视觉实验

视觉能力集成方法。我们进行了一系列实验,通过一种由两个主要阶段组成的组合方法,将视觉识别能力融入 Llama 3。首先,我们通过在预训练的图像编码器【索引238,Demystifying clip data,2023】和预训练的语言模型之间引入并训练一组交叉注意力层【索引3,Flamingo: a visual language model for few-shot learning,2022】,在大量的图像-文本对上进行训练。这得到了如图28所示的模型。其次,我们引入了时间聚合层和额外的视频交叉注意力层,这些层在大量的视频-文本对集合上操作,以学习模型识别和处理视频中的时间信息。

组合方法的优势。基础模型开发的组合方法有几个优势:(1) 它使我们能够并行开发视觉和语言建模能力;(2) 它规避了联合预训练视觉和语言数据的复杂性,这些复杂性源于视觉数据的分词、来自不同模态的 tokens 的背景困惑度差异,以及模态之间的竞争;(3) 它保证了模型在纯文本任务上的性能不受引入视觉识别能力的影响;(4) 交叉注意力架构确保我们不必花费计算资源将全分辨率图像传递给日益增大的 LLM 主干(特别是每个 Transformer 层中的前馈网络),使其在推理时更高效。我们注意到,我们的多模态模型仍在开发中,尚未准备好发布。

章节结构。在第7.6节和第7.7节介绍我们的实验结果之前,我们先描述了我们用于训练视觉识别能力的数据、视觉组件的模型架构、我们如何扩展这些组件的训练,以及我们的预训练和后训练方案。

7.1 数据

数据描述。我们下面分别描述我们的图像和视频数据。

7.1.1 图像数据

图像数据处理流程。我们的图像编码器和适配器在图像-文本对上进行训练。我们通过一个复杂的数据处理流程构建这个数据集,该流程包括四个主要阶段:(1) 质量过滤,(2) 感知去重,(3) 重采样,和 (4) 光学字符识别。我们还应用了一系列安全缓解措施。
* 质量过滤:我们实施质量过滤器,通过启发式方法(如由【索引151,Learning transferable visual models from natural language supervision,2021】产生的低对齐分数)移除非英语标题和低质量标题。具体来说,我们移除了所有低于某个 CLIP 分数的图像-文本对。
* 去重:对大规模训练数据集进行去重有益于模型性能,因为它减少了在冗余数据上花费的训练计算【索引56,Scaling rectified flow transformers for high-resolution image synthesis,2024;索引114,Deduplicating training data makes language models better,2021;索引1,Semdedup: Data-efficient learning at web-scale through semantic deduplication,2023】和记忆【索引23,Extracting training data from diffusion models,2023;索引186,Diffusion art or digital forgery? investigating data replication in diffusion models,2023】。因此,我们出于效率和隐私原因对训练数据进行去重。为此,我们使用了一个内部版本的先进 SSCD 复制检测模型【索引146,A self-supervised descriptor for image copy detection,2022】来大规模去重图像。对于所有图像,我们首先使用 SSCD 模型计算一个 512 维的表示。我们使用这些嵌入在我们的数据集中对每张图像进行最近邻(NN)搜索,使用余弦相似度度量。我们将高于某个相似度阈值的样本定义为重复项。我们使用连通分量算法将这些重复项分组,并为每个连通分量仅保留一个图像-文本对。我们通过以下方式提高了去重流程的效率:(1) 使用 k-均值聚类对数据进行预聚类,以及 (2) 使用 FAISS【索引101,Billion-scale similarity search with gpus,2019】进行 NN 搜索和聚类。


Figure 28 本文研究的将多模态能力添加到 Llama 3 的组合方法示意图。该方法产生一个分五个阶段训练的多模态模型:(1) 语言模型预训练,(2) 多模态编码器预训练,(3) 视觉适配器训练,(4) 模型微调,和 (5) 语音适配器训练。

  • 重采样:我们通过类似于 Xu 等人【索引238,Demystifying clip data,2023】;Mahajan 等人【索引130,Exploring the limits of weakly supervised pretraining,2018】;Mikolov 等人【索引132,Efficient estimation of word representations in vector space,2013】的方法,确保图像-文本对的多样性。首先,我们通过解析高质量文本源构建一个 n-grams 词汇表。接下来,我们计算数据集中每个词汇 n-gram 的频率。然后,我们如下重采样数据:如果标题中的任何 n-gram 在词汇表中出现的次数少于 $T$ 次,我们保留相应的图像-文本对。否则,我们以概率 $p_T / f_i$ 独立地对标题中的每个 n-gram $n_i$ 进行采样,其中 $f_i$ 表示 n-gram $n_i$ 的频率;如果任何 n-gram 被采样,我们就保留该图像-文本对。这种重采样有助于提高在低频类别和细粒度识别任务上的性能。
  • 光学字符识别:我们通过提取图像中书写的文本并将其与标题连接,进一步改进了我们的图像-文本数据。书写文本是使用专有的光学字符识别(OCR)流程提取的。我们观察到,在训练数据中添加 OCR 数据极大地改善了需要 OCR 能力的任务,例如文档理解。

文档转录。为了提高我们的模型在文档理解任务上的性能,我们将文档页面渲染为图像,并将图像与其各自的文本配对。文档文本直接从源获取或通过文档解析流程获得。

安全性。我们主要关注确保图像识别的预训练数据集不包含不安全内容,例如儿童性虐待材料(CSAM)【索引207,Identifying and eliminating csam in generative ml training data and models,2023】。我们使用感知哈希方法(如 PhotoDNA【索引59,An overview of perceptual hashing,2021】)以及内部专有分类器,扫描我们所有的训练图像以查找 CSAM。我们还使用专有的媒体风险检索流程来识别和移除我们认为是 NSFW 的图像-文本对,例如,因为它们包含性或暴力内容。我们认为,在训练数据集中最小化此类材料的出现,可以在不影响其有用性的情况下提高最终模型的安全性。最后,我们对训练集中的所有图像进行人脸模糊处理。我们使用人类生成的、引用附加图像的提示来测试模型。

退火(Annealing)数据。我们通过使用 n-grams 将图像-标题对重采样至约 3.5 亿个样本,创建了一个退火数据集。由于 n-grams 重采样偏爱更丰富的文本描述,这选择了一个更高质量的数据子集。我们用来自五个额外来源的约 1.5 亿个样本来增强所得数据:
* 视觉定位:我们将文本中的名词短语与图像中的边界框或掩码联系起来。定位信息(边界框和掩码)在图像-文本对中以两种方式指定。(1) 我们在图像上叠加带有标记的框或掩码,并使用文本中的标记作为参考,类似于标记集(set-of-marks)【索引245,Set-of-mark prompting unleashes extraordinary visual grounding in gpt-4v,2023a】。(2) 我们将归一化的 (xmin, ymin, xmax, ymax) 坐标直接插入文本中,由特殊标记界定。
* 屏幕截图解析:我们从 HTML 代码中渲染屏幕截图,并让模型预测产生屏幕截图中特定元素的代码,类似于 Lee 等人【索引115,Pix2struct: Screenshot parsing as pretraining for visual language understanding,2023】。感兴趣的元素通过屏幕截图中的边界框来指示。
* 问答对:我们包含了问答对,这使我们能够使用那些因体量太大而无法用于模型微调的问答数据。
* 合成标题:我们包含了带有由模型早期版本生成的合成标题的图像。与原始标题相比,我们发现合成标题能更全面地描述图像。
* 合成生成的结构化图像:我们还包括了为各种领域(如图表、表格、流程图、数学方程式和文本数据)合成生成的图像。这些图像附有结构化表示,如相应的 markdown 或 LaTeX 表示法。除了提高模型在这些领域的识别能力外,我们发现这些数据对于通过文本模型为微调生成问答对也很有用。

7.1.2 视频数据

视频数据管理。对于视频预训练,我们使用一个大型的视频-文本对数据集。我们的数据集通过一个多阶段过程进行策划。我们使用基于规则的启发式方法对相关文本进行过滤和清洗,例如确保最小长度和修正大写。然后,我们运行语言识别模型以过滤掉非英语文本。我们运行 OCR 检测模型以过滤掉带有过多叠加文本的视频。为确保视频-文本对之间的合理对齐,我们使用了 CLIP【索引151,Learning transferable visual models from natural language supervision,2021】风格的图像-文本和视频-文本对比模型。我们首先使用视频中的单帧计算图像-文本相似度,并过滤掉低相似度的对,然后随后过滤掉视频-文本对齐度低的对。我们的一些数据包含静态或低运动的视频;我们使用基于运动分数的过滤方法【索引70,Emu video: Factorizing text-to-video generation by explicit image conditioning,2023】过滤掉此类数据。我们没有对视频的视觉质量应用任何过滤器,例如美学分数或分辨率过滤。

视频数据统计。我们的数据集包含平均时长 21 秒、中位时长 16 秒的视频,超过 99% 的视频时长在一分钟以内。空间分辨率在 320p 和 4K 视频之间有显著差异,超过 70% 的视频短边大于 720 像素。视频具有不同的宽高比,几乎所有视频的宽高比在 1:2 和 2:1 之间,中位数为 1:1。

7.2 模型架构

视觉识别模型组件。我们的视觉识别模型由三个主要部分组成:(1) 一个图像编码器,(2) 一个图像适配器,和 (3) 一个视频适配器。

图像编码器。我们的图像编码器是一个标准的视觉 Transformer (ViT;【索引52,An image is worth 16x16 words: Transformers for image recognition at scale,2020】),它被训练来对齐图像和文本【索引238,Demystifying clip data,2023】。我们使用 ViT-H/14 变体的图像编码器,它有 630M 参数,在 2.5B 的图像-文本对上训练了五个 epoch。图像编码器在 224 × 224 分辨率的图像上进行预训练;图像被分成 16 × 16 个大小相等的块(即块大小为 14x14 像素)。正如 ViP-Llava【索引22,Making large multimodal models understand arbitrary visual prompts,2024】等先前工作也证明的,我们观察到通过对比文本对齐目标训练的图像编码器无法保留细粒度的定位信息。为了缓解这个问题,我们采用了多层特征提取,除了最后一层的特征外,还提供了第 4、8、16、24 和 31 层的特征。此外,在交叉注意力层预训练之前,我们进一步插入了 8 个门控自注意力层(总共构成 40 个 Transformer 块),以学习特定于对齐的特征。因此,图像编码器最终拥有总共 850M 的参数和额外的层。通过多层特征,图像编码器为每个产生的 16 × 16 = 256 个块生成一个 7680 维的表示。在后续的训练阶段中,图像编码器的参数不会被冻结,因为我们发现这能提高性能,特别是在文本识别等领域。

图像适配器。我们在图像编码器产生的视觉 token 表示和语言模型产生的 token 表示之间引入了交叉注意力层【索引3,Flamingo: a visual language model for few-shot learning,2022】。交叉注意力层在核心语言模型中每四个自注意力层之后应用。与语言模型本身一样,交叉注意力层使用广义查询注意力(GQA)以提高效率。交叉注意力层为模型引入了大量额外的可训练参数:对于 Llama 3 405B,交叉注意力层有约 100B 参数。我们分两个阶段预训练我们的图像适配器:(1) 初始预训练,然后是 (2) 退火:
* 初始预训练。我们在上面描述的约 6B 图像-文本对数据集上预训练我们的图像适配器。出于计算效率的考虑,我们将所有图像调整大小以适应最多四个 336 × 336 像素的瓦片,我们安排瓦片以支持不同的宽高比,例如 672 × 672、672 × 336 和 1344 × 336。
* 退火。我们继续在上面描述的退火数据集中的约 5 亿张图像上训练图像适配器。在退火期间,我们增加了每个瓦片的图像分辨率,以提高需要更高分辨率图像的任务(例如,信息图表理解)的性能。

视频适配器。我们的模型最多输入 64 帧(从整个视频中均匀采样),每一帧都由图像编码器处理。我们通过两个组件来建模视频中的时间结构:(i)编码后的视频帧由一个时间聚合器聚合,该聚合器将 32 个连续帧合并为一个;(ii)在每四个图像交叉注意力层之前添加额外的视频交叉注意力层。时间聚合器实现为感知器重采样器(perceiver resampler)【索引94,Perceiver: General perception with iterative attention,2021;索引3,Flamingo: a visual language model for few-shot learning,2022】。我们使用每个视频 16 帧进行预训练(聚合为 1 帧),但在监督微调期间将输入帧数增加到 64 帧。对于 Llama 3 7B 和 70B,视频聚合器和交叉注意力层分别有 0.6B 和 4.6B 参数。

7.3 模型扩展

视觉模型训练的扩展策略。在将视觉识别组件添加到 Llama 3 后,模型包含自注意力层、交叉注意力层和一个 ViT 图像编码器。为了训练较小的 8B 和 70B 参数模型的适配器,我们发现数据和张量并行的组合是最高效的。在这些规模下,模型或流水线并行不会提高效率,因为模型参数的收集会主导计算。然而,在训练 405B 参数模型的适配器时,我们确实使用了流水线并行(除了数据和张量并行)。在这种规模下训练引入了三个新挑战,除了第3.3节中概述的那些:模型异构性、数据异构性和数值不稳定性。

模型异构性。模型计算是异构的,因为对某些 tokens 的计算比其他 tokens 多。特别是,图像 tokens 由图像编码器和交叉注意力层处理,而文本 tokens 仅由语言主干处理。这种异构性导致了流水线并行调度中的瓶颈。我们通过确保每个流水线阶段包含五层来解决这个问题:即语言主干中的四个自注意力层和一个交叉注意力层。(回想一下,我们在每四个自注意力层后引入一个交叉注意力层。)此外,我们在所有流水线阶段复制图像编码器。因为我们在成对的图像-文本数据上进行训练,这使我们能够在图像和文本部分的计算之间进行负载均衡。

数据异构性。数据是异构的,因为平均而言,图像比相关文本有更多的 tokens:一张图像有 2,308 个 tokens,而相关文本平均只有 192 个 tokens。因此,交叉注意力层的计算需要比自注意力层的计算更多的时间和内存。我们通过在图像编码器中引入序列并行化来解决这个问题,以便每个 GPU 处理大致相同数量的 tokens。因为平均文本大小相对较短,我们还使用了大得多的微批次大小(8 而不是 1)。

数值不稳定性。在将图像编码器添加到模型后,我们发现在 bf16 中执行梯度累积会导致数值不稳定性。对此最可能的解释是,图像 tokens 通过所有交叉注意力层被引入到语言主干中。这意味着图像 token 表示中的数值偏差对整体计算有超大的影响,因为误差会被放大。我们通过在 FP32 中执行梯度累积来解决这个问题。

7.4 预训练

图像适配器预训练。我们从预训练的文本模型和视觉编码器权重进行初始化。视觉编码器被解冻,而文本模型权重保持冻结,如上所述。首先,我们使用 6B 的图像-文本对来训练模型,其中每张图像被调整大小以适应四个 336 × 336 像素的瓦片。我们使用 16,384 的全局批量大小和余弦学习率调度,初始学习率为 10 × 10⁻⁴,权重衰减为 0.01。初始学习率是基于小规模实验确定的。然而,这些发现在非常长的训练计划中并未很好地泛化,当损失值停滞时,我们在训练期间几次降低了学习率。在基础预训练之后,我们进一步增加图像分辨率,并在退火数据集上继续训练相同的权重。优化器通过预热重新初始化到 2 × 10⁻⁵ 的学习率,并再次遵循余弦调度。

视频适配器预训练。对于视频预训练,我们从上述图像预训练和退火的权重开始。我们按照架构描述添加视频聚合器和交叉注意力层,并随机初始化它们。我们冻结了模型中除视频特定参数(聚合器和视频交叉注意力)外的所有参数,并在视频预训练数据上训练它们。我们使用与图像退火阶段相同的训练超参数,学习率略有不同。我们从整个视频中均匀采样 16 帧,并用四个大小为 448 × 448 像素的块来表示每一帧。我们在视频聚合器中使用 16 的聚合因子,从而得到一个有效帧,文本 tokens 与之进行交叉注意力。在训练期间,我们使用 4,096 的全局批量大小,190 tokens 的序列长度,以及 10⁻⁴ 的学习率。

7.5 后训练

后训练流程概述。在本节中,我们描述了我们视觉适配器的后训练方案。在预训练之后,我们对模型在高度策划的多模态对话数据上进行微调,以实现聊天功能。我们进一步实施直接偏好优化(DPO)以提升人类评估性能,并使用拒绝采样来提高多模态推理能力。最后,我们增加了一个质量调优阶段,在这一阶段,我们继续在一个非常小的高质量对话数据上对模型进行微调,这进一步提升了人类评估,同时在各种基准测试中保持了性能。下面将提供每个步骤的更多细节。

7.5.1 监督微调数据

SFT 数据来源。我们下面分别描述我们用于图像和视频能力的监督微调(SFT)数据。

图像SFT数据。我们利用了多种不同数据集的混合进行监督微调。
* 学术数据集。我们通过模板或 LLM 重写,将经过高度筛选的现有学术数据集集合转换为问答对。LLM 重写的目的是用不同的指令来增强数据,并提高答案的语言质量。
* 人类标注。我们通过人类标注员为广泛的任务(开放式问答、字幕、实际用例等)和领域(例如,自然图像和结构化图像)收集多模态对话数据。标注员被提供图像并被要求编写对话。为确保多样性,我们对大规模数据集进行聚类,并在不同聚类中均匀采样图像。此外,我们通过使用 k-近邻扩展种子,为一些特定领域获取了额外的图像。标注员还被提供了现有模型的中间检查点,以促进模型在环(model-in-the-loop)式的标注,这样模型的生成可以被用作标注员的起点,然后提供额外的人类编辑。这是一个迭代过程,其中模型检查点会定期更新为在最新数据上训练的性能更好的版本。这增加了人类标注的数量和效率,同时也提高了其质量。
* 合成数据。我们探索了通过使用图像的文本表示和文本输入的 LLM 来生成合成多模态数据的不同方法。其高层思想是利用文本输入 LLM 的推理能力在文本领域生成问答对,并用其相应的图像替换文本表示,以产生合成多模态数据。例子包括将问答数据集中的文本渲染为图像,或将表格数据渲染为表格和图表的合成图像。此外,我们使用现有图像的标题和 OCR 提取来生成与图像相关的额外对话或问答数据。

视频SFT数据。与图像适配器类似,我们使用带有预先存在标注的学术数据集,并将其转换为适当的文本指令和目标响应。目标被转换为开放式响应或多项选择选项,以更合适者为准。我们要求人类用问题和相应答案来标注视频。标注员被要求专注于那些无法仅凭单帧回答的问题,以引导标注员关注需要时间理解的问题。

7.5.2 监督微调配方

SFT 配方。我们下面分别描述我们用于图像和视频能力的监督微调(SFT)配方。

图像SFT配方。我们从预训练的图像适配器进行初始化,但将预训练语言模型的权重热替换为指令调优的语言模型权重。语言模型权重保持冻结以维持纯文本性能,即我们只更新视觉编码器和图像适配器权重。

模型平均策略。我们微调模型的方法类似于 Wortsman 等人【索引228,Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time,2022】。首先,我们使用多个随机数据子集、学习率和权重衰减值进行超参数扫描。接下来,我们根据模型的性能对它们进行排名。最后,我们对前 K 个模型的权重进行平均,以获得最终模型。K 的值通过评估平均后的模型并选择性能最高的实例来确定。我们观察到,平均后的模型始终比通过网格搜索找到的最佳单个模型产生更好的结果。此外,该策略降低了对超参数的敏感性。

视频SFT配方。对于视频 SFT,我们使用预训练的权重来初始化视频聚合器和交叉注意力层。模型中的其余参数,即图像权重和 LLM,则从它们各自微调阶段后的相应模型进行初始化。与视频预训练类似,然后我们仅在视频 SFT 数据上对视频参数进行微调。在此阶段,我们将视频长度增加到 64 帧,并使用 32 的聚合因子来获得两个有效帧。块的分辨率也增加以与相应的图像超参数保持一致。

7.5.3 偏好数据

偏好数据集构建。我们为奖励建模和直接偏好优化构建了多模态成对偏好数据集。
* 人类标注。人类标注的偏好数据包括对两个不同模型输出的比较,标记为“选择的”和“拒绝的”,并带有7级评分。用于生成响应的模型是从一组最佳近期模型中即时采样的,每个模型都具有不同的特性。我们每周更新模型池。除了偏好标签,我们还要求标注员提供可选的人类编辑,以纠正“选择的”响应中的不准确之处,因为视觉任务对不准确性的容忍度很低。请注意,人类编辑是一个可选步骤,因为在实践中存在数量和质量之间的权衡。
* 合成数据。通过使用纯文本 LLM 编辑并故意在监督微调数据集中引入错误,也可以生成合成偏好对。我们以对话数据为输入,并使用一个 LLM 引入细微但有意义的错误(例如,更改对象、更改属性、在计算中添加错误等)。这些编辑后的响应被用作负面的“拒绝的”样本,并与“选择的”原始监督微调数据配对。
* 拒绝采样。此外,为了创建更多符合策略的负样本,我们利用拒绝采样的迭代过程来收集额外的偏好数据。我们将在以下部分更详细地讨论我们对拒绝采样的使用。从高层次来看,拒绝采样用于从模型中迭代采样高质量的生成结果。因此,作为副产品,所有未被选中的生成结果都可以用作负面的拒绝样本,并用作额外的偏好数据对。

7.5.4 奖励建模

视觉奖励模型训练。我们在视觉 SFT 模型和语言 RM 的基础上训练一个视觉奖励模型(RM)。视觉编码器和交叉注意力层从视觉 SFT 模型初始化并在训练期间解冻,而自注意力层从语言 RM 初始化并保持冻结。我们观察到冻结语言 RM 部分通常会带来更好的准确性,特别是在需要 RM 根据其知识或语言质量进行判断的任务上。我们采用与语言 RM 相同的训练目标,但在批次上平均的奖励 logits 的平方上增加了一个加权的正则化项,以防止奖励分数漂移。

视觉奖励模型数据。第7.5.3节中的人类偏好标注用于训练视觉 RM。我们遵循与语言偏好数据(第4.2.1节)相同的做法,创建具有明确排序的两个或三个对(编辑 > 选择 > 拒绝)。此外,我们还通过扰动与图像中信息相关的单词或短语(如数字或视觉文本)来合成增强负面响应。这鼓励视觉 RM 将其判断建立在实际图像内容的基础上。

7.5.5 直接偏好优化

视觉 DPO 训练。类似于语言模型(第4.1.4节),我们使用第7.5.3节中描述的偏好数据,通过直接偏好优化(DPO)【索引151,Direct preference optimization: Your language model is secretly a reward model,2023】进一步训练视觉适配器。为了应对后训练轮次期间的分布偏移,我们只保留最近批次的人类偏好标注,同时丢弃那些足够偏离策略的批次(例如,如果基础预训练模型已更改)。我们发现,与始终冻结参考模型相比,每 k 步以指数移动平均(EMA)方式更新它有助于模型从数据中学到更多,从而在人类评估中获得更好的性能。总的来说,我们观察到,在每次微调迭代中,视觉 DPO 模型在人类评估中始终比其 SFT 起点表现更好。

7.5.6 拒绝采样

拒绝采样在推理任务中的应用。大多数可用的问答对只包含最终答案,而缺乏训练一个在推理任务上泛化良好的模型所需的思维链解释。我们使用拒绝采样为这些示例生成缺失的解释,并提升模型的推理能力。

拒绝采样流程。给定一个问答对,我们通过使用不同的系统提示或温度对微调后的模型进行采样来生成多个答案。接下来,我们通过启发式方法或 LLM 评判者将生成的答案与真实答案进行比较。最后,我们通过将正确答案添加回微调数据混合中来重新训练模型。我们发现为每个问题保留多个正确答案是很有用的。

质量控制。为了确保我们只将高质量的示例添加回训练中,我们实施了以下两个保障措施。首先,我们发现一些示例包含不正确的解释,尽管最终答案是正确的。我们观察到,对于只有一小部分生成答案是正确的问题,这种模式出现得更频繁。因此,我们丢弃了答案正确概率低于某个阈值的问题的答案。其次,由于语言或风格的差异,评分者更偏爱某些答案。我们使用奖励模型来选择质量最高的前K个答案,并将它们添加回训练中。

7.5.7 质量调优

质量调优(QT)。我们策划了一个小而精选的 SFT 数据集,其中所有样本都经过人类或我们最好的模型重写和验证,以满足我们的最高标准。我们用这些数据训练 DPO 模型以提高响应质量,这个过程称为质量调优(QT)。我们发现,当 QT 数据集覆盖广泛的任务并应用适当的早停时,QT 能显著改善人类评估,而不会影响由基准测试验证的泛化能力。我们在此阶段纯粹基于基准测试来选择检查点,以确保能力得到保持或提升。

Table 29 我们连接到 Llama 3 的视觉模块的图像理解性能。我们将模型性能与 GPT-4V、GPT-4o、Gemini 1.5 Pro 和 Claude 3.5 Sonnet 进行了比较。△结果是使用外部 OCR 工具获得的。

7.6 图像识别结果

评估任务。我们评估了 Llama 3 图像理解能力在一系列任务上的性能,这些任务涵盖了自然图像理解、文本理解、图表理解和多模态推理:
* MMMU【索引242,Mmmu: A massive multi-discipline multimodal understanding and reasoning benchmark for expert agi,2024a】是一个具有挑战性的多模态推理数据集,模型需要理解图像并解决涵盖30个不同学科的大学水平问题。这包括多项选择题和开放式问题。我们按照其他工作的做法,在包含900张图像的验证集上评估我们的模型。
* VQAv2【索引9,VQA: Visual Question Answering,2015】测试模型结合图像理解、语言理解和常识知识来回答关于自然图像的一般性问题的能力。
* AI2 Diagram【索引107,A diagram is worth a dozen images,2016】评估模型解析科学图表并回答相关问题的能力。我们使用与 Gemini 和 http://x.ai 相同的评估协议,并报告使用透明边界框的分数。
* ChartQA【索引128,ChartQA: A benchmark for question answering about charts with visual and logical reasoning,2022】是一个具有挑战性的图表理解基准。这要求模型能视觉上理解不同种类的图表并回答关于图表的逻辑问题。
* TextVQA【索引183,Towards vqa models that can read,2019】是一个流行的基准数据集,要求模型阅读和推理图像中的文本以回答相关问题。这测试了模型在自然图像上的 OCR 理解能力。
* DocVQA【索引128,Docvqa: A dataset for vqa on document images,2020】是一个专注于文档分析和识别的基准数据集。它包含各种文档的图像,评估模型执行 OCR 理解和推理文档内容以回答相关问题的能力。

实验结果。表29展示了我们实验的结果。表中的结果显示,我们附加到 Llama 3 的视觉模块在不同模型容量下,在广泛的图像识别基准上都表现出竞争力。使用最终的 Llama 3-V 405B 模型,我们在所有基准上都优于 GPT-4V,同时略微落后于 Gemini 1.5 Pro 和 Claude 3.5 Sonnet。Llama 3 405B 在文档理解任务上表现尤为突出。

7.7 视频识别结果

视频识别评估基准。我们评估了 Llama 3 的视频适配器在三个基准测试上的表现:
* PerceptionTest【索引149,Perception test: A diagnostic benchmark for multimodal video models,2023】评估模型回答时间推理问题的能力,重点关注技能(记忆、抽象、物理、语义)和不同类型的推理(描述性、解释性、预测性、反事实)。它包含 11.6K 个测试问答对,每个视频平均长 23 秒,由全球 100 名参与者拍摄,展示具有感知趣味性的任务。我们专注于多项选择问答任务,每个问题配有三个可能选项。我们报告在留出的测试集上的性能,通过向在线挑战服务器提交我们的预测来访问。
* NExT-QA【索引235,Next-qa: Next phase of question-answering to explaining temporal actions,2021】是另一个时间和因果推理基准,侧重于开放式问答。它包含 1K 个测试视频,每个视频平均长 44 秒,配有 9K 个问题。评估通过使用 Wu-Palmer 相似度(WUPS)【索引230,Verb semantics and lexical selection,1994】将模型的回答与真实答案进行比较来进行。
* TVQA【索引117,Tvqa: Localized, compositional video question answering,2018】评估模型执行组合推理的能力,需要对相关时刻进行时空定位,识别视觉概念,并与基于字幕的对话进行联合推理。该数据集源自热门电视节目,因此还测试了模型利用其对这些电视节目的外部知识来回答问题的能力。它包含超过 15K 个验证问答对,每个相应的视频剪辑平均长 76 秒。它也采用多项选择格式,每个问题有五个选项,我们按照先前的工作【索引136,GPT-4 blog,2023b】报告在验证集上的性能。
* ActivityNet-QA【索引242,Activitynet-qa: A dataset for understanding complex web videos via question answering,2019】评估模型对长视频剪辑进行推理以理解动作、空间关系、时间关系、计数等的能力。它包含来自 800 个视频的 8K 个测试问答对,每个视频平均长 3 分钟。对于评估,我们遵循先前工作的协议【索引81,Gemini: A family of highly capable multimodal models,2023;索引124,Video-llava: Learning united visual representation by alignment before projection,2023;索引129,Video-chatgpt: Towards detailed video understanding via large vision and language models,2024】,模型生成简短的单词或短语答案,并使用 GPT-3.5 API 将其与真实答案进行比较来评估输出的正确性。我们报告由 API 评估的平均准确率。

推理设置。在进行推理时,我们从完整的视频剪辑中均匀采样帧,并将这些帧与简短的文本提示一起输入模型。由于我们的大多数基准测试都涉及回答多项选择题,我们使用以下提示:从以下选项中选择正确答案:{问题}。只回答正确选项的字母,不要添加其他内容。 对于需要生成简短答案的基准测试(例如,ActivityNet-QA 和 NExT-QA),我们使用以下提示:用一个单词或短语回答问题。{问题}。 对于 NExT-QA,由于评估指标(WUPS)对长度和使用的具体词语敏感,我们还额外提示模型要具体,并用最突出的答案回应,例如在问地点问题时指定“客厅”而不是简单地回应“房子”。对于包含字幕的基准测试(即 TVQA),我们在推理时在提示中包含剪辑对应的字幕。

视频识别结果。我们在表30中展示了 Llama 3 8B 和 70B 的性能。我们将 Llama 3 的性能与两个 Gemini 和两个 GPT-4 模型进行了比较。请注意,我们所有的结果都是零样本的,因为我们没有将这些基准测试的任何部分包含在我们的训练或微调数据中。我们发现,我们的 Llama 3 模型在后训练期间训练了一个小型视频适配器,其性能非常有竞争力,在某些情况下甚至优于其他可能从预训练开始就利用原生多模态处理的模型。鉴于我们只评估了 8B 和 70B 参数模型,Llama 3 在视频识别方面的表现尤其出色。Llama 3 在 PerceptionTest 上取得了最佳性能,表明该模型具有强大的复杂时间推理能力。在像 ActivityNet-QA 这样的长视频活动理解任务上,尽管 Llama 3 只处理多达 64 帧(这意味着对于一个 3 分钟长的视频,模型每 3 秒只处理一帧),它仍能获得很好的结果。

Table 30 我们附加到 Llama 3 的视觉模块的视频理解性能。我们发现在涵盖长格式和时间视频理解的一系列任务中,我们的 Llama 3 8B 和 70B 参数的视觉适配器具有竞争力,有时甚至优于替代模型。

8 语音实验

语音能力集成方法。我们进行了实验,研究一种将语音能力集成到 Llama 3 中的组合方法,类似于我们用于视觉识别的方法。在输入端,一个编码器和一个适配器被整合进来处理语音信号。我们利用一个系统提示(文本形式)来启用 Llama 3 中语音理解的不同操作模式。如果没有提供系统提示,模型将作为一个通用口语对话模型,能够以与纯文本版 Llama 3 一致的方式有效回应用户语音。对话历史作为提示前缀引入,以改善多轮对话体验。我们还实验了启用 Llama 3 用于自动语音识别(ASR)和自动语音翻译(AST)的系统提示。Llama 3 的语音接口支持多达 34 种语言。它还允许文本和语音的交错输入,使模型能够解决高级的音频理解任务。

语音生成方法。我们还试验了一种语音生成方法,其中我们实现了一个流式文本到语音(TTS)系统,在语言模型解码期间即时生成语音波形。我们基于一个专有的 TTS 系统为 Llama 3 设计了语音生成器,并且没有为语音生成微调语言模型。相反,我们专注于通过在推理时利用 Llama 3 嵌入来提高语音合成的延迟、准确性和自然度。语音接口如图28和29所示。


Figure 29 我们的 Llama 3 语音接口架构。

8.1 数据

8.1.1 语音理解

数据分类。训练数据可分为两类。预训练数据包括大量未标记的语音,用于以自监督方式初始化语音编码器。监督微调数据包括语音识别、语音翻译和口语对话数据;这些数据用于在与大型语言模型集成时解锁特定能力。

预训练数据。为了预训练语音编码器,我们整理了一个约 1500 万小时的语音录音数据集,涵盖了大量语言。我们使用语音活动检测(VAD)模型过滤我们的音频数据,并选择 VAD 阈值高于 0.7 的音频样本进行预训练。在语音预训练数据中,我们还重点确保不含个人身份信息(PII)。我们使用 Presidio 分析器来识别此类 PII。

语音识别和翻译数据。我们的 ASR 训练数据包含 23 万小时手动转录的语音录音,涵盖 34 种语言。我们的 AST 训练数据包含 9 万小时的翻译,方向为从 33 种语言到英语以及从英语到 33 种语言。这些数据包含监督数据和使用 NLLB 工具包【索引134,No language left behind: Scaling humancentered machine translation,2022】生成的合成数据。使用合成 AST 数据使我们能够提高低资源语言的模型质量。我们数据中的语音片段最大长度为 60 秒。

口语对话数据。为了微调用于口语对话的语音适配器,我们通过让语言模型回应这些提示的转录文本,为语音提示合成了响应【索引60,Audiochatllama: Towards general-purpose speech abilities for llms,2024】。我们使用 ASR 数据集的一个子集,其中包含 6 万小时的语音,以这种方式生成了合成数据。此外,我们通过在用于微调 Llama 3 的数据子集上运行 Voicebox TTS 系统【索引113,Voicebox: Text-guided multilingual universal speech generation at scale,2024】,生成了 2.5 万小时的合成数据。我们使用了几种启发式方法来选择一个与语音分布相匹配的微调数据子集。这些启发式方法包括专注于结构简单且不含非文本符号的相对较短的提示。

8.1.2 语音生成

语音生成数据集。语音生成数据集主要包括用于训练文本规范化(TN)模型和韵律模型(PM)的数据。两种训练数据都通过 Llama 3 嵌入作为附加输入特征进行增强,以提供上下文信息。

文本规范化数据。我们的 TN 训练数据集包括 5.5 万个样本,涵盖了需要非平凡规范化的广泛符号类别(例如,数字、日期、时间)。每个样本都是一对书面形式的文本和相应的规范化口语形式的文本,并带有一个推断出的执行规范化的手工 TN 规则序列。

韵律模型数据。PM 训练数据包括从一个 5 万小时的 TTS 数据集中提取的语言和韵律特征,这些数据集是专业配音演员在录音室设置中录制的成对转录文本和音频。

Llama 3 嵌入。Llama 3 嵌入取自第 16 个解码层的输出。我们专门使用 Llama 3 8B 模型,并为给定的文本(即 TN 的书面形式输入文本或 PM 的音频转录)提取嵌入,就好像它们是由带有空用户提示的 Llama 3 模型生成的一样。在给定的样本中,Llama 3 词元序列中的每个块都与 TN 或 PM 的本地输入序列中的相应块明确对齐,即 TN 特定的文本词元(由 unicode 类别界定)或音素率特征。这允许用 Llama 3 词元和嵌入的流式输入来训练 TN 和 PM 模块。

8.2 模型架构

8.2.1 语音理解

语音输入模块架构。在输入端,语音模块由两个连续的模块组成:一个语音编码器和一个适配器。语音模块的输出直接作为词元表示输入到语言模型中,实现了语音和文本词元之间的直接交互。此外,我们引入了两个新的特殊词元来包围语音表示序列。语音模块与视觉模块(见第7节)有显著不同,后者通过交叉注意力层将多模态信息输入到语言模型中。相比之下,语音模块生成的嵌入可以与文本词元无缝集成,使语音接口能够利用 Llama 3 语言模型的所有能力。

语音编码器。我们的语音编码器是一个拥有 1B 参数的 Conformer【索引84,Conformer: Convolution-augmented transformer for speech recognition,2020】模型。模型的输入是 80 维的梅尔频谱图特征,这些特征首先由一个步长为 4 的堆叠层处理,然后通过线性投影将帧长减少到 40 毫秒。得到的特征由一个包含 24 个 Conformer 层的编码器处理。每个 Conformer 层具有 1536 的潜在维度,并由两个维度为 4096 的 Macron-net 风格的前馈网络、一个核大小为 7 的卷积模块和一个带有 24 个注意力头的旋转注意力模块【索引188,Roformer: Enhanced transformer with rotary position embedding,2024】组成。

语音适配器。语音适配器包含约 1 亿个参数。它由一个卷积层、一个旋转 Transformer 层和一个线性层组成。卷积层的核大小为 3,步长为 2,旨在将语音帧长度减少到 80 毫秒。这使得模型能够向语言模型提供更粗粒度的特征。Transformer 层具有 3072 的潜在维度和一个维度为 4096 的前馈网络,它在卷积下采样后进一步处理来自语音的上下文信息。最后,线性层将输出维度映射到与语言模型嵌入层相匹配的维度。

8.2.2 语音生成

语音生成中的Llama 3嵌入应用。我们在语音生成的两个关键组件中使用了 Llama 3 8B 嵌入:文本规范化和韵律建模。TN 模块通过上下文转换书面文本为口语形式来确保语义正确性。PM 模块通过使用这些嵌入来预测韵律特征,增强了自然性和表现力。它们共同实现了准确和自然的语音生成。

文本规范化。作为决定生成语音语义正确性的关键,文本规范化(TN)模块负责将书面文本根据上下文转换为相应的口语形式,最终由下游组件发声。例如,书面文本“123”根据语义上下文可以读作基数词(“一百二十三”)或逐位拼读(“一二三”)。TN 系统包含一个流式基于 LSTM 的序列标注模型,该模型预测用于转换输入文本的手工 TN 规则序列【索引105,Multi-task learning for front-end text processing in tts,2024】。该神经模型还通过交叉注意力接收 Llama 3 嵌入,以利用其中编码的上下文信息,从而实现最小的文本词元前瞻和流式输入/输出。

韵律建模。为了增强合成语音的自然性和表现力,我们集成了一个仅解码器的基于 Transformer 的韵律模型(PM)【索引151,Learning transferable visual models from natural language supervision,2021】,该模型将 Llama 3 嵌入作为额外输入。这种集成利用了 Llama 3 的语言能力,利用其文本输出和词元率的中间嵌入【索引49,Bert: Pre-training of deep bidirectional transformers for language understanding,2018;索引51,Unified language model pre-training for natural language understanding and generation,2019;索引153,Exploring the limits of transfer learning with a unified text-to-text transformer,2020;索引83,Prompttts: Controllable text-to-speech with text descriptions,2023】来增强韵律特征的预测,从而减少了模型所需的前瞻。

韵律模型架构。PM 集成了多个输入组件以生成全面的韵律预测:源自上述文本规范化前端的语言特征、词元和嵌入。PM 预测三个关键的韵律特征:每个音素的对数时长、音素时长内的对数 F0(基频)平均值和对数功率平均值。该模型包括一个单向 Transformer 和六个注意力头。每个块包括交叉注意力层和带有 864 隐藏维度的双全连接层。PM 的一个显著特点是其双交叉注意力机制,一个层专用于语言输入,另一个专用于 Llama 嵌入。这种设置有效地管理了不同的输入速率,而无需显式对齐。

8.3 训练配方

8.3.1 语音理解

语音模块训练阶段。语音模块的训练分两个阶段进行。第一阶段,语音预训练,利用未标记的数据来训练一个在语言和声学条件上具有强泛化能力的语音编码器。在第二阶段,监督微调,适配器和预训练的编码器与语言模型集成,并与语言模型联合训练,同时 LLM 保持冻结。这使模型能够响应语音输入。此阶段使用与语音理解能力相对应的标记数据。

多语言 ASR/AST 训练策略。多语言 ASR 和 AST 建模常常导致语言混淆/干扰,从而降低性能。一种流行的缓解方法是加入语言识别(LID)信息,无论是在源端还是目标端。这可以提高预定方向的性能,但也可能丧失通用性。例如,如果一个翻译系统在源端和目标端都期望有 LID,那么模型在训练中未见过的方向上可能不会表现出良好的零样本性能。因此,我们的挑战是设计一个在一定程度上允许 LID 信息,但又保持模型足够通用,以便模型可以在未见过的方向上进行语音翻译的系统。为了解决这个问题,我们设计了只包含要发出的文本(目标端)的 LID 的系统提示。这些提示中没有语音输入(源端)的 LID 信息,这也可能使其能够处理语码转换的语音。对于 ASR,我们使用以下系统提示:用 {language} 重复我的话:,其中 {language} 来自 34 种语言之一(英语、法语等)。对于语音翻译,系统提示是:将以下句子翻译成 {language}:。这种设计已被证明能有效提示语言模型以期望的语言进行响应。我们在训练和推理期间使用了相同的系统提示。

语音预训练。我们使用自监督的 BEST-RQ 算法【索引35,Self-supervised learning with random-projection quantizer for speech recognition,2022】来预训练语音编码器。我们以 2.5% 的概率对输入的梅尔频谱图应用长度为 32 帧的掩码。如果语音话语长于 60 秒,我们随机裁剪 6K 帧,对应 60 秒的语音。我们通过堆叠 4 个连续帧来量化梅尔频谱图特征,将 320 维向量投影到 16 维空间,并在一个包含 8,192 个向量的码本内根据余弦相似度度量进行最近邻搜索。为了稳定预训练,我们使用了 16 个不同的码本。投影矩阵和码本是随机初始化的,并且在整个模型训练过程中不更新。出于效率原因,多 softmax 损失仅在掩码帧上使用。编码器训练了 50 万步,全局批量大小为 2,048 个话语。

监督微调。在监督微调阶段,预训练的语音编码器和随机初始化的适配器与 Llama 3 进一步联合优化。在此过程中,语言模型保持不变。训练数据是 ASR、AST 和口语对话数据的混合。Llama 3 8B 的语音模型训练了 65 万次更新,使用 512 个话语的全局批量大小和 10⁻⁴ 的初始学习率。Llama 3 70B 的语音模型训练了 60 万次更新,使用 768 个话语的全局批量大小和 4 × 10⁻⁵ 的初始学习率。

8.3.2 语音生成

韵律模型训练策略。为了支持实时处理,韵律模型采用了一种前瞻机制,该机制考虑了固定数量的未来音素和可变数量的未来词元。这确保了在处理传入文本时具有一致的前瞻,这对于低延迟语音合成应用至关重要。

训练。我们开发了一种利用因果掩码的动态对齐策略,以促进语音合成中的流式处理能力。该策略结合了对固定数量未来音素和可变数量未来词元的前瞻机制,与文本规范化期间的分块过程保持一致(第8.1.2节)。对于每个音素,词元前瞻包括由块大小定义的最大词元数,导致 Llama 嵌入的前瞻可变,但音素的前瞻固定。

训练细节。Llama 3 嵌入来源于 Llama 3 8B 模型,该模型在韵律模型训练期间保持冻结。输入的音素率特征包括语言和说话人/风格可控性元素。模型训练批量大小为 1,024 个话语,每个话语最大长度为 500 个音素。我们使用 AdamW 优化器,学习率为 9 × 10⁻⁴,训练超过 100 万次更新,前 3,000 次更新进行学习率预热,之后遵循余弦调度。

推理。在推理过程中,采用相同的前瞻机制和因果掩码策略,以确保训练和实时处理之间的一致性。PM 以流式方式处理传入的文本,对于音素率特征,逐个音素更新输入,对于词元率特征,则逐块更新。仅当该块的第一个音素为当前音素时,才更新新的块输入,从而保持与训练期间相同的对齐和前瞻。

韵律目标预测。对于韵律目标预测,我们采用了延迟模式方法【索引108,Text-free prosody-aware generative spoken language modeling,2021】,该方法增强了模型捕捉和再现长程韵律依赖的能力。这种方法有助于合成语音的自然性和表现力,确保了低延迟和高质量的输出。

8.4 语音理解结果

评估任务。我们评估了 Llama 3 语音接口在三个任务上的语音理解能力:(1) 自动语音识别,(2) 语音翻译,和 (3) 口语问答。我们将 Llama 3 语音接口的性能与三个最先进的语音理解模型进行了比较:Whisper【索引151,Robust speech recognition via large-scale weak supervision,2023】、SeamlessM4T【索引13,Seamless: Multilingual expressive and streaming speech translation,2023】和 Gemini。在所有评估中,我们对 Llama 3 的词元预测使用了贪婪搜索。

语音识别。我们评估了在英语数据集 Multilingual LibriSpeech (MLS; 【索引148,Mls: A large-scale multilingual dataset for speech research,2020】)、LibriSpeech【索引141,Librispeech: an asr corpus based on public domain audio books,2015】、VoxPopuli【索引215,Voxpopuli: A large-scale multilingual speech corpus for representation learning, semi-supervised learning and interpretation,2021a】以及多语言 FLEURS 数据集【索引37,Fleurs: Few-shot learning evaluation of universal representations of speech,2023】的一个子集上的 ASR 性能。在评估中,解码结果使用 Whisper 文本规范化器进行后处理,以确保与其他模型报告结果的比较一致性。在所有基准测试中,我们测量了 Llama 3 语音接口在这些基准测试的标准测试集上的词错误率,除了中文、日文、韩文和泰文,报告的是字符错误率。

Table 31 Llama 3 语音接口在语音识别任务上的词错误率。我们报告了 Whisper、SeamlessM4T 和 Gemini 的性能作为参考。

Table 32 Llama 3 语音接口在语音翻译任务上的 BLEU 分数。我们报告了 Whisper 和 SeamlessM4T 的性能作为参考。

ASR 评估结果。表31显示了 ASR 评估的结果。它展示了 Llama 3(以及更广泛的多模态基础模型)在语音识别任务上的强大性能:我们的模型在所有基准测试上都优于专为语音设计的模型,如 Whisper 和 SeamlessM4T。在 MLS English 上,Llama 3 的性能与 Gemini 相似。

语音翻译。我们还在语音翻译任务上评估了我们的模型,即要求模型将非英语语音翻译成英语文本。在这些评估中,我们使用了 FLEURS 和 Covost 2【索引216,Covost 2 and massively multilingual speech-to-text translation,2021b】数据集,测量了翻译后英语的 BLEU 分数。表32展示了这些实验的结果。我们的模型在语音翻译中的表现突显了多模态基础模型在语音翻译等任务上的优势。

口语问答。Llama 3 的语音接口展现了卓越的问答能力。该模型能够毫不费力地理解语码转换的语音,而无需任何此类数据的预先接触。值得注意的是,尽管该模型仅在单轮对话上进行了训练,它却能够进行扩展的、连贯的多轮对话会话。图30展示了几个突显这些多语言和多轮能力的例子。

安全性。我们在 MuTox【索引38,Mutox: Universal multilingual audio-based toxicity dataset and zero-shot detector,2023】上评估了我们语音模型的安全性,这是一个多语言的基于音频的数据集,包含 20,000 条英语和西班牙语的话语以及 4,000 条其他 19 种语言的话语,每条都附有毒性标签。音频作为输入传递给模型,输出在清除一些特殊字符后进行毒性评估。我们应用 MuTox 分类器【索引38,Mutox: Universal multilingual audio-based toxicity dataset and zero-shot detector,2023】并将结果与 Gemini 1.5 Pro 进行比较。我们评估了当输入提示安全而输出有毒时的“增加毒性”(AT)百分比,以及当输入提示有毒而答案安全时的“失去毒性”(LT)百分比。表33显示了英语以及我们评估的所有 21 种语言的平均结果。增加的毒性百分比非常低:我们的语音模型在英语中增加的毒性百分比最低,不到 1%。它去除的毒性远多于增加的毒性。

8.5 语音生成结果

评估重点。对于语音生成,我们专注于评估使用 Llama 3 嵌入的词元级输入流模型在文本规范化和韵律建模任务上的质量。评估的重点是与不将 Llama 3 嵌入作为额外输入的模型进行比较。

文本规范化。为了衡量 Llama 3 嵌入的影响,我们实验改变了模型使用的右侧上下文量。我们使用 3 个 TN 词元(由 unicode 类别界定)的右侧上下文训练了模型。这个模型与不使用 Llama 3 嵌入的模型进行了比较,后者使用了 3 个词元的右侧上下文或完整的双向上下文。如预期,表34显示,对于不带 Llama 3 嵌入的模型,使用完整的右侧上下文可以提高性能。然而,结合了 Llama 3 嵌入的模型性能超过了所有其他模型,从而实现了词元率输入/输出流,而无需依赖输入中的长上下文。

韵律建模。为了评估我们带有 Llama 3 8B 的韵律模型(PM)的性能,我们进行了两组人工评估,比较了带有和不带 Llama 3 嵌入的模型。评分员听取了不同模型的样本并表明了他们的偏好。为了生成最终的语音波形,我们使用了一个内部的基于 transformer 的声学模型【索引229,Transformerbased acoustic modeling for streaming speech synthesis,2021】,该模型预测频谱特征,并使用一个 WaveRNN 神经声码器【索引104,Efficient neural audio synthesis,2018】来生成最终的语音波形。

audio conversation

audio conversation

audio conversation

嘿,你知道电影“Ein Fisch namens Wanda”吗?抱歉,我不知道英文片名

所以我要去越南度假。ở Việt Nam chỗ nào uống cà phê ngon nhất?

从旧金山飞到长春要多久呢从旧金山到长春的飞行时间约为约20小时。

我想我能帮你!我相信你说的电影英文名叫 "A Fish Called Wanda"。这是一部1988年的英国喜剧电影,由查尔斯·克莱顿执导,约翰·克里斯和查尔斯编剧 [.

那么,约翰·克里斯在某个时候说了 "Le due cupole grandi della cattedrale di Milano." 这到底是什么意思?

Việt Nam là một quốc gia có nền văn hóa cà phê phong phú và đa dạng. Dưới đây là một số địa điểm uống cà phê ngon nhất ở Việt Nam: Cà phê Gò Vấp (Hồ Chí Minh): Đây là một trong những quán cà phê nổi tiếng nhất ở Việt Nam [.]

你知道“bún chả"是什么吗?

能骑自行车么

不可以。从旧金山到长春的距离太远,需要跨越太平洋和亚太地区的多个国家。骑自行车是不可能的,因为没有陆路连接旧金山和长春。自行车也无法在海上行驶。需要通过飞机或其他交通工具才能完成这段旅程。

哈哈,开个玩笑。你知道我到长春后在哪能找到最好吃的尖椒干豆腐吗?

"Le due cupole" 是意大利语,意思是“两个穹顶”。米兰大教堂,也叫米兰主教座堂,是意大利米兰的一座著名建筑,它确实有两个穹顶:主建筑的穹顶和钟楼(Campanile)的穹顶 [....]

我想我知道!Bún chả 是一道很受欢迎的越南菜,尤其是在河内。它是一种由米粉(bún)和烤猪肉(chả)制成的面食。这道菜通常配有甜咸酱汁、香草和其他配料 [.]

哈哈,长春的尖椒干豆腐是很有名的!如果你想找最好吃的尖椒干豆腐,以下是一些建议:[.]

Figure 30 使用 Llama 3 语音接口的转录对话示例。这些示例展示了零样本多轮对话和语码转换能力。
Table 33 Llama 3 语音接口在 MuTox 数据集上的语音毒性。AT 指的是增加的毒性(%),LT 指的是失去的毒性(%)。

韵律模型评估结果。首先,我们直接与一个不带 Llama 3 嵌入的流式基线模型进行比较。在第二个测试中,将 Llama 3 8B PM 与一个不带 Llama 3 嵌入的非流式基线模型进行比较。如表35所示,与流式基线相比,Llama 3 8B PM 在 60% 的时间内被偏爱,与非流式基线相比,在 63.6% 的时间内被偏爱,这表明在感知质量上有显著提升。Llama 3 8B PM 的关键优势是其词元级流式处理能力(第8.2.2节),这在推理过程中保持了低延迟。这减少了模型的前瞻需求,与非流式基线相比,实现了更快的响应和实时的语音合成。总的来说,Llama 3 8B 韵律模型始终优于基线模型,证明了其在增强合成语音的自然性和表现力方面的有效性。

Table 34 样本级文本规范化(TN)准确率。我们比较了带有或不带 Llama 3 8B 嵌入的模型,并使用了不同的右上下文值。

Table 35 韵律建模(PM)评估。左图:评分者对 Llama 3 8B 的 PM 与流式纯音素基线的偏好。右图:评分者对 Llama 3 8B 的 PM 与非流式纯音素基线的偏好。

9 相关工作

引言。Llama 3 的开发建立在大量先前研究基础模型的工作之上,这些工作涉及语言、图像、视频和语音。对这些工作的全面概述超出了本文的范围;我们建议读者参考 Bordes 等人【索引20,An introduction to vision-language modeling,2024】;Madan 等人【索引129,Foundation models for video understanding: A survey,2024】;Zhao 等人【索引250,A survey of large language models,2023a】以获取此类概述。下面,我们简要概述直接影响 Llama 3 开发的开创性工作。

9.1 语言

规模。Llama 3 延续了在基础模型中以越来越大的规模应用直接方法的持久趋势。改进由增加的计算和改善的数据驱动,405B 模型使用的预训练计算预算几乎是 Llama 2 70B 的五十倍。尽管包含 405B 参数,我们最大的 Llama 3 实际上比早期性能差得多的模型(如 PALM【索引34,Palm: Scaling language modeling with pathways,2023】)包含更少的参数,这得益于对扩展法则的更好理解【索引106,Scaling laws for neural language models,2020;索引89,Training compute-optimal large language models,2022】。关于其他前沿模型(如 Claude 3 或 GPT 4【索引135,Gpt-4 technical report,2023a】)的规模公开信息很少,但总体性能相当。

小模型。小模型的发展与大模型并行。参数较少的模型可以显著降低推理成本并简化部署【索引129,Openelm: An efficient language model family with open-source training and inference framework,2024;索引206,Gemma: Open models based on gemini research and technology,2024】。较小的 Llama 3 模型通过远超计算最优训练点进行训练来实现这一点,有效地用训练计算换取推理效率。另一条路径是将大模型蒸馏成小模型,如 Phi【索引2,Phi-3 technical report: A highly capable language model locally on your phone,2024】。

架构。虽然 Llama 3 与 Llama 2 相比在架构上做了最小的修改,但其他最近的基础模型探索了其他设计。最值得注意的是,专家混合架构【索引176,Outrageously large neural networks: The sparsely-gated mixture-of-experts layer,2017;索引118,Base layers: Simplifying training of large, sparse models,2021;索引61,Switch transformers: Scaling to trillion parameter models with simple and efficient sparsity,2022;索引255,Mixture-of-experts with expert choice routing,2022】可以作为一种有效的方式来增加模型容量,例如在 Mixtral【索引98,Mixtral of experts,2024】和 Arctic【索引185,Snowflake Arctic: The Best LLM for Enterprise AI — Efficiently Intelligent, Truly Open blog,2024】中。Llama 3 的性能优于这些模型,表明密集架构不是限制因素,但在训练和推理效率以及模型规模稳定性方面仍存在许多权衡。

开源。开源权重基础模型在过去一年中迅速改进,Llama3-405B 现在与当前闭源的最新技术水平相当。最近开发了许多模型家族,包括 Mistral【索引97,Mistral 7b,2023】、Falcon【索引4,The falcon series of open language models,2023】、MPT【索引46,Introducing MPT-7B: A New Standard for Open-Source, Commercially Usable LLMs blog,2024】、Pythia【索引17,Pythia: A suite for analyzing large language models across training and scaling,2023】、Arctic【索引185,Snowflake Arctic: The Best LLM for Enterprise AI — Efficiently Intelligent, Truly Open blog,2024】、OpenELM【索引129,Openelm: An efficient language model family with open-source training and inference framework,2024】、OLMo【索引83,Olmo: Accelerating the science of language models,2024】、StableLM【索引15,Stable lm 2 1.6 b technical report,2024】、OpenLLaMA【索引67,Openllama: An open reproduction of llama,2023】、Qwen【索引11,Qwen technical report,2023】、Gemma【索引206,Gemma: Open models based on gemini research and technology,2024】、Grok【索引231,Open Release of Grok-1 blog,2024】和 Phi【索引2,Phi-3 technical report: A highly capable language model locally on your phone,2024】。

后训练。Llama 3 的后训练遵循了既定的策略,即指令调优【索引35,Scaling instruction-finetuned language models,2022;索引137,Training language models to follow instructions with human feedback,2022】,然后与人类反馈对齐【索引107,A survey of reinforcement learning from human feedback,2023】。虽然一些研究显示了轻量级对齐程序的惊人效果【索引253,Lima: Less is more for alignment,2024】,但 Llama 3 使用了数百万个人类指令和偏好判断来改进预训练模型,包括拒绝采样【索引12,Constitutional AI: harmlessness from AI feedback,2022】、监督微调【索引165,Multitask prompted training enables zero-shot task generalization,2022】和直接偏好优化【索引151,Direct preference optimization: Your language model is secretly a reward model,2023】等技术。为了策划这些指令和偏好示例,我们部署了早期版本的 Llama 3 来过滤【索引126,What makes good data for alignment? a comprehensive study of automatic data selection in instruction tuning,2024c】、重写【索引142,Automatically correcting large language models: Surveying the Landscape of Diverse Automated Correction Strategies,2024】或生成提示和响应【索引125,Best practices and lessons learned on synthetic data for language models,2024b】,并在多轮后训练中应用这些技术。

9.2 多模态

多模态研究背景。我们对 Llama 3 多模态能力的实验,是联合建模多种模态的基础模型这一悠久研究领域的一部分。

图像。大量工作都在大量图像-文本对上训练了图像识别模型,例如,Mahajan 等人【索引130,Exploring the limits of weakly supervised pretraining,2018】;Xiao 等人【索引233,Florence-2: Advancing a unified representation for a variety of vision tasks,2024a】;Team【索引205,Chameleon: Mixed-modal early-fusion foundation models,2024】;OpenAI【索引136,GPT-4 blog,2023b】。Radford 等人【索引151,Learning transferable visual models from natural language supervision,2021】提出了首批通过对比学习联合嵌入图像和文本的模型之一。最近,一系列模型研究了与 Llama 3 中使用的方法类似的方法,例如,Alayrac 等人【索引3,Flamingo: a visual language model for few-shot learning,2022】;Dai 等人【索引45,Instructblip: Towards general-purpose vision-language models with instruction tuning,2023】;Liu 等人【索引124,Improved baselines with visual instruction tuning,2023c,b】;Yang 等人【索引246,Mm-react: Prompting chatgpt for multimodal reasoning and action,2023b】;Ye 等人【索引248,mplug-owl: Modularization empowers large language models with multimodality,2023】;Zhu 等人【索引256,Minigpt-4: Enhancing vision-language understanding with advanced large language models,2023】。我们在 Llama 3 中的方法结合了许多这些论文的思想,以达到与 Gemini 1.0 Ultra【索引81,Gemini: A family of highly capable multimodal models,2023】和 GPT-4 Vision【索引136,GPT-4 blog,2023b】相当的结果;参见第7.6节。

视频。尽管越来越多的基础模型支持视频输入【索引81,Gemini: A family of highly capable multimodal models,2023;索引136,GPT-4 blog,2023b】,但关于联合建模视频和语言的研究并不多。与 Llama 3 类似,目前大多数研究采用适配器方法来对齐视频和语言表示,并解锁关于视频的问答和推理能力【索引124,Video-llava: Learning united visual representation by alignment before projection,2023;索引121,Videochat: Chat-centric video understanding,2023a;索引129,Video-chatgpt: Towards detailed video understanding via large vision and language models,2024;索引248,Video-llama: An instruction-tuned audio-visual language model for video understanding,2023;索引252,Learning video representations from large language models,2022】。我们发现,这些方法产生的结果与最先进的技术相当;参见第7.7节。

语音。我们的工作也属于结合语言和语音建模的更广泛研究领域。早期的文本和语音联合模型包括 AudioPaLM【索引162,Audiopalm: A large language model that can speak and listen,2023】、VioLA【索引220,Viola: Unified codec language models for speech recognition, synthesis, and translation,2023b】、VoxtLM【索引130,Voxtlm: unified decoder-only models for consolidating speech recognition/synthesis and speech/text continuation tasks,2023】、SUTLM【索引34,Toward joint language modeling for speech units and text,2023】和 Spirit-LM【索引133,Spirit-lm: Interleaved spoken and written language model,2024】。我们的工作建立在先前结合语音和语言的组合方法之上,如 Fathullah 等人【索引60,Audiochatllama: Towards general-purpose speech abilities for llms,2024】。与大多数先前工作不同,我们选择不为语音任务微调语言模型本身,因为这样做可能导致在非语音任务上的竞争。我们发现在更大的模型规模下,即使没有这样的微调也能获得强大的性能;参见第8.4节。

A5 结论

开发经验总结:高质量基础模型的开发仍处于初级阶段,Llama 3 的开发经验表明,未来模型仍有巨大提升空间。在整个开发过程中,团队发现对高质量数据、规模和简洁性的专注始终能带来最佳结果。虽然团队探索了更复杂的模型架构和训练方案,但发现这些方法的收益并未超过其带来的额外开发复杂性。

组织决策的重要性:开发像 Llama 3 这样的旗舰模型不仅涉及克服众多深层次的技术问题,还需要巧妙的组织决策。例如,为了防止模型对常用基准产生过拟合,预训练数据的采购和处理由一个独立团队负责,该团队被强烈激励以避免预训练数据被外部基准污染。另一个例子是,通过仅允许一小部分不参与模型开发的研究人员执行和访问人工评估,来确保评估的可信度。这些组织决策对 Llama 3 系列模型的成功开发至关重要。

开放与未来展望:作者分享开发过程的细节,旨在帮助更广泛的研究社区理解基础模型开发的关键因素,并促进公众对基础模型未来进行更明智的讨论。论文还分享了将多模态能力集成到 Llama 3 中的初步实验,虽然这些模型仍在开发中,但分享早期结果希望能加速该方向的研究。

开源的意义:基于详细的安全分析结果,团队公开发布 Llama 3 语言模型,以期加速为社会相关用例开发 AI 系统,并使研究社区能够审查模型,找出改进和增强安全性的方法。团队相信,公开发布基础模型在负责任的模型开发中扮演着关键角色,并希望 Llama 3 的发布能鼓励整个行业拥抱开放、负责任的 AGI 开发。

A6 附录

贡献者与致谢:Llama 3 是 Meta 大量人员工作的成果。本节按名字首字母顺序列出了所有核心贡献者(在项目期间工作时间至少占 2/3 的人员)和贡献者(工作时间至少占 1/5 的人员)。此外,还特别感谢了 Mark Zuckerberg 等多位领导和支持者,以及对 Llama 3 做出有益贡献的众多其他人员。详细名单见原文。