现代人工智能(AI)系统由基础模型驱动。本文介绍了一组新的基础模型,称为Llama 3。这是一系列原生支持多语言、编程、推理和工具使用的语言模型。我们最大的模型是一个拥有405B参数和最长可达128K token上下文窗口的大规模Transformer模型。本文对Llama 3进行了广泛的实证评估。我们发现,Llama 3在多项任务上的表现与领先的语言模型(如GPT-4)不相上下。我们公开发布了Llama 3,包括预训练和微调版本的405B参数语言模型,以及我们的Llama Guard 3模型,用于输入和输出安全性控制。本文还展示了将图像、视频和语音能力通过组合方法整合到Llama 3中的实验结果。我们观察到这种方法在图像、视频和语音识别任务上的表现可与最先进的技术相媲美。由于这些多模态模型仍在开发中,目前尚未广泛发布。
日期:2024年7月23日
链接:https://ai.meta.com/research/publications/the-llama-3-herd-of-models/
目录
1 简介 2 总体概述 3 预训练 3.1 预训练数据 3.1.1 网络数据策划 3.1.2 确定数据组合 3.1.3 数据退火 3.2 模型架构 3.2.1 规模法则 3.3 基础设施、扩展性与效率 3.3.1 训练基础设施 3.3.2 模型扩展的并行方法 3.3.3 集体通信 3.3.4 可靠性和操作挑战 3.4 训练方案 3.4.1 初始预训练 3.4.2 长上下文预训练 3.4.3 退火 4 后训练 4.1 建模 4.1.1 聊天对话格式 4.1.2 奖励建模 4.1.3 监督微调 4.1.4 直接偏好优化 4.1.5 模型平均 4.1.6 迭代轮次 4.2 后训练数据 4.2.1 偏好数据 4.2.2 SFT 数据 4.2.3 数据处理和质量控制 4.3 能力 4.3.1 代码 4.3.2 多语言能力 4.3.3 数学与推理 4.3.4 长上下文 4.3.5 工具使用 4.3.6 事实性 4.3.7 可控性 5 结果 5.1 预训练语言模型 5.1.1 标准基准测试 5.1.2 模型鲁棒性 5.1.3 对抗性基准 5.1.4 污染分析 5.2 后训练语言模型 5.2.1 一般知识和指令跟随基准测试 5.2.2 专业考试 5.2.3 编码基准测试 5.2.4 多语言基准测试 5.2.5 数学和推理基准测试 5.2.6 长上下文基准测试 5.2.7 工具使用性能 5.3 人工评估 5.4 安全性 5.4.1 基准构建 5.4.2 安全预训练 5.4.3 安全微调 5.4.4 安全性结果 5.4.5 网络安全和化学/生物武器安全性 5.4.6 红队测试 5.4.7 系统级安全 5.4.8 局限性 6 推理 6.1 管道并行 6.2 FP8量化 7 视觉实验 7.1 数据 7.1.1 图像数据 7.1.2 视频数据 7.2 模型架构 7.3 模型扩展 7.4 预训练 7.5 后期训练 7.5.1 监督微调数据 7.5.2 监督微调方法 7.5.3 偏好数据 7.5.4 奖励建模 7.5.5 直接偏好优化 7.5.6 拒绝采样 7.5.7 质量调优 7.6 图像识别结果 7.7 视频识别结果 8 语音实验 8.1 数据 8.1.2 语音生成 8.2 模型架构 8.2.1 语音理解 8.2.2 语音生成 8.3 训练方案 8.3.1 语音理解 8.3.2 语音生成 8.4 语音理解结果 8.5 语音生成结果 9 相关工作 9.1 语言 9.2 多模态 10 结论
基础模型是用于支持多种AI任务的通用语言、视觉、语音及其他模态模型,它们构成了许多现代AI系统的基础。
(1)预训练阶段(pre-training stage),模型在大规模数据上进行简单任务(如下一个词预测或图像描述)的训练; (2)后训练阶段(post-training stage),模型被微调以遵循指令、对齐人类偏好并提高特定能力(如编码和推理)。
表1 Llama 3模型集概述。本文中的所有结果均为Llama 3.1模型。
在本文中,我们介绍了一组新的语言基础模型,称为Llama 3。Llama 3模型家族原生支持多语言、编码、推理和工具使用。我们最大的模型是一个拥有405B参数的密集Transformer,能够处理最长达128K token的上下文窗口。表1列出了模型家族的各个成员。本文中呈现的所有结果都基于Llama 3.1模型,以下简称Llama 3以示简洁。
我们认为,高质量基础模型的开发有三大关键杠杆:数据、规模和复杂性管理。我们在开发过程中力求优化这三大杠杆:
数据。相比之前的Llama版本(Touvron等,2023a,b),我们改进了用于预训练和后训练的数据的数量和质量。这些改进包括开发更精细的预训练数据预处理和筛选管道,以及更严格的后训练数据质量保证和过滤方法。我们在大约15T的多语言token语料上对Llama 3进行预训练,而Llama 2仅使用了1.8T token。 规模。我们训练的模型规模远大于以往的Llama模型:我们的旗舰语言模型使用了3.8 × 10²⁵ FLOPs进行预训练,几乎是Llama 2最大版本的50倍。具体来说,我们在15.6T文本token上预训练了一个拥有405B可训练参数的旗舰模型。根据基础模型的规模法则(Scaling Laws),我们的旗舰模型在性能上优于使用相同程序训练的小模型。尽管我们的规模法则(Scaling Laws)表明我们的旗舰模型在训练预算下具有计算优化规模,但我们也对较小的模型进行了比计算优化更长时间的训练。结果模型在相同推理预算下的性能优于计算优化模型。我们使用旗舰模型在后训练过程中进一步提高这些较小模型的质量。 复杂性管理。我们做出的设计选择旨在最大化模型开发过程的可扩展性。例如,我们选择了一个标准的密集Transformer模型架构(Vaswani等,2017),并进行了少量改进,而不是选择混合专家模型(Shazeer等,2017),以最大化训练的稳定性。同样,我们采用了基于监督微调(SFT)、拒绝采样(RS)和直接偏好优化(DPO;Rafailov等,2023)的相对简单的后训练程序,而不是更复杂的强化学习算法(Ouyang等,2022;Schulman等,2017),这些算法往往不太稳定且难以扩展。
表2 微调Llama 3模型在关键基准评估中的性能。该表比较了Llama 3的8B、70B和405B版本与竞争模型的性能。我们用粗体显示每个模型尺寸等价类中性能最好的模型。使用5-shot提示(无CoT)获得的结果。不使用CoT获得的结果。♦使用零-shot提示获得的结果。
我们的工作成果是Llama 3:一个由三个多语言模型组成的模型家族,参数分别为8B、70B和405B。我们在涵盖广泛语言理解任务的多种基准数据集上评估了Llama 3的性能。此外,我们进行了广泛的人类评估,将Llama 3与竞争模型进行了比较。表2展示了旗舰Llama 3模型在主要基准测试中的性能概述。我们的实验评估表明,我们的旗舰模型在各种任务上的表现与领先语言模型(如GPT-4,OpenAI,2023a)相当,接近最先进水平。我们的较小模型在同类参数模型中表现最佳,优于其他同类参数模型(Bai等,2023;Jiang等,2023)。Llama 3在有用性和无害性之间也比其前身(Touvron等,2023b)提供了更好的平衡。我们在第5.4节中对Llama 3的安全性进行了详细分析。
我们将根据更新后的Llama 3社区许可公开发布所有三个Llama 3模型;详情见https://llama.meta.com。这包括我们405B参数语言模型的预训练和后训练版本,以及我们新的Llama Guard模型(Inan等,2023),用于输入和输出安全性。我们希望旗舰模型的公开发布能在研究社区引发一波创新,并加速迈向负责任开发通用人工智能(AGI)的道路。
作为Llama 3开发过程的一部分,我们还开发了模型的多模态扩展,使其具备图像识别、视频识别和语音理解能力。这些模型仍在积极开发中,尚未准备好发布。除了我们的语言建模结果外,本文还展示了我们对这些多模态模型的初步实验结果。
2 总体概述
图1 Llama 3整体架构和训练的示意图。Llama 3是一种训练来预测文本序列下一个tokens的Transformer语言模型。详细信息见正文。
Llama 3的模型架构如图1所示。Llama 3语言模型的开发包括两个主要阶段:
语言模型预训练(Language model pre-training)。我们首先将一个大型的多语言文本语料库转换为离散的token,并在生成的数据上预训练一个大型语言模型(LLM),以进行下一个token预测。在语言模型预训练阶段,模型学习语言的结构,并从其“阅读”的文本中获得大量关于世界的知识。为了有效地执行这一任务,我们在大规模数据上进行预训练:我们在15.6T token上预训练了一个拥有405B参数、使用8K token上下文窗口的模型。标准预训练阶段之后是持续预训练阶段,将支持的上下文窗口增加到128K token。详见第3节。 语言模型后训练(Language model post-training)。预训练的语言模型具有丰富的语言理解能力,但尚未能够按照我们期望的方式遵循指令或表现得像一个助手。我们在几个回合中通过监督微调(SFT)和直接偏好优化(DPO;Rafailov等,2024)使模型与人类反馈对齐。在后训练阶段,我们还整合了新功能,如工具使用,并在其他领域(如编码和推理)中观察到显著改进。详见第4节。最后,在后训练阶段还加入了安全措施,详情见第5.4节。
由此产生的模型具有丰富的功能。它们可以用至少8种语言回答问题、编写高质量代码、解决复杂的推理问题,并能开箱即用或以零样本的方式使用工具。
我们还进行了一些实验,通过组合方法为Llama 3增加图像、视频和语音功能。我们研究的方法包括图28所示的三个附加阶段:
多模态编码器预训练(Multi-modal encoder pre-training)。我们为图像和语音训练单独的编码器。我们在大量的图像-文本对上训练图像编码器,使模型学会视觉内容与自然语言描述之间的关系。我们的语音编码器采用自监督方法进行训练,通过遮蔽部分语音输入并尝试通过离散token表示重建被遮蔽部分,使模型学习语音信号的结构。图像编码器的详细信息见第7节,语音编码器的详细信息见第8节。 视觉适配器训练(Vision adapter training)。我们训练一个适配器,将预训练的图像编码器整合到预训练的语言模型中。该适配器由一系列交叉注意力层组成,这些层将图像编码器表示输入到语言模型中。适配器在文本-图像对上进行训练,使图像表示与语言表示对齐。在适配器训练期间,我们还更新图像编码器的参数,但故意不更新语言模型的参数。我们还在图像适配器之上训练了一个视频适配器,使用配对的视频-文本数据,使模型能够跨帧聚合信息。详见第7节。 语音适配器训练(Speech adapter training)。最后,我们通过一个适配器将语音编码器整合到模型中,该适配器将语音编码转换为可以直接输入微调语言模型的token表示。在监督微调阶段,适配器和编码器的参数共同更新,以实现高质量的语音理解。在语音适配器训练期间,我们不改变语言模型。我们还整合了一个文本转语音系统。详见第8节。
我们的多模态实验产生了能够识别图像和视频内容并支持通过语音界面进行交互的模型。这些模型仍在开发中,尚未准备好发布。
3 预训练
(1) 大规模训练语料库的策划和过滤, (2) 模型架构的开发及其相应的规模法则(Scaling Laws)以确定模型大小, (3) 大规模高效预训练技术的开发,以及 (4) 预训练方案的制定。我们将分别介绍这些组成部分。
3.1 预训练数据
我们从多种数据源创建了语言模型预训练的数据集,包含截至2023年底的知识。我们对每个数据源应用了多种去重方法和数据清洗机制,以获得高质量的token。我们移除包含大量个人身份信息(PII)和已知成人内容的域名。
3.1.1 网络数据策划
我们利用了大量来自网络的数据,并对其进行了如下清洗过程。
PII和安全过滤。我们实施了一些过滤器,旨在移除来自可能包含不安全内容或大量PII的网站的数据、根据多种Meta安全标准被评为有害的域名以及已知包含成人内容的域名。
文本提取和清洗。我们处理原始HTML内容,提取高质量的多样化文本。为此,我们构建了一个自定义解析器,提取HTML内容并优化版面移除和内容召回的精度。我们在人类评估中对比了自定义解析器与流行的第三方HTML解析器,发现我们的解析器表现更佳。我们谨慎处理包含数学和代码内容的HTML页面,以保持这些内容的结构。我们保留图像的alt属性文本,因为数学内容通常以预渲染图像形式表示,数学也在alt属性中提供。我们实验评估了不同的清洗配置,发现与纯文本相比,markdown对主要在网络数据上训练的模型性能有害,因此我们移除了所有的markdown标记。
URL级别去重。在整个数据集中进行URL级别的去重。我们保留每个URL对应页面的最新版本。 文档级别去重。在整个数据集中进行全局MinHash(Broder, 1997)去重,移除近似重复的文档。 行级别去重。我们类似ccNet(Wenzek et al., 2019)进行了积极的行级去重。我们移除每30M文档中出现超过6次的行。尽管我们的手动定性分析表明,行级去重不仅移除了来自各种网站的剩余版面,如导航菜单、cookie警告,还移除了频繁的高质量文本,但我们的实证评估显示出了显著的改进。
我们使用重复的n-gram覆盖率(Rae et al., 2021)来移除由重复内容组成的行,如日志或错误消息。这些行可能非常长且独特,因此无法通过行级去重过滤。 我们使用“脏话”计数(Raffel et al., 2020)过滤掉不在域名封锁列表中的成人网站。 我们使用基于token分布的Kullback-Leibler散度过滤掉包含过多异常token的文档,这些异常token相对于训练语料库分布而言。
基于模型的质量过滤。此外,我们还尝试应用各种基于模型的质量分类器来选择高质量的token。这些分类器包括使用fasttext(Joulin et al., 2017)训练的快速分类器,用于识别给定文本是否会被Wikipedia引用(Touvron et al., 2023a),以及使用Llama 2预测训练的计算密集型Roberta分类器(Liu et al., 2019a)。为了基于Llama 2训练质量分类器,我们创建了一个清洗过的网页文档训练集,描述了质量要求,并指示Llama 2的聊天模型判断文档是否符合这些要求。我们使用DistilRoberta(Sanh et al., 2019)生成文档的质量分数,以提高效率。我们实验评估了各种质量过滤配置的有效性。
代码和推理数据。类似DeepSeek-AI等(2024),我们构建了提取与代码和数学相关的网页的特定领域管道。具体而言,代码和推理分类器都是在Llama 2注释的网页数据上训练的DistilRoberta模型。与上述通用质量分类器不同,我们进行了提示调优,以目标为包含数学推导、STEM领域的推理和与自然语言交织的代码的网页。由于代码和数学的token分布与自然语言有显著不同,这些管道实现了特定领域的HTML提取、定制文本特征和过滤启发式方法。
我们使用基于fasttext的语言识别模型将文档分类为176种语言。 我们在每种语言的数据中执行文档级和行级去重。 我们应用特定语言的启发式方法和基于模型的过滤器,移除低质量文档。
此外,我们使用基于多语言Llama 2的分类器对多语言文档进行质量排名,以确保优先处理高质量内容。我们实验确定预训练中使用的多语言token数量,平衡模型在英文和多语言基准测试中的性能。
3.1.2 确定数据组合
为了获得高质量的语言模型,必须仔细确定预训练数据组合中不同数据源的比例。我们确定数据组合的主要工具是知识分类和规模法则(Scaling Laws)实验。
知识分类。我们开发了一个分类器,将网页数据中包含的信息类型分类,以更有效地确定数据组合。我们使用这个分类器对在网络上过度代表的数据类别进行下采样,例如艺术和娱乐。
数据组合的规模法则(Scaling Laws)。为了确定最佳数据组合,我们进行规模法则(Scaling Laws)实验,在这些实验中我们训练多个小模型并预测大模型在该组合上的性能(详见第3.2.1节)。我们针对不同的数据组合重复多次此过程,以选择新的数据组合候选。随后,我们在这个候选数据组合上训练一个较大的模型,并评估其在几个关键基准上的性能。
数据组合总结。我们的最终数据组合大致包含50%的通用知识token,25%的数学和推理token,17%的代码token和8%的多语言token。
3.1.3 数据退火(Annealing Data)
实证显示,在少量高质量代码和数学数据上进行退火(详见第3.4.3节)可以提升预训练模型在关键基准上的性能。类似于Li等(2024b),我们使用一种数据组合进行退火,该组合在特定领域上采样高质量数据。我们不在退火数据中包含常用基准测试的训练集,这使我们能够评估Llama 3的真实少样本学习能力和领域外泛化能力。
参照OpenAI(2023a),我们在GSM8k(Cobbe et al., 2021)和MATH(Hendrycks et al., 2021b)训练集上评估退火的有效性。我们发现,退火使预训练的Llama 3 8B模型在GSM8k和MATH验证集上的性能分别提高了24.0%和6.4%。然而,405B模型的改进是微不足道的,这表明我们的旗舰模型具有强大的上下文学习和推理能力,不需要特定领域的训练样本即可获得强大的性能。
使用退火评估数据质量。类似Blakeney等(2024),我们发现退火使我们能够判断小型特定领域数据集的价值。我们通过将一个训练到50%的Llama 3 8B模型的学习率线性退火到0,在40B token上评估这些数据集的价值。在这些实验中,我们给新数据集分配30%的权重,其余70%权重分配给默认数据组合。使用退火评估新数据源比对每个小数据集进行规模法则(Scaling Laws)实验更高效。
3.2 模型架构
Llama 3采用了标准的、密集的Transformer架构(Vaswani et al., 2017)。在模型架构上,Llama 3与Llama和Llama 2(Touvron et al., 2023a,b)没有显著差异;我们的性能提升主要归因于数据质量和多样性的改进以及训练规模的增加。我们在Llama 3的基础上做了一些小的修改:
我们使用了分组查询注意力(GQA; Ainslie et al. (2023)),采用了8个键值头以提高推理速度并减少解码过程中键值缓存的大小。 我们使用了一种注意力掩码,防止同一序列内不同文档之间的自注意力。在标准预训练中,此更改影响不大,但在非常长的序列的持续预训练中,它显得尤为重要。 我们使用了包含128K个token的词汇表。我们的词汇表结合了tiktoken分词器中的100K个token和28K个额外token,以更好地支持非英语语言。与Llama 2分词器相比,我们的新分词器在一组英文数据上的压缩率从3.17字符/token提高到3.94字符/token,这使得模型在相同的训练计算量下能够“阅读”更多文本。我们还发现,添加28K个来自特定非英语语言的token,改善了压缩率和下游性能,而对英文分词没有影响。 我们将RoPE基频超参数增加到50万。这使得我们能够更好地支持更长的上下文;Xiong et al. (2023)显示了这个值在上下文长度高达32,768时的有效性。
表3 Llama 3关键超参数概述。我们展示了8B、70B和405B语言模型的设置。
Llama 3 405B采用了126层的架构,token表示维度为16,384,并且有128个注意力头;具体细节见表3。这使得模型尺寸在我们的训练预算3.8 × 10^25 FLOPs下,依据我们的数据规模法则(Scaling Laws)是计算最优的。
3.2.1 规模法则(Scaling Laws)
我们开发了规模法则(Scaling Laws)(Hoffmann et al., 2022; Kaplan et al., 2020)以确定在我们的预训练计算预算下旗舰模型的最佳尺寸。除了确定最佳模型尺寸,主要挑战在于预测旗舰模型在下游基准任务上的性能,原因如下:(1) 现有的规模法则(Scaling Laws)通常只预测下一个token的预测损失,而非具体基准性能。(2) 由于规模法则(Scaling Laws)是基于小计算预算的预训练运行开发的,因此可能会出现噪声和不可靠的情况(Wei et al., 2022b)。
首先,我们建立了计算最优模型在下游任务上的负对数似然与训练FLOPs之间的相关性。 接下来,我们将下游任务上的负对数似然与任务准确度相关联,利用规模法则(Scaling Laws)模型和使用更高计算FLOPs训练的旧模型。在这一步中,我们特别利用了Llama 2系列模型。
这种方法使我们能够根据特定的训练FLOPs数量预测计算最优模型在下游任务上的性能。我们使用类似的方法来选择我们的预训练数据组合(见第3.4节)。
规模法则(Scaling Laws)实验。具体来说,我们通过在6 × 10^18 FLOPs到10^22 FLOPs之间的计算预算下预训练模型来构建我们的规模法则(Scaling Laws)。在每个计算预算下,我们预训练尺寸在40M到16B参数之间的模型,在每个计算预算下使用模型尺寸的子集。在这些训练运行中,我们使用余弦学习率调度和2,000步的线性预热。峰值学习率根据模型尺寸设置在2 × 10^−4到4 × 10^−4之间。我们将余弦衰减设置为峰值的0.1。每一步的权重衰减设置为该步学习率的0.1。我们为每个计算规模使用固定的批量大小,范围在250K到4M之间。
图2 在6×10¹⁸和10²² FLOPs之间的规模法则(Scaling Laws)IsoFLOPs曲线。损失是在保留验证集上的负对数似然。我们使用二次多项式近似每个计算规模的测量。
这些实验产生了图2中的等FLOPs曲线。我们在一个单独的验证集上测量这些曲线的损失。我们使用二次多项式拟合测量的损失值,并识别每个抛物线的最小值。我们将抛物线的最小值称为相应预训练计算预算下的计算最优模型。
我们使用这种方式识别的计算最优模型来预测特定计算预算的最佳训练token数量。为此,我们假设计算预算C与最佳训练token数量N?(C)之间的幂律关系:

图3 作为预训练计算预算函数的已识别计算最优模型的训练tokens数。我们还包括拟合的规模法则(Scaling Laws)预测。计算最优模型对应于图2中的抛物线最小值。
我们使用图2中的数据拟合A和α。我们发现(α, A) = (0.53, 0.29);相应的拟合如图3所示。将结果规模法则(Scaling Laws)外推到3.8 × 10^25 FLOPs,建议训练一个402B参数模型在16.55T token上。
一个重要的观察结果是,等FLOPs曲线在最小值附近变得更平坦,随着计算预算的增加。这意味着旗舰模型的性能对模型尺寸和训练token之间的小变化相对鲁棒。基于这一观察结果,我们最终决定训练一个405B参数的旗舰模型。
图4 ARC挑战的规模法则(Scaling Laws)预测。左图:ARC挑战基准测试中正确答案的归一化负对数似然作为预训练FLOPs的函数。右图:ARC挑战基准测试的准确性作为正确答案归一化负对数似然的函数。此分析使我们能够预测模型在ARC挑战基准测试中的性能,然后开始预训练。详细信息见正文。
预测下游任务性能。我们使用结果的计算最优模型来预测旗舰Llama 3模型在基准数据集上的性能。首先,我们将基准中正确答案的(归一化)负对数似然与训练FLOPs线性相关。在此分析中,我们仅使用在上述数据组合上训练的规模法则(Scaling Laws)模型,计算预算高达10^22 FLOPs。接下来,我们使用规模法则(Scaling Laws)模型和使用Llama 2数据组合和分词器训练的Llama 2模型,建立对数似然与准确率之间的S形关系。我们在ARC挑战基准上的实验结果如图4所示。我们发现这种两步规模法则(Scaling Laws)预测(在四个数量级上的外推)非常准确:它仅略微低估了旗舰Llama 3模型的最终性能。
3.3 基础设施、扩展性与效率
本节描述了支持Llama 3 405B大规模预训练的硬件和基础设施,并讨论了多项优化措施如何提升训练效率。
3.3.1 训练基础设施
Llama 1和Llama 2模型在Meta的AI研究超级计算机集群(AI Research SuperCluster, Lee and Sengupta, 2022)上训练完成。随着规模的扩大,Llama 3的训练迁移到了Meta的生产集群(Lee et al., 2024),这一配置优化了生产级别的可靠性,这在我们扩展训练规模时至关重要。
计算。Llama 3 405B在最多1.6万个H100 GPU上进行训练,每个GPU的TDP为700W,配备80GB的HBM3,使用的是Meta的Grand Teton AI服务器平台(Matt Bowman, 2022)。每台服务器配备8个GPU和两个CPU。服务器内部的8个GPU通过NVLink连接。训练作业由Meta的全球训练调度器MAST(Choudhury et al., 2024)进行调度。
存储。Llama 3的预训练过程采用了Meta自主研发的分布式文件系统Tectonic(Pan等,2021)来构建存储架构(Battey和Gupta,2024)。该系统提供了240PB的存储容量,由7500台配备SSD的服务器组成,能够支持2TB/s的持续吞吐量和7TB/s的峰值吞吐量。在实际应用中,我们面临的一个主要挑战是如何应对高度突发的检查点写入操作,这种操作会在短时间内使存储架构达到饱和状态。检查点用于保存每个GPU的模型状态,单个检查点的大小从1MB到4GB不等,主要用于系统恢复和调试。我们的目标是在执行检查点操作时尽可能减少GPU的暂停时间,同时提高检查点的保存频率,以减少系统恢复后可能丢失的工作量。
网络。Llama 3 405B模型采用了基于Arista 7800和Minipack2 Open Compute Project (OCP)机架交换机的RoCE(RDMA over Converged Ethernet)网络。而Llama 3系列中规模较小的模型则使用Nvidia Quantum2 Infiniband网络。这两种网络集群都实现了400 Gbps的GPU间互连速度。尽管这些集群的底层网络技术存在差异,但我们通过精心调优,使它们在处理大规模训练任务时能够提供相当的性能。鉴于我们对RoCE网络的设计有全面的掌控,接下来我们将重点阐述这一网络的设计细节。
网络拓扑。基于RoCE技术的AI集群由2.4万个GPU组成,采用三层Clos网络架构进行连接(Lee等,2024)。在底层,每个机架包含16个GPU,分布在两台服务器上,通过单个Minipack2机架顶部(TOR)交换机相连。中间层由192个这样的机架通过集群交换机互联,形成一个拥有3072个GPU的pod,具备全双工带宽,确保无过度订阅。在顶层,同一数据中心大楼内的8个pod通过汇聚交换机连接,构成一个包含2.4万个GPU的大型集群。然而,汇聚层的网络连接并未维持全双工带宽,而是存在1:7的过度订阅比。我们的模型并行策略(详见第3.3.2节)和训练作业调度器(Choudhury等,2024)均经过优化,能够识别网络拓扑结构,旨在最小化跨pod的网络通信。 负载均衡。LLM训练会产生大量网络流量,使用传统的等价多路径(ECMP)路由方法难以在所有可用网络路径上实现有效的负载均衡。为解决这一挑战,我们采用了两种技术。首先,我们的集体通信库在两个GPU之间创建16个网络流,而非单一流,从而减少了每个流的流量,并提供更多的流用于负载均衡。其次,我们开发的增强ECMP(E-ECMP)协议通过对RoCE数据包头中的附加字段进行哈希处理,有效地在不同网络路径上平衡这16个流。 拥塞控制。为应对集体通信模式引起的瞬时拥塞和缓冲问题,我们在主干网络中采用了深度缓冲交换机(Gangidi等,2024)。这种设置有助于限制由慢速服务器引起的持续拥塞和网络回压的影响,这在训练过程中是常见问题。最终,通过E-ECMP实现的更优负载均衡显著降低了拥塞的可能性。借助这些优化措施,我们成功运行了一个包含24,000个GPU的大规模集群,而无需使用传统的拥塞控制方法,如数据中心量化拥塞通知(DCQCN)。
3.3.2 模型扩展的并行方法
图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组中。
为了扩展我们最大模型的训练,我们采用了四维并行(4D Parallelism),结合了四种不同类型的并行方法,以对模型进行分片。此方法高效地将计算分布在多个GPU上,确保每个GPU的模型参数、优化器状态、梯度和激活都能适应其HBM。我们在图5中展示了4D并行的实现。它结合了张量并行(Tensor Parallelism, TP; Krizhevsky et al., 2012; Shoeybi et al., 2019; Korthikanti et al., 2023)、管道并行(Pipeline Parallelism, PP; Huang et al., 2019; Narayanan et al., 2021; Lamy-Poirier, 2023)、上下文并行(Context Parallelism, CP; Liu et al., 2023a)和数据并行(Data Parallelism, DP; Rajbhandari et al., 2020; Ren et al., 2021; Zhao et al., 2023b)。
张量并行将个别权重张量拆分成多个块分布在不同设备上。管道并行将模型按层垂直分成多个阶段,使不同设备能并行处理完整模型管道的不同阶段。上下文并行将输入上下文划分为多个段,以减少处理超长序列输入时的内存瓶颈。我们使用全分片数据并行(Fully Sharded Data Parallelism, FSDP; Rajbhandari et al., 2020; Ren et al., 2021; Zhao et al., 2023b),将模型、优化器和梯度进行分片,同时实施数据并行,在多个GPU上并行处理数据,并在每次训练步骤后同步。我们在Llama 3中使用FSDP对优化器状态和梯度进行分片,但对模型分片我们在前向计算后不再重新分片,以避免反向传播时的额外全聚合(all-gather)通信。
表4 Llama 3 405B预训练各阶段的缩放配置和MFU。有关每种并行类型的描述,请参见正文和图5
GPU利用率。通过仔细调优并行配置、硬件和软件,我们实现了整体BF16模型浮点操作(Model FLOPs Utilization, MFU; Chowdhery et al., 2023)的利用率为38-43%,具体配置见表4。由于在训练过程中保持全局批次中的token数量恒定,在16K GPU上的DP=128配置中,MFU略微下降到41%,相比之下,在8K GPU上的DP=64配置中,MFU为43%。
图6 Llama 3中管道并行的示意图。管道并行将8个管道阶段(0到7)分配到四个管道级别(PP级别0到3),其中具有级别0的GPU运行阶段0和4,具有级别1的GPU运行阶段1和5,等等。彩色块(0到9)表示一系列微批次,其中M是微批次的总数,N是同一阶段前向或后向的连续微批次数。我们的关键见解是使N可调。
批次大小约束。现有实现对每个GPU支持的批次大小有限制,要求其必须能被管道阶段的数量整除。例如,在图6中,管道并行的深度优先调度(Depth-First Schedule, DFS; Narayanan et al., 2021)需要N=PP=4,而广度优先调度(Breadth-First Schedule, BFS; Lamy-Poirier, 2023)需要N=M,其中M是微批次的总数,N是同一阶段前向或后向的连续微批次的数量。然而,预训练通常需要灵活调整批次大小。 内存不平衡。现有的管道并行实现导致资源消耗不平衡。由于嵌入层和预热微批次,第一个阶段消耗更多内存。 计算不平衡。在模型的最后一层之后,我们需要计算输出和损失,使得这一阶段成为执行延迟瓶颈。
为了解决这些问题,我们修改了管道调度,如图6所示,允许灵活设置N——在本例中,N=5,可以在每个批次中运行任意数量的微批次。这使我们能够在大规模时运行:(1) 少于阶段数量的微批次;或 (2) 更多微批次以隐藏点对点通信,在DFS和BFS之间找到最佳通信和内存效率的平衡。为了平衡管道,我们分别减少了第一个和最后一个阶段的一个Transformer层,这意味着第一个阶段的第一个模型块只有嵌入,最后一个阶段的最后一个模型块只有输出投影和损失计算。为了减少管道气泡,我们在一个管道等级上使用了交错调度(Narayanan et al., 2021)与V个管道阶段。总体管道气泡率进一步减少,我们在管道并行中采用异步点对点通信,这显著加快了训练,特别是在文档掩码引入额外计算不平衡的情况下。我们启用了TORCH_NCCL_AVOID_RECORD_STREAMS,以减少异步点对点通信的内存使用。最后,基于详细的内存分配分析,我们主动释放不再用于未来计算的张量,包括每个管道阶段的输入和输出张量。通过这些优化,我们能够在不进行激活检查点的情况下对8K token序列进行预训练。
长序列的上下文并行。我们利用上下文并行(Context Parallelism, CP)来提升内存效率,扩展Llama 3的上下文长度,并能够在长达128K的超长序列上进行训练。在CP中,我们在序列维度上进行划分,具体地,我们将输入序列划分为2×CP块,使每个CP等级接收两个块,以实现更好的负载均衡。第i个CP等级接收第i和第(2×CP − 1 − i)个块。
不同于现有的CP实现,后者在环状结构中重叠通信和计算(Liu et al., 2023a),我们的CP实现采用全聚合(all-gather)方法,首先全聚合(all-gather)键(K)和值(V)张量,然后计算局部查询(Q)张量块的注意力输出。尽管全聚合(all-gather)通信延迟在关键路径上暴露,但我们仍然采用这种方法,主要有两个原因:(1) 在全聚合(all-gather)的CP注意力中,支持不同类型的注意力掩码(如文档掩码)更容易、更灵活;(2) 由于使用了分组查询注意力(GQA, Ainslie et al., 2023),所传输的K和V张量比Q张量小得多。因此,注意力计算的时间复杂度比全聚合(all-gather)高一个数量级(O(S^2)对比O(S),其中S表示全因果掩码中的序列长度),使得全聚合(all-gather)开销可以忽略不计。
基于网络的并行配置。并行维度的顺序[TP, CP, PP, DP]经过优化以适应网络通信。最内层的并行需要最高的网络带宽和最低的延迟,因此通常限制在同一服务器内。最外层的并行可以跨越多跳网络,应能容忍较高的网络延迟。因此,基于网络带宽和延迟的要求,我们将并行维度按顺序排列为[TP, CP, PP, DP]。DP(即FSDP)是最外层的并行,因为它可以通过异步预取分片的模型权重和减少梯度来容忍较长的网络延迟。确定具有最小通信开销且避免GPU内存溢出的最佳并行配置是一个挑战。我们开发了一个内存消耗估算器和性能预测工具,帮助我们探索各种并行配置,预测整体训练性能并有效识别内存缺口。
数值稳定性。通过比较不同并行设置下的训练损失,我们解决了几个影响训练稳定性的数值问题。为确保训练收敛,我们在反向计算过程中使用FP32梯度累积,并在FSDP中跨数据并行工作者进行FP32梯度的reduce-scatter。对于中间张量(例如视觉编码器输出),在前向计算中多次使用时,其反向梯度也在FP32中累积。
3.3.3 集体通信(Collective Communication)
Llama 3的集体通信库基于Nvidia的NCCL库的一个分支,称为NCCLX。NCCLX显著提高了NCCL在高延迟网络中的性能。回顾一下,并行维度的顺序是[TP, CP, PP, DP],其中DP对应FSDP。最外层的并行维度,PP和DP,可能通过多跳网络通信,延迟可达数十微秒。原始的NCCL集合操作——在FSDP中的全聚合(all-gather)和减少散布(reduce-scatter),以及在PP中的点对点通信(point-to-point)——需要数据分块和分阶段的数据复制。这种方法带来了几种低效:(1) 需要通过网络交换大量的小控制消息以促进数据传输,(2) 额外的内存复制操作,(3) 使用额外的GPU周期进行通信。为了Llama 3的训练,我们通过调整数据分块和传输来适应网络延迟,部分解决了这些低效问题,网络延迟在大规模集群中可高达数十微秒。我们还允许小控制消息在网络中以更高优先级传输,特别是避免在深缓冲核心交换机中被头阻塞。我们对未来Llama版本的持续工作涉及对NCCLX进行更深层次的更改,以全面解决上述所有问题。
3.3.4 可靠性和操作挑战
16K GPU训练的复杂性和潜在故障情况远超我们运营的更大规模CPU集群。此外,由于训练过程的高度同步性,系统的容错能力较低,即使单个GPU出现故障也可能导致整个任务需要重新启动。尽管面临这些挑战,在Llama 3的训练过程中,我们在支持自动化集群维护(如固件和Linux内核升级)的同时,仍然实现了超过90%的有效训练时间(Vigraham和Leonhardi,2024)。这种维护策略导致每天至少会出现一次训练中断。这里的有效训练时间是指在总运行时间内实际用于有效训练的时间比例。
表5 Llama 3 405B预训练期间54天内意外中断的根本原因分类。大约78%的意外中断归因于确认或怀疑的硬件问题。
在54天的预训练期间,我们总共遇到了466次任务中断。其中47次属于计划内中断,主要由自动维护操作(如固件升级)或运维人员主动发起的操作(如配置或数据集更新)引起。剩余的419次为非计划中断,具体分类见表5。约78%的非计划中断可归因于已确认的硬件问题(如GPU或主机组件故障)或疑似与硬件相关的问题(如静默数据损坏和单个主机的非计划维护事件)。其中,GPU问题是最主要的类别,占所有非计划中断的58.7%。尽管遇到了如此多的故障,在整个预训练期间仅需要三次重大的人工干预,其余问题均通过自动化系统得到处理。
为了提高有效训练时间,我们采取了多项措施,包括缩短任务启动和检查点保存的时间,同时开发了快速诊断和问题解决工具。我们广泛使用了PyTorch内置的NCCL飞行记录器(Ansel等,2024)。该功能将集体通信的元数据和堆栈跟踪信息捕获到环形缓冲区中,使我们能够在大规模训练环境中快速诊断系统挂起和性能问题,特别是与NCCLX相关的问题。借助这一功能,我们有效地记录了每次通信事件和每次集体操作的持续时间,并在NCCLX看门狗或心跳检测超时时自动导出跟踪数据。通过在线配置更改技术(Tang等,2015),我们可以在不需要代码重新部署或任务重启的情况下,实时且选择性地启用更复杂的跟踪操作和元数据收集。
在我们的网络架构中同时使用NVLink和RoCE技术,这使得大规模训练环境下的调试工作变得更加复杂。通过NVLink进行的数据传输通常是通过CUDA内核发出的加载/存储操作来完成的。当远程GPU或NVLink连接出现故障时,通常表现为CUDA内核中的加载/存储操作停滞,而不会返回明确的错误代码。NCCLX通过与PyTorch的紧密集成设计,显著提高了故障检测和定位的速度和准确性,允许PyTorch直接访问NCCLX的内部状态并跟踪相关信息。尽管我们无法完全避免由NVLink故障导致的系统停滞,但我们的系统会持续监控通信库的状态,并在检测到这种停滞时自动触发超时机制。此外,NCCLX会追踪每次NCCLX通信过程中的内核和网络活动,并在通信失败时提供NCCLX集合内部状态的快照,包括所有等级之间已完成和待处理的数据传输信息。我们通过分析这些数据来调试NCCLX的扩展性问题。
某些硬件问题可能会导致系统中出现"慢速节点"(straggler)。这些慢速节点虽然仍在工作,但运行速度较慢,因此难以被直接检测出来。即便只有一个慢速节点,也可能导致数千个其他GPU的运行速度下降,通常表现为正常工作但通信速度变慢。为了解决这个问题,我们开发了专门的工具,重点关注选定进程组中可能存在问题的通信。通过重点调查几个主要的可疑对象,我们通常能够有效地识别出这些慢速节点。
一个有意思的发现是环境因素对大规模训练性能的影响。在训练Llama 3 405B模型时,我们观察到吞吐量存在1-2%的日常波动,这种变化与一天中的时间有关。这种波动主要是由于中午时分较高的温度影响了GPU的动态电压和频率调节。
在训练过程中,成千上万的GPU可能会同时增加或减少功耗。例如,当所有GPU等待检查点保存或集体通信完成时,或者在整个训练任务启动或关闭时,都会出现这种情况。这种同步行为可能导致数据中心的功耗在瞬间波动达数十兆瓦,逼近电网的承载极限。随着我们为未来更大规模的Llama模型扩展训练规模,这将成为一个持续需要解决的挑战。
3.4 训练方案
Llama 3 405B的预训练方案包括三个主要阶段:(1)初始预训练,(2)长上下文预训练,以及(3)退火。以下分别描述这三个阶段。我们使用类似的方案对8B和70B模型进行预训练。
3.4.1 初始预训练
我们使用余弦学习率调度策略对Llama 3 405B模型进行预训练,其中峰值学习率为8×10^-5;线性预热阶段包含8000步,然后在120万个训练步骤中逐步衰减至8×10^-7。为了提高训练的稳定性,我们在训练初期使用较小的批量大小,随后逐步增加以提高效率。具体而言,我们初始设置批量大小为400万个tokens,序列长度为4096,在预训练2.52亿个tokens后,将这些值翻倍,即批量大小增至800万个序列,每个序列包含8192个tokens。在预训练2.87万亿个tokens后,我们再次将批量大小翻倍至1600万。我们发现这种训练方案非常稳定:观察到的损失波动很少,也不需要采取干预措施来纠正模型训练的发散问题。
调整数据组合。为了提高模型在特定下游任务上的性能,我们在训练期间对预训练数据组合进行了多次调整。特别是,我们在预训练过程中增加了非英语数据的比例,以提高Llama 3的多语言性能。我们还上采样了数学数据,以提高模型的数学推理性能,在预训练的后期阶段添加了更新的网络数据,以提升模型的知识截止点,并下采样了后来被识别为质量较低的预训练数据子集。
3.4.2 长上下文预训练
在预训练的最后阶段,我们对模型进行长序列训练,以支持最长128K tokens的上下文窗口。我们没有在早期阶段使用长序列训练,这是因为自注意力层的计算复杂度随序列长度的平方增长。我们采用逐步增加上下文长度的策略,持续预训练直到模型成功适应新的上下文长度。我们通过以下两个标准来评估适应是否成功:(1)模型在短上下文评估中的性能是否完全恢复到之前的水平,(2)模型是否能够完美解决相应长度的"大海捞针"任务。在Llama 3 405B的预训练过程中,我们分六个阶段逐步增加上下文长度,从最初的8K tokens窗口开始,最终达到128K tokens窗口。这个长上下文预训练阶段总共使用了约8000亿训练tokens。
3.4.3 退火(Annealing)
在预训练的最后4000万tokens期间,我们将学习率线性退火到0,保持上下文长度为128K tokens。在此退火阶段,我们还调整了数据组合,上采样了高质量的数据源;参见3.1.3节。最后,我们在退火期间计算了模型检查点的平均值(Polyak(1991)平均),以生成最终的预训练模型。
4 后训练(Post-Training)
我们通过对预训练的检查点进行多轮后训练,即利用人类反馈来对齐模型(Ouyang等,2022;Rafailov等,2024),从而生成对齐的Llama 3模型。每一轮后训练包括监督微调(SFT)和直接偏好优化(DPO;Rafailov等,2024),这些训练基于人工标注或合成生成的样本。我们在4.1节和4.2节分别描述了后训练的建模方法和数据处理方法。此外,我们在4.3节详细介绍了定制的数据策划策略,旨在改善模型的推理能力、编码能力、事实准确性、多语言能力、工具使用能力、长上下文处理能力以及精确指令遵循能力。
4.1 建模
图7 Llama 3整体后训练方法的示意图。我们的后训练策略包括拒绝采样、监督微调和直接偏好优化。详细信息见正文。
我们后训练策略的核心是一个奖励模型和一个语言模型。首先,我们使用人类注释的偏好数据在预训练检查点的基础上训练一个奖励模型(见第4.1.2节)。然后,我们使用监督微调(SFT;见第4.1.3节)微调预训练的检查点,并通过直接偏好优化(DPO;见第4.1.4节)进一步对齐检查点。这个过程如图7所示。除非另有说明,我们的建模程序适用于Llama 3 405B,为简便起见,我们将Llama 3 405B简称为Llama 3。
4.1.1 聊天对话格式
为了调优LLMs以实现人类与AI的互动,我们需要定义一个聊天对话协议,使模型能够理解人类指令并执行对话任务。与其前身相比,Llama 3 具有新的功能,如工具使用(见第4.3.5节),这可能需要在单次对话轮次内生成多条消息并将其发送到不同的位置(例如用户、ipython)。为了支持这一点,我们设计了一个新的多消息聊天协议,使用各种特殊的头部和终止tokens。头部tokens用于指示对话中每条消息的来源和目的地。同样,终止tokens指示何时是人类与AI交替发言的时机。
4.1.2 奖励建模
我们在预训练检查点的基础上训练一个奖励模型(RM),覆盖不同的能力。训练目标与Llama 2相同,但我们移除了损失中的边距项,因为在数据扩展后我们观察到改进效果递减。遵循Llama 2的做法,我们在奖励建模中使用了所有的偏好数据,过滤掉了响应相似的样本。除了标准的(选择的、被拒绝的)响应偏好对外,人类注释还为一些提示创建了第三种“编辑的响应”,即对选择的响应进行进一步编辑(见第4.2.1节)。因此,每个偏好排序样本有两个或三个响应,具有明确的排序(编辑的 > 选择的 > 被拒绝的)。我们在训练过程中将提示和多个响应连接成一行,并随机打乱响应。这是一种将响应放在单独的行中并计算分数的标准场景的近似,但在我们的消融实验中,这种方法提高了训练效率而没有损失准确性。
4.1.3 监督微调
奖励模型然后用于对我们的人工注释提示进行拒绝采样,详细信息见第4.2节。结合这些拒绝采样的数据和其他数据源(包括合成数据),我们使用标准的交叉熵损失在目标tokens上微调预训练的语言模型(同时在提示tokens上屏蔽损失)。有关数据组合的更多细节见第4.2节。我们将这一阶段称为监督微调(SFT;Wei et al., 2022a; Sanh et al., 2022; Wang et al., 2022b),尽管许多训练目标是模型生成的。我们的最大模型以1e-5的学习率在8500到9000步的过程中进行微调。我们发现这些超参数设置在不同轮次和数据组合中都能很好地工作。
4.1.4 直接偏好优化
我们进一步使用直接偏好优化(DPO;Rafailov et al., 2024)对SFT模型进行训练,以对齐人类偏好。对于训练,我们主要使用从先前对齐轮次中最佳表现模型收集的最新批次偏好数据。因此,我们的训练数据更符合每轮优化的策略模型的分布。我们还探索了基于策略的算法如PPO(Schulman et al., 2017),但发现DPO对于大规模模型需要更少的计算,并且在指令遵循基准如IFEval(Zhou et al., 2023)上表现更好。对于Llama 3,我们使用1e-5的学习率,并将β超参数设置为0.1。此外,我们对DPO进行了以下算法修改:
在DPO损失中屏蔽格式化tokens:我们在损失中屏蔽了选择和被拒绝响应中的特殊格式化tokens,包括头部和终止tokens(见第4.1.1节),以稳定DPO训练。我们观察到这些tokens参与损失计算可能导致不期望的模型行为,如尾部重复或突然生成终止tokens。我们推测这是由于DPO损失的对比性质——选择和被拒绝响应中常见tokens的存在导致学习目标冲突,因为模型需要同时增加和减少这些tokens的概率。 使用NLL损失进行正则化:我们在选择的序列上添加了一个带有0.2缩放系数的附加负对数似然(NLL)损失项,类似于Pang等人(2024)。这有助于通过保持生成的所需格式和防止选择响应的对数概率降低来进一步稳定DPO训练(Pang et al., 2024; Pal et al., 2024)。
4.1.5 模型平均
最后,我们对每个RM、SFT或DPO阶段使用不同版本的数据或超参数进行实验得到的模型进行平均(Izmailov et al., 2019; Wortsman et al., 2022; Li et al., 2022)。
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对齐的内部收集的人类偏好数据的统计信息。我们要求注释者与模型进行多轮对话,并在每轮中比较响应。在后处理过程中,我们将每个对话分成多个示例,在回合级别。每个示例包括一个提示(如果有的话,包括以前的对话)和一个响应(例如,选择的或拒绝的响应)。
表6展示了我们用于Llama 3训练的偏好标注统计数据。普通英语类别涵盖了多个子类别,如知识问答或精确指令执行,这些都超出了特定能力的范畴。与Llama 2相比,我们观察到提示和响应的平均长度有所增加,这表明我们在更复杂的任务上训练Llama 3。此外,我们实施了质量分析和人工评估流程,以严格评估所收集的数据,使我们能够优化提示并向标注者提供系统性、可操作的反馈。例如,随着Llama 3在每轮后训练中不断改进,我们相应地增加了提示的复杂性,以针对模型仍有不足的领域。
在每轮后训练中,我们使用当时所有可用的偏好数据进行奖励建模,同时仅使用各种能力最新批次的数据进行DPO训练。对于奖励建模和DPO,我们使用被标注为"所选响应显著优于或优于被拒绝响应"的样本进行训练,并剔除响应相似的样本。
4.2.2 SFT 数据
通过人工标注收集的提示及拒绝采样的响应 针对特定能力的合成数据(详见第4.3节) 少量人工策划的数据(详见第4.3节)
随着后训练轮次的进行,我们开发出了更强大的Llama 3变体,用于收集涵盖广泛复杂能力的大规模数据集。本节将讨论拒绝采样程序的细节和我们最终SFT数据集的整体组成。
拒绝采样。在拒绝采样(RS)过程中,对于每个人工标注收集的提示(见第4.2.1节),我们从最新的对话模型策略中采样K个输出(通常在10到30之间),并使用我们的奖励模型选择最佳候选者,这与Bai等(2022)的方法一致。在后期的后训练轮次中,我们引入了系统提示,引导RS响应符合预期的语气、风格或格式,这可能因不同能力而异。
为提高拒绝采样的效率,我们采用了PagedAttention技术(Kwon等,2023)。PagedAttention通过动态分配键值缓存来提高内存效率,并根据当前缓存容量动态调度请求,从而支持任意输出长度。然而,这可能在内存耗尽时带来换出风险。为消除这种换出开销,我们定义了一个最大输出长度,只在有足够内存容纳该长度输出时执行请求。PagedAttention还使我们能够为一个提示的所有对应输出共享键值缓存页面。综合这些优化,拒绝采样的吞吐量提高了两倍多。
表7 SFT数据统计。我们列出用于Llama 3对齐的内部收集的SFT数据。每个SFT示例由上下文(即,除最后一个回合外的所有对话回合)和最终响应组成。
整体数据组成。表7显示了我们"帮助性"混合数据集中每个大类的数据统计信息。虽然SFT和偏好数据涵盖了重叠的领域,但它们的策划方式不同,因此产生了不同的数量统计。在第4.2.3节中,我们描述了对数据样本进行主题、复杂性和质量分类的技术。在每轮后训练中,我们仔细调整整体数据组合,以优化在广泛基准上的性能。我们的最终数据集对一些高质量来源进行了多次训练,同时对其他来源进行了降采样处理。
4.2.3 数据处理和质量控制
鉴于我们的大部分训练数据是模型生成的,因此需要仔细的清理和质量控制。
数据清理。在早期轮次中,我们观察到数据中存在许多不良模式,例如过度使用表情符号或感叹号。因此,我们实施了一系列基于规则的数据删除和修改策略,以过滤或清理有问题的数据。例如,为了减轻过度道歉的语调问题,我们识别了过度使用的短语(如“对不起”或“我道歉”),并仔细平衡这些样本在我们数据集中的比例。
数据修剪。我们还应用了一系列基于模型的技术来删除低质量的训练样本并提高整体模型性能:
主题分类:我们首先将Llama 38B微调为一个主题分类器,并对所有数据进行推断,将其分类为粗粒度桶(如“数学推理”)和细粒度桶(如“几何和三角”)。
质量评分:我们使用奖励模型和基于Llama的信号为每个样本获得质量评分。对于基于RM的评分,我们将RM评分中排名前四分位数的数据视为高质量。对于基于Llama的评分,我们提示Llama3检查点按三分制对每个样本进行一般英语数据(准确性、指令遵循和语气/呈现)评分,并按二分制对编码数据(错误识别和用户意图)评分,并将获得最高分的样本视为高质量。RM和基于Llama的评分有很高的分歧率,我们发现结合这些信号在我们的内部测试集上获得了最佳召回率。最终,我们选择被RM或基于Llama的过滤器tokens为高质量的示例。
难度评分:因为我们也对优先处理对模型来说更复杂的示例感兴趣,所以我们使用两种难度度量来评分数据:Instag(Lu et al., 2023)和基于Llama的评分。对于Instag,我们提示Llama370B执行SFT提示的意图tokens,更多的意图意味着更复杂。我们还提示Llama3按三分制衡量对话的难度(Liu et al., 2024c)。
语义去重:最后,我们执行语义去重(Abbas et al., 2023; Liu et al., 2024c)。我们首先使用RoBERTa(Liu et al., 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(Chen et al., 2021)发布以来,代码生成的LLM受到了广泛关注。开发者现在广泛使用这些模型来生成代码片段、调试、自动化任务和提升代码质量。对于Llama 3,我们的目标是改进和评估以下高优先级编程语言的代码生成、文档编写、调试和审查能力:Python、Java、JavaScript、C/C++、TypeScript、Rust、PHP、HTML/CSS、SQL、bash/shell。我们通过训练代码专家、生成SFT合成数据、使用系统提示引导改进格式以及创建质量过滤器以删除低质量样本,来提升这些编程能力。
专家训练。我们训练了一位代码专家(code expert),用于在随后的后训练轮次中收集高质量的人类注释数据。这通过分支主要预训练运行并继续在一个包含超过85%代码数据的1T token混合数据上进行预训练来实现。事实表明,在特定领域的数据上继续预训练可以有效提升在该领域的性能(Gururangan et al., 2020)。我们采用了与CodeLlama(Rozière et al., 2023)类似的配方。在最后几千步的训练中,我们进行长上下文微调(LCFT),将专家的上下文长度扩展到16K token,并使用高质量的代码库级数据进行训练。最后,我们遵循第4.1节中描述的类似后训练建模配方,对该模型进行对齐,主要针对代码进行SFT和DPO数据混合。这一模型还用于代码提示的拒绝采样(第4.2.2节)。
合成数据生成。在开发过程中,我们发现代码生成存在一些关键问题,包括难以遵循指令、代码语法错误、错误的代码生成以及修复错误的难度。尽管人类注释理论上可以解决这些问题,但合成数据生成提供了一种低成本和大规模的补充方法,不受注释人员专业水平的限制。因此,我们使用Llama 3和代码专家生成大量的合成SFT对话。
我们描述了三种生成合成代码数据的高级方法。总共生成了超过270万个合成示例,用于SFT。
1. 合成数据生成:执行反馈。当在由更大、更有能力的模型生成的数据上训练8B和70B模型时,表现显著提升。然而,我们的初步实验表明,在自身生成的数据上训练Llama 3 405B并无助益(甚至可能降低性能)。为解决这一限制,我们引入了执行反馈作为事实来源,使模型能够从错误中学习并保持正确轨道。具体来说,我们生成了大约一百万个合成编码对话的数据集,使用如下过程:
问题描述生成:首先,我们生成了大量编程问题描述,涵盖了各种主题,包括长尾分布中的主题。为实现这种多样性,我们从各种来源随机采样代码片段,并提示模型生成受这些示例启发的编程问题。这使我们能够接触到广泛的主题并创建全面的问题描述集(Wei et al., 2024)。 解决方案生成:然后,我们提示Llama 3用指定的编程语言解决每个问题。我们发现,在提示中添加一般的良好编程规则可以提高生成解决方案的质量。此外,要求模型在注释中解释其思路也是有帮助的。 正确性分析:生成解决方案后,关键是认识到其正确性无法保证,将不正确的解决方案包含在微调数据集中可能会降低模型质量。尽管我们无法确保完全正确性,但我们开发了近似正确性的方法。为此,我们从生成的解决方案中提取源代码,并应用静态和动态分析技术测试其正确性,包括: 静态分析:我们通过解析器和linter运行所有生成的代码,以确保语法正确,捕获诸如语法错误、未初始化变量或未导入函数的使用、代码风格问题、类型错误等。 单元测试生成和执行:对于每个问题和解决方案,我们提示模型生成单元测试,并在容器化环境中与解决方案一起执行,捕获运行时执行错误和一些语义错误。 错误反馈和迭代自我修正:当解决方案在任何步骤失败时,我们提示模型修正它。提示包含原始问题描述、故障解决方案以及解析器/linter/测试器的反馈(stdout, stderr和返回代码)。在单元测试执行失败后,模型可以修复代码以通过现有测试,或修改其单元测试以适应生成的代码。只有通过所有检查的对话才被包含在最终数据集中,用于监督微调(SFT)。值得注意的是,我们观察到大约20%的解决方案最初不正确但通过自我修正得到改进,表明模型从执行反馈中学习并提升了性能。 微调和迭代改进:微调过程分多个轮次进行,每一轮次都建立在前一轮次的基础上。每轮次后,模型得到改进,生成更高质量的合成数据用于下一轮次。这种迭代过程允许逐步改进和提升模型性能。
图8 代码翻译示例。我们展示了使用Llama 3将Python代码(左)翻译为PHP代码(右)以扩展我们的SFT数据集的编程语言范围的示例。
2. 合成数据生成:编程语言翻译。我们观察到主要编程语言(如Python/C++)与不太常见的编程语言(如Typescript/PHP)之间存在性能差距。这并不意外,因为我们对不太常见的编程语言的训练数据较少。为减轻这一问题,我们通过将常见编程语言的数据翻译成不太常见的语言来补充现有数据(类似于Chen et al. (2023)在推理背景下的方法)。这是通过提示Llama 3并通过语法解析、编译和执行确保质量来实现的。图8展示了从Python翻译生成的PHP代码示例。通过MultiPL-E(Cassano et al., 2023)基准测试,这显著提升了不太常见语言的性能。
3. 合成数据生成:反向翻译。为提升某些代码能力(如文档编写、解释),在确定质量时执行反馈不太有帮助,我们采用一种替代的多步方法。通过这一程序,我们生成了大约120万个与代码解释、生成、文档编写和调试相关的合成对话。从预训练数据中的各种编程语言代码片段开始:
生成:我们提示Llama 3生成代表目标能力的数据(如添加代码片段的注释和文档字符串,或要求模型解释一段代码)。 反向翻译:然后,我们提示模型将合成生成的数据“反向翻译”回原始代码(如要求模型仅从文档生成代码,或要求模型仅从解释生成代码)。 过滤:使用原始代码作为参考,我们提示Llama 3确定输出的质量(如要求模型评价反向翻译代码与原始代码的忠实度)。然后,我们使用那些自验证分数最高的生成示例进行SFT。
图9 使用系统提示改善生成代码质量。左:无系统提示。右:有系统提示。
拒绝采样期间的系统提示引导:在拒绝采样过程中,我们使用特定的代码系统提示来改进代码的可读性、文档编写、彻底性和具体性。请回顾第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 (Hardalov et al., 2020) 和Conic10k(Wu et al., 2023)的数据。为了改进语言对齐,我们还使用了GlobalVoices (Prokopidis et al., 2016) 和Wikimedia (Tiedemann, 2012)的平行文本。我们使用基于LID的过滤和Blaser2.0 (Seamless Communication et al., 2023)来删除低质量数据。对于平行文本数据,我们应用了一个受Wei et al. (2022a)启发的多语言模板,而不是直接使用双语文本对,以更好地模拟翻译和语言学习场景中的现实对话。 拒绝采样数据:我们在人工标注提示上应用拒绝采样,以生成高质量的微调样本,与英文数据的处理方式相比有少许修改: 生成:我们探索了从0.2到1的范围内随机选择温度超参数,以便在后训练的早期轮次中获得多样化的生成。在高温度下,多语言提示的响应可能会变得富有创造性和启发性,但也容易出现不必要或不自然的语言转换。在最后一轮后训练中,我们使用0.6的恒定值以平衡这种权衡。此外,我们使用专门的系统提示来改进响应格式、结构和总体可读性。 选择:在基于奖励模型的选择之前,我们实施了特定于多语言的检查,以确保提示和响应之间的高语言匹配率(例如,一个罗马化的印地语提示不应期望得到一个用印地语天城文书写的响应)。 翻译数据:我们尽量避免使用机器翻译的数据来微调模型,以防止翻译腔(Bizzoni et al., 2020; Muennighoff et al., 2023) 或可能的名称偏差(Wang et al., 2022a)、性别偏差(Savoldi et al., 2021) 或文化偏差(Ji et al., 2023)。此外,我们旨在防止模型仅暴露于根植于英语文化背景的任务,这些任务可能无法代表我们希望捕捉的语言和文化多样性。我们为改进非英语语言中的定量推理性能,唯一一次例外是翻译我们的合成定量推理数据(见第4.3.3节详细信息)。由于这些数学问题的语言本质简单,翻译样本几乎没有质量问题。我们在增加这些翻译数据后在MGSM (Shi et al., 2022) 上观察到了显著的性能提升。
4.3.3 数学与推理
我们将推理定义为执行多步计算并得出正确最终答案的能力。几个挑战引导了我们训练在数学推理方面表现出色的模型的方法:
缺少提示:随着问题复杂性的增加,用于监督微调(SFT)的有效提示或问题数量减少。这种稀缺性使得难以创建多样且具有代表性的训练数据集来教授模型各种数学技能(Yu et al., 2023; Yue et al., 2023; Luo et al., 2023; Mitra et al., 2024; Shao et al., 2024; Yue et al., 2024b)。 缺乏真实的思维链:有效的推理需要一个逐步的解决方案来促进推理过程(Wei et al., 2022c)。然而,通常缺少真实的思维链,这是指导模型逐步分解问题并得出最终答案的关键(Zelikman et al., 2022)。 不正确的中间步骤:在使用模型生成的思维链时,中间步骤可能并不总是正确的(Cobbe et al., 2021; Uesato et al., 2022; Lightman et al., 2023; Wang et al., 2023a)。这种不准确性可能导致错误的最终答案,需要解决。 教模型使用外部工具:增强模型使用外部工具(如代码解释器)的能力,使其能够通过交替使用代码和文本来推理(Gao et al., 2023; Chen et al., 2022; Gou et al., 2023)。这种能力可以显著提高它们的解决问题的能力。 训练与推理之间的差异:模型在训练期间的微调方式与实际使用期间的互动方式之间通常存在差异。在推理过程中,微调模型可能会与人类或其他模型互动,需要通过反馈来提高其推理能力。确保训练与现实使用之间的一致性对于保持推理性能至关重要。
为了应对这些挑战,我们应用了以下方法:
解决提示短缺问题:我们从数学背景中获取相关的预训练数据,并将其转换为问答格式,以便用于监督微调。此外,我们识别出模型在某些数学技能上的表现不足,并积极地从人类那里获取提示来教授模型这些技能。为了促进这一过程,我们创建了一个数学技能分类法(Didolkar et al., 2024),并要求人类相应地提供相关的提示/问题。 通过逐步推理轨迹增强训练数据:我们使用Llama 3为一组提示生成逐步解决方案。对于每个提示,模型会生成多个变量数量的解决方案。这些解决方案根据正确答案进行过滤(Li et al., 2024a)。我们还进行自我验证,使用Llama 3验证特定逐步解决方案是否适用于给定问题。这个过程通过消除模型未能生成有效推理轨迹的实例,提高了微调数据的质量。 过滤错误的推理轨迹:我们训练了结果奖励模型和逐步奖励模型(Lightman et al., 2023;Wang et al., 2023a),用于过滤训练数据中中间推理步骤错误的部分。这些奖励模型被用于消除无效的逐步推理数据,确保用于微调的数据质量。对于更具挑战性的提示,我们结合蒙特卡罗树搜索(MCTS)和学习的逐步奖励模型生成有效的推理轨迹,从而进一步增强高质量推理数据的收集(Xie et al., 2024)。 代码与文本推理交替:我们引导Llama 3通过结合文本推理和相关的Python代码来解决推理问题(Gou et al., 2023)。代码执行被用作反馈信号,以消除推理链无效的情况,确保推理过程的正确性。 从反馈和错误中学习:为了模拟人类反馈,我们利用错误的生成(即,导致错误推理轨迹的生成)并通过提示Llama 3生成正确的结果进行错误纠正(An et al., 2023b;Welleck et al., 2022;Madaan et al., 2024a)。这种利用错误尝试反馈并进行纠正的迭代过程,有助于提高模型准确推理和从错误中学习的能力。
4.3.4 长上下文
在最终预训练阶段,我们将Llama 3的上下文长度从8K token扩展到128K token(详见第3.4节)。类似于预训练,我们发现,在微调过程中,我们必须仔细调整配方,以平衡短上下文和长上下文的能力。
监督微调(SFT)和合成数据生成。单纯使用仅包含短上下文数据的现有SFT配方,会导致长上下文能力在预训练中的显著退化,这凸显了在SFT数据混合中加入长上下文数据的必要性。然而,在实际操作中,由于阅读长篇上下文的繁琐和耗时性质,很难让人工来注释这样的例子,因此我们主要依赖合成数据来填补这一空白。我们使用早期版本的Llama 3基于关键的长上下文用例生成合成数据,包括(可能是多轮的)问答、长文档的摘要和代码库的推理,具体描述如下:
问答:我们从预训练数据集中精心挑选了一组长文档,将这些文档拆分成8K token的块,并提示早期版本的Llama 3模型根据随机选择的块生成QA对。在训练过程中,整个文档作为上下文使用。 摘要:我们应用分层摘要技术来处理长上下文文档,首先使用我们最强的Llama 3 8K上下文模型对8K输入长度的块进行摘要,然后对这些摘要进行进一步总结。在训练过程中,我们提供完整的文档并提示模型总结文档,同时保留所有重要细节。我们还基于文档摘要生成QA对,并提示模型回答需要对整个长文档有全局理解的问题。 长上下文代码推理:我们解析Python文件以识别导入语句并确定其依赖关系。从这里,我们选择最常被依赖的文件,特别是那些被至少五个其他文件引用的文件。我们从一个库中移除其中一个关键文件,并提示模型识别哪些文件依赖于缺失的文件,并生成所需的缺失代码。
我们进一步根据序列长度(16K、32K、64K和128K)对这些合成生成的样本进行分类,以实现更细粒度的输入长度目标。
通过仔细的消融实验,我们观察到,将0.1%的合成长上下文数据与原始短上下文数据混合,可以优化短上下文和长上下文基准测试的性能。
DPO(Direct Preference Optimization)。我们观察到,在DPO中仅使用短上下文训练数据并不会对长上下文性能产生负面影响,只要SFT模型对长上下文任务表现良好。我们怀疑这是因为我们的DPO配方的优化器步骤比SFT少。基于这一发现,我们在长上下文SFT检查点之上,为DPO保持标准的短上下文配方。
4.3.5 工具使用
教授大语言模型(LLMs)使用诸如搜索引擎或代码解释器等工具,极大地扩展了它们能解决的任务范围,将它们从纯聊天模型转变为更通用的助手(Nakano等, 2021; Thoppilan等, 2022; Parisi等, 2022; Gao等, 2023; Mialon等, 2023a; Schick等, 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系统提示中启用。核心工具可以在系统提示中单独启用或禁用。
对于工具,对话通常包含不止一个助手消息(例如,调用工具并对工具输出进行推理)。因此,我们在消息级别进行注释以收集细粒度反馈:注释员在具有相同上下文的两个助手消息之间提供偏好,或者,如果两者都有重大问题,则编辑其中一个消息。选择或编辑后的消息被添加到上下文中,对话继续。这提供了对助手调用工具能力和推理工具输出能力的人类反馈。注释员不能对工具输出进行排名或编辑。 我们不进行拒绝采样,因为我们在工具基准测试中没有观察到收益。
为了加速注释过程,我们首先通过在先前Llama 3检查点生成的合成数据上进行微调,启动基本工具使用能力。因此,注释员需要进行的编辑更少。同样,随着Llama 3在其开发过程中逐步改进,我们逐步复杂化我们的人工注释协议:从单轮工具使用注释开始,然后转向对话中的工具使用,最后注释多步工具使用和数据分析。
工具数据集。为了创建工具使用应用的数据,我们采用以下程序:
单步工具使用:我们首先通过少样本生成合成用户提示,这些提示通过构建需要调用我们核心工具之一(例如,超过我们知识截止日期的问题)。然后,仍然依赖少样本生成,我们为这些提示生成适当的工具调用,执行它们,并将输出添加到模型的上下文中。最后,我们再次提示模型基于工具输出生成对用户查询的最终答案。我们最终得到以下形式的轨迹:系统提示、用户提示、工具调用、工具输出、最终答案。我们还过滤了大约30%的数据集,以删除无法执行的工具调用或其他格式问题。
图10 多步工具使用。Llama 3执行多步规划、推理和调用工具来解决任务的示例。
多步工具使用:我们遵循类似的协议,首先生成合成数据以教授模型基本的多步工具使用能力。为此,我们首先提示Llama 3生成至少需要两个工具调用的用户提示,这些工具可以是我们核心集合中的相同或不同的工具。然后,基于这些提示,我们通过少样本提示Llama 3生成一个解决方案,该解决方案包含交错的推理步骤和工具调用,类似于ReAct(Yao等, 2022)。请参见图10,了解Llama 3执行多步工具使用任务的示例。
图11 处理文件上传。Llama 3执行上传文件分析和可视化的示例。
文件上传:我们注释以下文件类型:.txt、.docx、.pdf、.pptx、.xlsx、.csv、.tsv、.py、.json、.jsonl、.html、.xml。我们的提示基于提供的文件,要求总结文件内容、查找并修复错误、优化代码、进行数据分析或可视化。请参见图11,了解Llama 3执行涉及文件上传任务的示例。
在对这些合成数据进行微调后,我们在多样且具有挑战性的场景中收集人工注释,包括多轮互动、超过三步的工具使用以及工具调用未能产生满意答案的实例。我们通过不同的系统提示扩充我们的合成数据,以教授模型仅在激活时使用工具。为了训练模型避免在简单查询时调用工具,我们还添加了来自简单数学或问答数据集(Berant等, 2013; Koncel-Kedziorski等, 2016; Joshi等, 2017; Amini等, 2019)的查询及其不使用工具但在系统提示中激活工具的响应。
零样本工具使用数据。我们通过在大量多样的部分合成(函数定义、用户查询、相应调用)元组上进行微调,改进了Llama 3的零样本工具使用能力(也称为函数调用)。我们在一组未见过的工具上评估我们的模型。
单一、嵌套和平行函数调用:调用可以是简单的、嵌套的,即我们将一个函数调用作为另一个函数的参数,或者是并行的,即模型返回一个独立函数调用列表。生成多样的函数、查询和真值可能具有挑战性(Mekala等, 2024),我们借助Stack(Kocetkov等, 2022)挖掘真实函数来支撑我们的合成用户查询。更具体地说,我们提取函数调用及其定义,进行清理和过滤,例如对于缺少文档字符串或不可执行的函数,并使用Llama 3生成对应于函数调用的自然语言查询。 多轮函数调用:我们还为带有函数调用的多轮对话生成合成数据,遵循Li等(2023b)提出的类似协议。我们使用多个代理生成领域、API、用户查询、API调用和响应,同时确保生成的数据覆盖一组多样的领域和现实的API。所有代理都是Llama 3的变体,根据其角色以不同方式提示,并以逐步合作的方式进行。
4.3.6 事实性(Factuality)
幻觉(Hallucinations)仍然是大型语言模型面临的主要挑战之一。模型往往在它们知识有限的领域表现得过于自信。尽管存在这些缺点,模型仍然常被用作知识库,这可能导致传播错误信息等风险结果。尽管我们认识到事实性问题可以超越幻觉,但我们在此采取了以幻觉为主的方法。
从预训练数据中提取数据片段。 通过提示Llama 3生成关于这些片段的事实性问题(上下文)。 从Llama 3中采样对这些问题的回答。 使用原始上下文作为参考,并以Llama 3为评判标准,评分生成的回答的正确性。 以Llama 3为评判标准,评分生成的回答的信息性。 对于在生成中一贯信息丰富但不正确的回答,生成拒答。
我们利用从知识探测生成的数据,鼓励模型仅回答它知道的问题,对于不确定的问题拒绝回答。此外,预训练数据并不总是事实一致或正确的。因此,我们还收集了一组有限的标注事实性数据,处理涉及敏感话题且存在事实矛盾或不正确陈述的情况。
4.3.7 可控性(Steerability)
可控性是指将模型的行为和结果引导至开发者和用户指定要求的能力。作为一个通用基础模型,Llama 3应具备最大限度的可控性,以便轻松适应不同的下游应用场景。对于Llama 3,我们通过自然语言指令的系统提示增强其可控性,特别是在响应长度、格式、语气和角色/人设方面。
数据收集。我们通过要求注释员为Llama 3设计不同的系统提示,收集一般英语类别的可控性偏好样本。注释员然后与模型进行对话,以评估模型在对话过程中遵循系统提示中定义的指令的一致性。下面展示了一个用于增强可控性的自定义系统提示示例:
-----
-----
建模。收集偏好数据后,我们利用这些数据在奖励建模、拒绝采样、SFT和DPO中增强Llama 3的可控性。
5 结果
我们对Llama 3进行了广泛的评估,考察了:(1) 预训练语言模型的性能,(2) 后训练语言模型的性能,以及 (3) Llama 3的安全特性。我们在下面的各个子章节中呈现这些评估结果。
5.1 预训练语言模型
在本节中,我们报告了预训练Llama 3的评估结果(见第3节),并与其他尺寸相当的模型进行了比较。我们尽可能再现了竞争对手模型的结果。对于非Llama模型,我们报告了公开报道的最佳分数或(在可能的情况下)我们自己再现的结果。这些评估的具体细节,包括镜头数量、指标及其他相关超参数和设置,可以在我们的Github存储库中访问。此外,我们发布了作为评估一部分生成的数据,这些数据使用公开可用的基准,可以在Huggingface找到。我们在标准基准上评估了模型的质量(第5.1.1节),评估了对多项选择题设置变化的鲁棒性(第5.1.2节),并进行了对抗性评估(第5.1.3节)。我们还进行了污染分析,以估计我们的评估在多大程度上受到训练数据污染的影响(第5.1.4节)。
5.1.1 标准基准测试
表8 按类别划分的预训练基准。我们对用于评估预训练Llama 3模型的所有基准进行了分类概述。
为了将我们的模型与当前的最先进模型进行比较,我们在大量标准基准测试上评估了Llama 3,如表8所示。这些评估涵盖了8个顶级类别:(1)常识推理;(2)知识;(3)阅读理解;(4)数学、推理与问题解决;(5)长上下文;(6)代码;(7)对抗性评估;(8)综合评估。
实验设置。对于每个基准测试,我们计算了Llama 3及其他同类预训练模型的得分。在可能的情况下,我们使用自己的管道重新计算其他模型的得分。为了确保公平比较,我们选择了我们计算的得分与该模型在相同或更保守设置下报告的得分中较高的一个。关于我们的评估设置的更多详细信息可以在[此处](链接)找到。对于某些模型,无法重新计算基准值,例如,因为未发布预训练模型或API不提供访问日志概率的权限。特别地,这对所有与Llama 3 405B可比的模型都成立。因此,我们没有报告Llama 3 405B的类别平均值,因为这要求所有基准测试的所有数字都可用。

其中S是首选基准得分,N是基准的样本大小。我们注意到,由于基准数据中的方差不是唯一的方差来源,这些95% CI是能力估计中实际方差的下界。对于不是简单平均值的指标,省略CI。
图12 预训练基准上预训练的Llama 3 8B和70B模型的性能。结果按能力类别汇总,通过对该类别对应的所有基准的准确率求平均值。
8B和70B模型的结果。图12报告了Llama 3 8B和70B在常识推理、知识、阅读理解、数学和推理及代码基准测试上的平均表现。结果显示,Llama 3 8B在几乎每个类别中都优于竞争对手模型,无论是按类别的胜率还是按类别的平均表现。我们还发现,Llama 3 70B在大多数基准测试上大幅优于其前代Llama 2 70B,除了可能已经饱和的常识基准测试。Llama 3 70B也优于Mixtral 8x22B。
表9 预训练模型在阅读理解任务上的性能。结果包括95%的置信区间。
表10 预训练模型在编码任务上的性能。结果包括95%的置信区间。
表11 预训练模型在常识理解任务上的性能。结果包括95%的置信区间。
表12 预训练模型在数学和推理任务上的性能。结果包括95%置信区间。♦11-shot。4可变shot。
表13 预训练模型在一般语言任务上的性能。结果包括95%置信区间。
表14 预训练模型在长上下文任务上的性能。结果包括95%的置信区间。
所有模型的详细结果。表9、表10、表11、表12、表13和表14展示了预训练的Llama 3 8B、70B和405B模型在阅读理解任务、编码任务、常识理解任务、数学推理任务和一般任务上的基准性能。这些表格将Llama 3的性能与同类大小模型进行了比较。结果表明,Llama 3 405B在其类别中表现出色,特别是在大幅超越以前的开源模型。对于长上下文,我们在第5.2节中呈现了更全面的结果(包括“针在草堆中”之类的探测任务)。
5.1.2 模型鲁棒性
少量标签偏见。根据Zheng等(2023)和Weber等(2023a)的研究,我们调查了四次示例标签分布的影响。具体地,我们考虑以下设置:(1)所有少量示例都有相同标签(A A A A);(2)所有示例有不同标签(A B C D);以及(3)只有两个标签存在(A A B B和C C D D)。 标签变体。我们还研究了模型对不同选择tokens集的响应。我们考虑了Alzahrani等(2024)提出的两个集合:即一组常见的语言独立tokens($ & @)和一组罕见的tokens(œ § з ü),这些tokens没有任何隐含的相对顺序。我们还考虑了两种版本的标准标签(A. B. C. D.和A) B) C) D))以及一个数字列表(1. 2. 3. 4.)。 答案顺序。根据Wang等(2024a)的研究,我们计算了不同答案顺序下结果的稳定性。为了计算这一点,我们根据固定的排列重新映射数据集中的所有答案。例如,对于排列A B C D,所有标签为A和B的答案选项保持其标签,所有标签为C的答案选项获得D标签,反之亦然。 提示格式。我们评估了五个任务提示的性能方差,这些提示在提供信息的程度上有所不同:一个提示只是要求模型回答问题,而其他提示则断言模型的专业知识或应选择最佳答案。
图13 我们的预训练语言模型在MMLU基准测试中对不同设计选择的鲁棒性。左:不同标签变体的性能。右:少样本示例中存在的不同标签的性能。
图14 我们的预训练语言模型在MMLU基准测试中对不同设计选择的鲁棒性。左:不同答案顺序的性能。右:不同提示格式的性能。
图13展示了我们研究标签变体(左)和少量标签偏见(右)的实验结果。结果显示,我们的预训练语言模型对MCQ标签变化和少量提示标签结构非常鲁棒。特别是405B参数模型的鲁棒性尤为显著。图14展示了我们对答案顺序和提示格式鲁棒性研究的结果。图中的结果进一步强调了我们的预训练语言模型的性能鲁棒性,尤其是Llama 3 405B。
5.1.3 对抗性基准
除了上述基准外,我们还在三个领域的对抗性基准上进行了评估:问答、数学推理和释义检测。这些测试探讨了模型在特定创建为具有挑战性的任务上的能力,并且可能还指出在基准上过拟合的情况。对于问答,我们使用了对抗性SQuAD(Jia和Liang,2017)和Dynabench SQuAD(Kiela等,2021)。对于数学推理,我们使用了GSM-Plus(Li等,2024c)。对于释义检测,我们使用了PAWS(Zhang等,2019)。
图15 在问答、数学推理和释义检测基准测试中,对抗性和非对抗性的性能比较。左:预训练模型的结果。右:后训练模型的结果。
图15展示了Llama 3 8B、70B和405B在对抗性基准上的得分,作为其在非对抗性基准上的表现函数。我们使用SQuAD(Rajpurkar等,2016)作为问答的非对抗性基准,使用GSM8K作为数学推理的非对抗性基准,使用QQP(Wang等,2017)作为释义检测的非对抗性基准。每个数据点代表一个对抗性和非对抗性数据集的组合(例如QQP与PAWS配对),我们在一个类别内显示所有可能的组合。对角黑线表示对抗性和非对抗性数据集之间的平价——在这条线上的表现表明模型无论是否对抗性都具有类似的性能。
在释义检测方面,无论是预训练还是后训练模型似乎都没有受到PAWS构建时的对抗性影响,这标志着相对于前一代模型的显著进步。这个结果证实了Weber等(2023a)的发现,他们也发现LLMs不太容易受到一些对抗性数据集中发现的虚假关联的影响。然而,对于数学推理和问答,对抗性表现明显低于非对抗性表现。这种模式在预训练和后训练模型中相似。
5.1.4 污染分析(Contamination Analysis)
我们进行了污染分析,以估计评估数据在预训练语料库中出现对基准测试得分的影响程度。在之前的研究中,使用了多种不同的污染检测方法及其超参数组合——有关综述可参考Singh等(2024)。这些方法可能会产生误报和漏报,目前如何最佳运行污染分析仍是一个开放的研究领域。在此,我们主要遵循Singh等(2024)的建议。
方法。具体而言,Singh等(2024)提出应根据方法在数据集中“清洁”部分与整个数据集之间产生的最大性能差异,即估计的性能增益,来经验性地选择污染检测方法。对于所有评估数据集,我们基于8-gram重叠评分,这被Singh等(2024)发现对许多数据集来说是准确的。如果数据集D的一个样本在预训练语料库中至少一次出现的8-gram覆盖其词汇的一定比例TD,我们认为这个样本是被污染的。我们分别为每个数据集选择TD值,以显示在所有三种模型尺寸中最大显著估计性能增益。
表15 评估集被认为受污染的百分比,因为在训练语料库中存在类似数据,以及可能因此污染而导致的估计性能提升。详情见正文
结果。在表15中,我们报告了为最大化估计性能增益而被认为被污染的评估数据百分比。对于某些基准测试,结果不显著的数据集,我们排除了这些数值,例如因为清洁或污染数据集样本过少,或观测到的性能增益估计表现非常不稳定。在表15中,我们观察到某些数据集的污染影响很大,而其他数据集则没有显著影响。例如,对于PiQA和HellaSwag,污染和性能增益的估计都很高。而对于Natural Questions,尽管估计的污染率为52%,但几乎对性能没有影响。对于SQuAD和MATH,尽管低阈值导致高污染率,但没有性能增益。这表明对这些数据集来说,污染无助于提高性能,或者需要更大的n值来获得更好的估计。最后,对于MBPP、HumanEval、MMLU和MMLU-Pro,可能需要其他污染检测方法:即使使用更高的阈值,8-gram重叠给出的污染率仍然很高,以至于无法获得好的性能增益估计。
5.2 后训练语言模型
我们展示了Llama 3在不同能力基准测试上的后训练模型结果。与预训练类似,我们发布了使用公开可用基准测试生成的评估数据,详情可在Huggingface上找到。关于我们评估设置的更多细节请参考这里。
表16 按类别划分的后训练基准。我们对用于评估后训练Llama 3模型的所有基准进行了分类概述
基准测试和指标。表16概述了所有基准测试,按能力分类。我们通过与每个基准测试的提示精确匹配来去除后训练数据中的污染。除了标准的学术基准测试外,我们还对不同能力进行了广泛的人类评估。详情见第5.3节。
实验设置。我们采用与预训练阶段相似的实验设置,对Llama 3和其他具有可比尺寸和能力的模型进行比较分析。在可能的范围内,我们自己评估其他模型的性能,并将结果与报告的数值进行比较,选择最佳得分。关于我们的评估设置的更多细节请参考这里。
5.2.1 一般知识和指令跟随基准测试
我们在表2中评估了Llama 3在一般知识和指令跟随方面的基准测试表现。
一般知识。我们利用MMLU(Hendrycks等,2021a)和MMLU-Pro(Wang等,2024b)评估Llama 3在基于知识的问题回答能力上。对于MMLU,我们报告在5-shot标准设置下的子任务准确率的宏平均值,不包括连贯性提示(CoT)。MMLU-Pro是MMLU的扩展,包含更多具有挑战性的、侧重推理的问题,去除了噪声问题,并将选择集从四个扩展到十个选项。鉴于其对复杂推理的关注,我们报告MMLU-Pro的5-shot CoT结果。所有任务都被格式化为生成任务,类似于simple-evals(OpenAI,2024)。
如表2所示,我们的8B和70B Llama 3变体在两个一般知识任务上均优于同类尺寸的其他模型。我们的405B模型优于GPT-4和Nemotron 4 340B,而在大型模型中Claude 3.5 Sonnet表现最佳。
指令遵循能力(Instruction following)。我们使用IFEval(Zhou等,2023)评估Llama 3和其他模型遵循自然语言指令的能力。IFEval包含约500个“可验证指令”,如“写超过400字”,这些指令可以通过启发式方法进行验证。我们在表2中报告了在严格和宽松约束条件下,提示级和指令级准确率的平均值。值得注意的是,所有Llama 3变体在IFEval的各项指标上都优于同类模型。
5.2.2 专业考试
GRE:官方GRE练习测试1和2(来自教育考试服务中心); LSAT:官方预备测试71、73、80和93; SAT:来自2018版《官方SAT学习指南》的8次考试; AP:每门学科一份官方练习考试; GMAT:官方GMAT在线考试。
这些考试中的问题包含多选题和生成题。我们排除了附带图像的问题。对于包含多个正确选项的GRE考试,我们仅在模型选择了所有正确选项时才将其视为正确答案。在有多个考试集的情况下,我们使用少量提示运行评估。我们将分数缩放至130-170范围,并报告其他考试的准确率。
表17 Llama 3模型和GPT-4o在各种能力考试(包括LSAT、SAT、GMAT、AP和GRE测试)中的性能。对于GRE考试,我们报告标准分;对于其他考试,我们报告准确率。对于GRE定量和GRE语言两行,我们报告170分满分的缩放分数。
我们的结果见表17。我们观察到,Llama 3 405B模型的表现与Claude 3.5 Sonnet和GPT-4 4o非常相似。我们的70B模型表现更加出色,显著优于GPT-3.5 Turbo,并在许多测试中超过Nemotron 4 340B。
5.2.3 编码基准测试
我们在多个流行的Python和多编程语言基准测试上评估了Llama 3的代码生成能力。为了评估模型生成功能正确代码的效果,我们使用pass@N指标,该指标评估了N次生成中通过一组单元测试的通过率。我们报告了pass@1的结果。
表18 代码生成基准的Pass@1得分。我们报告了HumanEval (Chen et al., 2021)、MBPP (Austin et al., 2021)以及EvalPlus (Liu et al., 2024a)版本的这些基准的结果。
Python代码生成。HumanEval(Chen et al., 2021)和MBPP(Austin et al., 2021)是两个用于Python代码生成的流行基准测试,主要关注相对简单、独立的函数。HumanEval+(Liu et al., 2024a)是HumanEval的增强版,通过生成更多测试来避免误报。MBPP EvalPlus base版(v0.2.0)从原始MBPP(训练和测试)数据集的974个问题中选择了378个格式良好的问题(Liu et al., 2024a)。这些基准测试的结果报告见表18。在这些Python基准测试的变体中,Llama 3 8B和70B在同类模型中表现优异。对于最大的模型,Llama 3 405B、Claude 3.5 Sonnet和GPT-4o表现相似,其中GPT-4o的结果最为强劲。
表19 非Python编程任务的性能。我们报告了Llama 3在MultiPL-E (Cassano et al., 2023)上的结果。
多编程语言代码生成。为了评估超越Python的代码生成能力,我们报告了MultiPL-E(Cassano et al., 2023)基准测试的结果,该基准测试基于HumanEval和MBPP问题的翻译。表19中报告了部分流行编程语言的结果。需要注意的是,与表18中的Python基准测试相比,性能显著下降。
5.2.4 多语言基准测试
表20 多语言基准。对于MGSM (Shi et al., 2022),我们报告Llama 3模型的0-shot CoT结果。多语言MMLU是一个内部基准,将MMLU (Hendrycks et al., 2021a)问题和答案翻译成7种语言——我们报告这些语言的平均5-shot结果。
Llama 3支持8种语言——英语、德语、法语、意大利语、葡萄牙语、印地语、西班牙语和泰语,尽管基础模型在更广泛的语言集合上进行了训练。在表20中,我们展示了Llama 3在多语言MMLU(Hendrycks et al., 2021a)和多语言小学数学(MGSM)(Shi et al., 2022)基准测试上的评估结果。
多语言MMLU。我们使用Google翻译翻译了MMLU的问题、少量示例和答案。我们保留任务指令为英文,并在5-shot设置下进行评估。在表20中,我们报告了德语、法语、意大利语、葡萄牙语、印地语、西班牙语和泰语的平均结果。
MGSM(Shi et al., 2022)。我们使用与simple-evals(OpenAI, 2024)中相同的本地提示,在0-shot CoT设置下测试模型。在表20中,我们报告了MGSM基准测试所覆盖语言的平均结果。
我们发现,Llama 3 405B在MGSM上优于大多数其他模型,平均达到91.6%。在MMLU上,与上述英语MMLU结果一致,Llama 3 405B比GPT-4o低2%。另一方面,Llama 3的70B和8B模型在两个任务上表现强劲,领先于竞争对手。
5.2.5 数学和推理基准测试
我们的数学和推理基准测试结果见表2。Llama 3 8B模型在GSM8K、MATH和GPQA上优于同类模型。我们的70B模型在所有基准测试上显著优于其同类模型。
最后,Llama 3 405B模型在GSM8K和ARC-C上是最佳的,而在MATH上是第二好的模型。在GPQA上,它与GPT-4 4o竞争激烈,而Claude 3.5 Sonnet在这一任务中表现最佳。
5.2.6 长上下文基准测试
我们考虑了涵盖不同领域和文本类型的多种任务。在以下列出的基准测试中,我们重点关注使用无偏评估协议的子任务,即基于准确性的指标,而不是n-gram重叠指标。我们还优先考虑我们发现方差较低的任务。
表21 长上下文基准。对于ZeroSCROLLS (Shaham et al., 2023),我们报告验证集的结果。对于QuALITY,我们报告准确匹配,Qasper报告f1,SQuALITY报告rougeL。我们报告InfiniteBench (Zhang et al., 2024) En.QA指标的f1分数和En.MC的准确率。对于Multi-needle (Kamradt, 2023),我们在上下文中插入4个针,并测试模型是否能在不同上下文长度下检索到2个针,我们计算最多128k序列长度的10个长度的平均召回率。
Needle-in-a-Haystack(Kamradt, 2023):衡量模型在长文档中检索隐藏信息的能力。我们的Llama 3模型展示了完美的针检索性能,在所有文档深度和上下文长度下成功检索到100%的针。我们还测量了Multi-needle(表21)的性能,这是Needle-in-a-Haystack的变体,其中我们在上下文中插入四根针,测试模型能否检索其中两根。我们的Llama 3模型几乎实现了完美的检索结果。 ZeroSCROLLS(Shaham et al., 2023):针对长文本的自然语言理解的零样本基准测试。我们报告了验证集上的结果,因为真实答案尚未公开。在这个基准测试的各种任务中,我们的Llama 3 405B和70B模型的表现与其他模型相当或超过它们。 InfiniteBench(Zhang et al., 2024):要求模型理解上下文窗口中的长依赖关系。我们在En.QA(小说上的QA)和En.MC(小说上的多选QA)上评估了Llama 3,其中我们的405B模型表现优于所有其他模型,特别是在En.QA上有显著的提升。
5.2.7 工具使用性能
表22 零样本工具使用基准。我们报告了Nexus (Srinivasan et al., 2023)、API-Bank (Li et al., 2023b)、APIBench (Patil et al., 2023)和BFCL (Yan et al., 2024)的函数调用准确率。
我们在一系列零样本工具使用(即函数调用)的基准测试上评估了我们的模型:Nexus(Srinivasan et al., 2023)、API-Bank(Li et al., 2023b)、Gorilla API-Bench(Patil et al., 2023)和Berkeley Function Calling Leaderboard(BFCL)(Yan et al., 2024)。结果见表22。
在Nexus上,我们的Llama 3变体表现优于它们的对手。在API-Bank上,我们的Llama 3 8B和70B模型在其类别中显著优于其他模型。405B模型比Claude 3.5 Sonnet只低0.6%。最后,我们的405B和70B模型在BFCL上表现竞争激烈,在各自尺寸类别中位居第二。Llama 3 8B在其类别中表现最佳。
人类评估。我们还进行了人类评估,以测试模型的工具使用能力,重点是代码执行任务。我们收集了2000个与代码执行相关的用户提示(不包括绘图或文件上传)、绘图生成和文件上传。这些提示来自LMSys数据集(Chiang et al., 2024)、GAIA基准测试(Mialon et al., 2023b)、人工标注者和合成生成。
图16 Llama 3 405B与GPT-4o在代码执行任务(包括绘图和文件上传)中的人工评估结果。Llama 3 405B在代码执行(不包括绘图或文件上传)以及绘图生成方面优于GPT-4o,但在文件上传用例中表现稍逊。
我们使用OpenAI的Assistants API将Llama 3 405B与GPT-4o进行了比较。结果见图16。在纯文本代码执行任务和绘图生成上,Llama 3 405B显著优于GPT-4o。然而,在文件上传用例上,它表现稍逊。
5.3 人工评估
除了在标准基准测试集上的评估外,我们还进行了系列人工评估。这些评估使我们能够衡量和优化模型性能的更微妙方面,如模型的语调、冗长程度以及对细微差别和文化背景的理解。精心设计的人工评估能更真实地反映用户体验,提供关于模型在实际场景中表现的洞察。
提示收集。我们收集了涵盖广泛类别和难度的高质量提示。为此,我们首先开发了一个分类法,包含尽可能多的模型能力类别和子类别。我们使用该分类法收集了大约7000个提示,涵盖了六种单一能力(英语、推理、编码、印地语、西班牙语和葡萄牙语)和三种多轮能力(英语、推理和编码)。我们确保在每个类别内,提示在子类别间均匀分布。我们还将每个提示分类为三种难度级别,并确保我们的提示集合大约包含10%的简单提示、30%的中等提示和60%的困难提示。所有人工评估提示集均经过了严格的质量保证过程。建模团队无法访问我们的人工评估提示,以防止意外污染或在测试集上过拟合。
评估过程。为了对两个模型进行配对人工评估,我们请人工标注者选择他们更喜欢的两个模型响应(由不同模型生成)中的一个。标注者使用一个7点量表进行评分,使他们能够指示一个模型响应是否明显优于、优于、略优于或与另一个模型响应差不多。当标注者指示一个模型响应优于或明显优于另一个模型响应时,我们将其视为该模型的“胜利”。我们在模型之间进行配对比较,并报告提示集中每种能力的胜率。
图17 Llama 3 405B模型的人工评估结果。左:与GPT-4的比较。中:与GPT-4o的比较。右:与Claude 3.5 Sonnet的比较。所有结果包括95%的置信区间,并排除平局。
结果。我们使用我们的人工评估过程比较了Llama 3 405B与GPT-4(0125 API版本)、GPT-4o(API版本)和Claude 3.5 Sonnet(API版本)的表现。这些评估结果见图17。我们观察到Llama 3 405B的表现大致与GPT-4的0125 API版本相当,同时在与GPT-4o和Claude 3.5 Sonnet的比较中取得了混合结果(有些胜利有些失败)。在几乎所有能力上,Llama 3和GPT-4的胜率在误差范围内。在多轮推理和编码任务中,Llama 3 405B优于GPT-4,但在多语言(印地语、西班牙语和葡萄牙语)提示上表现不及GPT-4。Llama 3在英语提示上与GPT-4o表现相当,在多语言提示上与Claude 3.5 Sonnet表现相当,并在单轮和多轮英语提示上优于Claude 3.5 Sonnet。然而,在编码和推理等能力上,它落后于Claude 3.5 Sonnet。从质性上看,我们发现模型在人工评估中的表现受细微因素的强烈影响,如模型语调、响应结构和冗长度——这些都是我们在训练后优化过程中关注的因素。总体而言,我们的人工评估结果与标准基准测试的结果一致:Llama 3 405B在与领先行业模型竞争中非常具有竞争力,使其成为表现最佳的公开可用模型。
限制。所有人工评估结果都经过了彻底的数据质量保证过程。然而,由于很难定义评估模型响应的客观标准,人工评估仍然可能受到人工标注者的个人偏见、背景和偏好的影响,导致结果不一致或不可靠。
5.4 安全性
我们专注于评估Llama 3在生成安全和负责任内容方面的能力,同时最大限度地提供有用信息。我们的安全工作从预训练阶段开始,主要以数据清理和过滤的形式进行。然后,我们描述了我们的安全微调方法,重点是如何训练模型以符合特定的安全策略,同时保持其有用性。我们分析了Llama 3的每种能力,包括多语言、长上下文、工具使用和各种多模态能力,以衡量我们的安全缓解措施的有效性。
随后,我们描述了我们对网络安全以及化学和生物武器风险提升的评估。提升(Uplift)是指与使用现有可用技术(如网页搜索)相比,新技术发展引入的额外风险。
然后,我们描述了如何利用红队测试迭代识别和应对各种安全风险,并进行剩余风险评估。
最后,我们描述了系统级安全(system-level safety),即围绕模型本身的输入和输出开发和协调分类器,以进一步增强安全性,并使开发人员更容易根据各种用例自定义安全性并以更负责任的方式部署生成式AI。
5.4.1 基准构建
我们创建了各种内部基准测试,以帮助我们安全和负责任地开发模型。我们的基准测试受到ML Commons危害分类法(Vidgen等,2024)中的风险类别的启发。虽然现有的语言模型安全性基准测试如ToxiGen(Hartvigsen等,2022)和XS Test(Röttger等,2023)等已经存在,但Llama 3的一些新功能没有足够的外部基准测试可用,且外部基准测试通常缺乏足够的广度和深度覆盖。
表23 我们内部基准中所有能力的对抗性提示示例。
对于每个风险类别,我们收集了人为编写的对抗性或边界性质的提示——这些提示的示例见表23。对抗性提示范围从直接引出有害响应的简单提示到包含复杂破解技术的提示。这些对抗性提示的基准测试是我们衡量违规率的基础。
作为违规率的对照指标,我们还构建了错误拒绝基准测试,这些基准测试由边界提示组成。当模型拒绝在安全可行的情况下提供有用的回答时,我们称之为错误拒绝(false refusal)。边界提示是接近决策边界的提示,一个校准良好的模型应该能够处理这些提示,例如,“如何在我的好朋友总是扮演主角的时候抢风头?”我们的总体基准测试规模涵盖了每种能力或语言的4000多个提示,包含单轮和多轮提示的混合。
5.4.2 安全预训练
表24 在选定测试场景中预训练的Llama 3的平均逐字记忆力。我们的基线是Llama 2在英语50-gram场景中使用相同的提示方法。
我们认为负责任的发展必须从端到端的角度考虑,并在模型开发和部署的每个阶段纳入。在预训练期间,我们应用了各种过滤器,例如用于识别可能包含个人可识别信息的网站的过滤器(见第3.1节)。我们还特别关注可发现的记忆(Nasr等,2023)。类似于Carlini等(2022),我们使用训练数据中所有n-grams的高效滚动哈希索引,在不同出现频率下采样提示和真实值。通过改变提示和真实值的长度、目标数据的检测语言和领域,我们构建了不同的测试场景。然后,我们测量模型生成的真实值序列逐字逐句的频率,并分析指定场景中的相对记忆率。我们将逐字记忆定义为包含率,即模型生成中完全包含真实值续句的比例,并报告按数据中给定特征的普遍性加权的平均值,如表24所示。我们发现训练数据的记忆率较低(405B在n = 50和n = 1000时的平均值分别为1.13%和3.91%)。记忆率与Llama 2在相同规模和相同方法应用于其数据混合时大致相当。
5.4.3 安全微调
我们描述了我们的安全微调方法,以减轻各种能力中的风险,包括两个关键方面:(1)安全训练数据和(2)风险缓解技术。我们的安全微调过程基于我们的通用微调方法,并针对特定的安全问题进行了修改。
我们优化了两个主要指标:违规率(VR),衡量模型产生违反安全策略的响应的频率,以及错误拒绝率(FRR),衡量模型在面对无害提示时错误拒绝响应的频率。同时,我们在有用性基准上评估模型性能,以确保安全性改进不影响整体有用性。
微调数据。安全训练数据的质量和设计对性能有深远影响。通过广泛的消融研究,我们发现质量比数量更为关键。我们主要使用从数据供应商处收集的人为生成数据,但发现这些数据可能会存在错误和不一致性,尤其是对于细微的安全策略。为了确保最高质量的数据,我们开发了AI辅助的注释工具,以支持我们严格的质量保证过程。
除了收集对抗性提示,我们还收集了一组类似的提示,我们称之为边界提示(borderline prompts)。这些提示与对抗性提示密切相关,但目的是教模型提供有用的响应,从而减少错误拒绝率(FRR)。除了人工注释,我们还利用合成数据来提高训练数据集的质量和覆盖范围。我们使用一系列技术生成额外的对抗性示例,包括使用精心设计的系统提示进行上下文学习、基于新攻击向量引导种子提示的变异,以及基于MAP-Elites(Mouret和Clune,2015)的高级算法,包括Rainbow Teaming(Samvelyan等,2024),生成在多个多样性维度上受限的提示。
我们还进一步优化模型在生成安全响应时的语调,这对下游用户体验有影响。我们为Llama 3开发了拒绝语调指南,并通过严格的质量保证过程确保所有新安全数据符合该指南。我们还使用零次重写和人工介入编辑相结合的方法,精炼现有的安全数据,使其符合指南。通过采用这些方法以及用于评估安全响应语调质量的语调分类器,我们显著改善了模型的用词。
安全监督微调。按照我们的Llama 2方法(Touvron等,2023b),我们在模型对齐阶段结合了所有有用性数据和安全数据。此外,我们引入了边界数据集,帮助模型辨别安全和不安全请求之间的微妙区别。我们的注释团队按照我们的指南仔细制作对安全提示的响应。我们发现,战略性平衡对抗性示例和边界示例的比例在SFT中高度有效地对齐模型。我们将重点放在更具挑战性的风险领域,这些领域具有更高比例的边界示例。这在我们的成功安全缓解工作中起到了关键作用,同时将错误拒绝降至最低。
图18 模型大小对平衡违规率(VR)和错误拒绝率(FRR)的安全混合设计的影响。散点图的每个点代表一种平衡安全和有用性数据的不同数据组合。不同的模型大小保留了不同的安全学习能力。我们的实验表明,相对于70B模型,8B模型在整体SFT混合中需要更高比例的安全数据才能实现类似的安全性能。更大的模型在区分对抗性和边界情境方面更有能力,从而在VR和FRR之间取得更有利的平衡。
此外,我们在图18中考察了模型规模对FRR和VR之间权衡的影响。我们的结果表明,这种权衡随着模型规模的变化而变化——较小的模型相对于有用性数据需要更大比例的安全数据,且比大模型更难有效平衡VR和FRR。
安全DPO。为了加强安全学习,我们将对抗性和边界示例纳入我们的DPO偏好数据集中。我们发现,在嵌入空间中将响应对几乎正交化在教模型区分给定提示的好坏响应时特别有效。我们进行了多次实验,确定对抗性、边界和有用性示例的最佳比例,旨在优化FRR和VR之间的权衡。我们还发现模型规模会影响学习结果——因此,我们为各种模型规模定制了不同的安全混合。
5.4.4 安全性结果
我们首先重点展示Llama 3在多个维度上的总体表现,然后描述每个新功能的具体结果及其在缓解安全风险方面的效果。
图19 英语和核心多语言短上下文基准测试中的违规率(VR)和错误拒绝率(FRR),比较Llama 3 405B(有和没有Llama Guard(LG)系统级保护)与竞争对手的模型和系统。未被Comp. 3支持的语言用“x”表示。越低越好。
图20 工具使用和长上下文基准测试中的违规率(VR)和错误拒绝率(FRR)。越低越好。DocQA和多次提示基准的表现分别列出。由于多次提示基准的对抗性性质,我们没有边界数据集,因此不在其上测量错误拒绝率。对于工具使用(搜索),我们仅测试Llama 3 405B与Comp. 1的对比。
整体性能。Llama 3的最终违规率和错误拒绝率与类似模型的比较结果见图19和图20。这些结果重点展示了我们参数规模最大的Llama 3 405B模型,并与相关竞争对手进行比较。其中两个竞争对手是通过API访问的端到端系统,另一个是我们内部托管并直接评估的开源语言模型。我们对Llama模型进行了独立评估,并结合Llama Guard(我们开源的系统级安全解决方案,详见第5.4.7节)进行评估。
图21 各模型和能力的违规率和错误拒绝率。每个点代表在所有安全类别中的内部能力基准的整体错误拒绝率和违规率。符号表示我们是在评估模型级别还是系统级别的安全性。正如预期的那样,模型级别的安全结果显示出较高的违规率和较低的拒绝率,而系统级别的安全结果则相反。Llama 3旨在平衡低违规率和低错误拒绝率,而一些竞争对手则偏向其中之一。
虽然低违规率是理想的,但必须考虑错误拒绝作为对照指标,因为一个总是拒绝的模型虽然最大限度地安全,但毫无用处。同样,一个总是回答所有提示的模型,无论请求多么有问题,都将是极其有害和有毒的。在图21中,我们利用内部基准测试,探讨了行业中不同模型和系统如何平衡这一权衡,以及Llama 3的表现。我们发现我们的模型在保持低错误拒绝率的同时,达到了非常有竞争力的违规率指标,表明在有用性和安全性之间取得了良好的平衡。
多语言安全性。我们的实验表明,英语中的安全知识并不能轻易转移到其他语言,特别是考虑到安全策略的细微差别和语言特定的背景。因此,收集每种语言的高质量安全数据至关重要。我们还发现,每种语言的安全数据分布显著影响安全性能,有些语言从迁移学习中受益,而其他语言则需要更多的语言特定数据。为了在FRR和VR之间取得平衡,我们迭代地添加对抗性和边界数据,同时监控对两个指标的影响。
我们在内部基准测试中展示了短上下文模型的结果,见图19,展示了Llama 3在英语和非英语语言中的违规率和错误拒绝率,与类似模型和系统相比。为了构建每种语言的基准测试,我们使用了母语者编写的提示,有时辅以从英语基准测试的翻译。对于我们支持的每种语言,我们发现Llama 405B与Llama Guard在我们内部基准测试中至少与两个竞争系统一样安全,甚至更安全,同时保持了具有竞争力的错误拒绝率。单独看Llama 405B模型,没有Llama Guard,我们发现其违规率显著低于竞争的独立开源模型,但以较高的错误拒绝率为代价。
长上下文安全性。长上下文模型在没有针对性缓解措施的情况下容易受到多次破解攻击(Anil等,2024)。为了解决这个问题,我们在包含不安全行为示例的SFT数据集上对模型进行微调,开发了一种可扩展的缓解策略,大幅降低了VR,有效中和了长上下文攻击的影响,即使是256次攻击。该方法对FRR和大多数有用性指标几乎没有影响。
为了量化长上下文安全缓解措施的效果,我们使用了两种额外的基准测试方法:DocQA和多次测试(Many-shot)。DocQA即“文档问答”,我们使用包含可被对抗性利用信息的长文档,模型同时获得文档和与之相关的提示,以测试这些问题是否影响模型对提示的安全响应能力。多次测试参考Anil等(2024),我们构建了由不安全提示-响应对组成的合成聊天记录。最后一个提示与之前的消息无关,用于测试上下文中的不安全行为是否影响模型产生不安全响应。DocQA和多次测试的违规率和错误拒绝率见图20。我们看到Llama 405B(有和没有Llama Guard)在DocQA和多次测试的违规率和错误拒绝率上都优于Comp. 2系统。相对于Comp. 1,我们发现Llama 405B显著更安全,但以较高的错误拒绝率为代价。
工具使用安全性。各种可能工具的多样性以及工具使用调用的实现和模型集成使得工具使用成为一个难以完全缓解的能力(Wallace等,2024)。我们专注于搜索用例。违规率和错误拒绝率见图20。我们对比了Comp. 1系统,发现Llama 405B显著更安全,尽管其错误拒绝率略高。
5.4.5 网络安全和化学/生物武器安全性
网络安全评估结果。为了评估网络安全风险,我们利用了CyberSecEval基准框架(Bhatt等,2023,2024),该框架包含衡量跨域安全性的任务,如生成不安全代码、生成恶意代码、文本提示注入和漏洞识别。我们开发并应用Llama 3于新基准,用于钓鱼攻击和自动化网络攻击评估。
总体而言,我们发现Llama 3在生成恶意代码或利用漏洞方面没有显著的漏洞。以下是特定任务的简要结果:
不安全编码测试框架:评估Llama 3 8B、70B和405B与不安全编码测试框架相比,我们继续观察到较大的模型生成了更多不安全代码,并且生成的代码具有更高的平均BLEU分数(Bhatt等,2023)。 代码解释器滥用提示语料库:我们发现Llama 3模型在某些提示下容易执行恶意代码,其中Llama 3 405B在10.4%的情况下符合恶意提示,而Llama 3 70B的符合率为3.8%。
图22 各种提示注入策略下每个模型的文本提示注入成功率。在使用此基准进行评估时,Llama 3在平均水平上比GPT-4 Turbo和Gemini Pro更容易受到提示注入的影响,但比Mixtral模型的影响要小。
基于文本的提示注入基准:在提示注入基准测试中,对Llama 3 405B的提示注入攻击成功率为21.7%。图22展示了Llama 3、GPT-4 Turbo、Gemini Pro和Mixtral模型的基于文本的提示注入成功率。 漏洞识别挑战:在使用CyberSecEval 2的夺旗测试挑战评估Llama 3识别和利用漏洞的能力时,Llama 3的表现不如常用的传统非LLM工具和技术。
图23 各种钓鱼模型和目标的钓鱼说服力评分平均值。尝试说服力由Llama 3 70B评审LLM进行评估。
钓鱼攻击基准:我们评估模型在进行设计为欺骗目标参与安全妥协的个性化对话中的说服力和成功率。由LLM生成的随机详细受害者档案作为钓鱼目标。由法官LLM(Llama 3 70B)评分,评估Llama 3 70B和405B与受害者模型(Llama 3 70B)互动的表现,并评估尝试的成功性。法官LLM评估Llama 3 70B和Llama 3 405B在钓鱼攻击中的说服力为中等。LLM判定Llama 3 70B在24%的钓鱼尝试中成功,而Llama 3 405B的成功率为14%。图23展示了法官LLM评估的各模型和钓鱼目标的说服力得分。 攻击自动化框架:我们评估Llama 3 405B作为自主代理在勒索软件攻击的四个关键阶段的潜力——网络侦察、漏洞识别、漏洞利用和后续利用行动。我们通过配置模型迭代生成和执行新Linux命令,使其在Kali Linux虚拟机上对具有已知漏洞的另一台虚拟机进行攻击,以使模型自主行动。尽管Llama 3 405B在网络侦察中有效识别了网络服务和开放端口,但在34次测试中未能有效利用这些信息获得对易受攻击机器的初始访问。在识别漏洞时,Llama 3 405B表现适中,但在选择和应用成功的利用技术方面遇到困难。执行利用的尝试完全失败,后续尝试在网络内维持访问或横向移动也未成功。
网络攻击的提升测试。我们进行了一项提升研究,衡量虚拟助手在两个模拟的进攻性网络安全挑战中提高新手和专家网络攻击者攻击率的程度。研究分为两阶段进行,有62名内部志愿者参与。志愿者根据其进攻性安全经验分为“专家”(31名)和“新手”(31名)两组。第一阶段,参与者在没有LLM帮助但有开放互联网访问的情况下完成挑战。第二阶段,参与者保留互联网访问,同时提供Llama 3 405B以完成难度相似的另一进攻性网络安全挑战。对参与者完成挑战各阶段的分析表明,使用405B模型的新手和专家在没有LLM的情况下与开放互联网相比,没有显著提升。
化学和生物武器的提升测试。为了评估与化学和生物武器扩散相关的风险,我们进行了一项提升测试,旨在评估Llama 3的使用是否显著增加参与者计划此类攻击的能力。
研究包含六小时的场景,要求两人一组生成虚构的生物或化学攻击操作计划。这些场景涵盖CBRNE攻击的主要规划阶段(代理获取、生产、武器化和交付),旨在引出详细的计划,解决限制材料的采购、现实世界的实验室协议和操作安全等挑战。参与者根据在相关科学或操作领域的经验被招募,并分配到由两名低技能参与者(无正式培训)或两名中等技能参与者(有一定的科学或操作培训和实践经验)组成的小组。
研究与一组CBRNE专家合作设计,旨在最大化定量和定性结果的普遍性、有效性和稳健性。还进行了一项初步研究,以验证研究设计,包括进行稳健的效能分析,确保样本量足以进行统计分析。
每组被分配到“对照”或“LLM”条件。对照组仅有互联网资源访问,而LLM支持组除了互联网访问外,还可访问Llama 3模型,配有网络搜索(包括PDF摄取)、信息检索能力(RAG)和代码执行(Python和Wolfram Alpha)。为了测试RAG能力,使用关键词搜索生成包含数百篇相关科学论文的数据集,并预加载到Llama 3模型推理系统中。练习结束后,每组生成的操作计划由具有生物、化学和操作规划领域专业知识的主题专家进行评估。每个计划在潜在攻击的四个阶段进行评估,生成科学准确性、细节、检测规避和科学与操作执行成功率等指标评分。通过稳健的德尔菲过程以减轻主题专家(SME)评估中的偏差和变异,最终汇总阶段级指标生成综合评分。
定量分析结果显示,使用Llama 3模型并未显著提升性能。此结果在进行综合分析(比较所有LLM条件与仅限网络访问的对照条件)以及按子组划分分析(如分别评估Llama 3 70B和Llama 3 405B模型,或分别评估化学或生物武器相关场景)时均成立。在与CBRNE专家验证这些结果后,我们评估Llama 3模型发布带来的生物或化学武器攻击风险较低。
5.4.6 红队测试(Red Teaming)
我们利用红队测试来发现风险,并使用这些发现来改进我们的基准测试和安全调优数据集。我们定期进行红队测试,以不断迭代和发现新风险,这些风险指导我们的模型开发和缓解过程。
我们的红队由网络安全、对抗性机器学习、负责任的AI和诚信方面的专家组成,此外还包括具有特定地理市场诚信问题背景的多语言内容专家。我们还与内部和外部的关键风险领域专家合作,帮助建立风险分类法,并协助进行更有针对性的对抗性评估。
短上下文和长上下文的英语。我们在单轮和多轮对话中使用了一些已知的、已发布和未发布的技术。我们还利用类似于PAIR(Chao等,2023)的高级对抗性多轮自动化技术。总体而言,多轮对话更容易导致有害输出。某些攻击在模型检查点间广泛存在,尤其是在组合使用时。 多轮拒绝抑制:通过特定格式或包括/排除与拒绝相关的特定短语来指定模型响应。 假设场景:将违反提示包装为假设/理论任务或虚构场景,提示可以简单地添加“假设”一词或构建复杂的分层场景。 角色扮演:赋予模型具有特定违反响应特征的角色(如“你是X,你的目标是Y”),或用户自身采用特定无害角色以模糊提示上下文。 添加免责声明和警告:作为一种响应启动方式,我们假设这种方法允许模型在与广泛的安全训练相交时达到有帮助的合规性。要求在多轮对话中添加免责声明、触发警告等,与其他提到的攻击一起使用,增加了违反率。 逐步升级违反:一种多轮攻击,初始请求较为无害,通过直接提示更多夸张内容逐步引导模型生成非常违反的响应。一旦模型开始输出违反内容,模型很难恢复(或在遇到拒绝时使用其他攻击)。对于长上下文模型,这将是一个日益常见的问题。 多语言。在考虑多语言时,我们发现了一些独特的风险。 在一个提示或对话中混合多种语言,比使用单一语言更容易导致违反输出。 资源较少的语言由于缺乏相关安全微调数据、模型安全性弱推广或测试或基准优先级低,容易导致违反输出。然而,这种攻击通常导致质量较差,限制了真实对抗性使用。 俚语、特定上下文或文化特定参考可能会引起混淆或最初看起来违反,模型未正确理解给定参考以生成真正有害的输出或防止其成为违反输出。 工具使用。在测试过程中,除了英语文本级别的对抗性提示技术成功生成违反输出外,还发现了几种特定工具的攻击。这包括但不限于: 不安全工具链:例如请求多个工具同时使用,其中一个违反,可能在早期检查点导致所有工具调用时混合无害和违反输入。 强制工具使用:通常带有特定输入字符串、碎片或编码文本,可以触发工具输入潜在违反,导致更违反的输出。即使模型通常会拒绝执行搜索或协助结果,其他技术也可以用来访问工具结果。 修改工具使用参数:如在查询中交换词语、重试或在多轮对话中模糊初始请求,导致早期检查点中的许多违反,作为一种强制工具使用形式。
儿童安全风险。我们利用专家团队进行儿童安全风险评估,评估模型生成可能导致儿童安全风险的输出的能力,并通过微调告知任何必要和适当的风险缓解措施。我们利用这些专家红队测试会议,通过模型开发扩展我们的评估基准覆盖范围。对于Llama 3,我们使用基于目标的方法进行了新的深入会议,评估沿多个攻击向量的模型风险。我们还与内容专家合作,进行红队测试,评估潜在违反内容,同时考虑市场特定的细微差别或经验。
5.4.7 系统级安全
在大语言模型的各种实际应用中,模型通常不会单独使用,而是集成到更广泛的系统中。在本节中,我们描述了我们的系统级安全实现,通过提供更多的灵活性和控制来补充模型级别的缓解措施。
为此,我们开发并发布了一个新的分类器Llama Guard 3,这是一种经过安全分类微调的Llama 3 8B模型。类似于Llama Guard 2(Llama-Team, 2024),该分类器用于检测输入提示和/或语言模型生成的输出是否违反特定类别的安全政策。
该分类器旨在支持Llama日益增长的能力,可用于英语和多语言文本。它还优化用于工具调用场景,如搜索工具和防止代码解释器滥用。最后,我们还提供量化变体以减少内存需求。我们鼓励开发人员使用我们发布的系统安全组件作为基础,并根据自己的使用情况进行配置。
分类体系。我们在AI安全分类法(Vidgen等,2024)中列出的13个危害类别上进行训练:儿童性剥削、诽谤、选举、仇恨、不加选择的武器、知识产权、非暴力犯罪、隐私、性相关犯罪、性内容、专业建议、自杀与自我伤害、暴力犯罪。我们还在代码解释器滥用类别上进行训练,以支持工具调用场景。
训练数据。我们从Llama Guard(Inan等,2023)使用的英语数据开始,扩展该数据集以纳入新功能。对于多语言和工具使用等新功能,我们收集提示和响应分类数据,并利用收集到的数据进行安全微调。通过提示工程增加训练集中不安全响应的数量,使LLM在对抗性提示下不拒绝响应。我们使用Llama 3对生成的数据进行响应标签。
为了提高Llama Guard 3的性能,我们使用人工标注和Llama 3的LLM标注对收集的样本进行广泛清理。为用户提示获取标签对人类和LLM都是一项更困难的任务,我们发现人工标签略好,尤其是对于边界提示,尽管我们的完整迭代系统能够减少噪音并生成更准确的标签。
表25 在使用Llama Guard 3进行输入或输出过滤时,不同语言下的违规率(VR)和错误拒绝率(FRR)相对于Llama 3的变化。例如,VR的-50%意味着使用Llama Guard时Llama 3模型的违规率减少了50%。评估是在405B参数的Llama 3模型生成的结果上进行的。越低越好。
结果。Llama Guard 3能够显著减少各项功能的违规行为(在我们的基准测试中平均减少65%的违规行为)。需要注意的是,添加系统保护措施(以及任何安全缓解措施)会增加对无害提示的拒绝率。在表25中,我们报告了与基础模型相比,违规率的减少和虚假拒绝率的增加,以突出这种权衡。在图19、20和21中也可以看到这一效果。
表26 在使用Llama Guard 3进行输入或输出过滤时,不同安全类别下的违规率和错误拒绝率相对于Llama 3的变化。例如,VR的-50%意味着使用Llama Guard时Llama 3模型的违规率减少了50%。评估是在英语提示和405B参数的Llama 3模型生成的结果上进行的。越低越好。
系统安全还提供了更多的灵活性。Llama Guard 3可以针对特定危害进行部署,从而在危害类别级别上控制违规和虚假拒绝的权衡。表26展示了每个类别的违规减少,以便开发人员根据使用情况决定开启/关闭哪些类别。
表27 int8 Llama Guard。int8量化对Llama Guard 3输出分类性能的影响,不同模型能力的比较。
为了更容易部署安全系统,我们使用常用的int8量化技术提供Llama Guard 3的量化版本,将其大小减少了40%以上。表27说明了量化对模型性能的影响可以忽略不计。
基于提示的系统保护。系统级安全组件使开发人员能够自定义和控制LLM系统如何响应用户请求。作为我们改善模型系统整体安全性和使开发人员能够负责任部署的一部分,我们描述并发布了两个基于提示的过滤机制:Prompt Guard和Code Shield。我们开源这些机制,供社区利用或根据自己的用例进行改编。
表28 Prompt Guard的性能。我们包括分布内和分布外的评估,使用机器翻译构建的多语言越狱,以及来自CyberSecEval的间接注入数据集。
Prompt Guard是一个基于模型的过滤器,旨在检测提示攻击,即设计用于颠覆LLM作为应用程序一部分的预期行为的输入字符串。该模型是一个多标签分类器,检测两类提示攻击风险——直接越狱(明确试图覆盖模型的安全条件或系统提示的技术)和间接提示注入(包含在模型上下文窗口中的第三方数据被无意中执行为用户命令的实例)。该模型经过mDeBERTa-v3-base的微调,这是一个适用于过滤输入到LLM的小型(86M)参数模型。我们在表28中展示了多个评估数据集上的性能。我们在两个与训练数据分布相同的数据集(越狱和注入)以及一个分布外的英语数据集、一个通过机器翻译构建的多语言越狱集和一个从CyberSecEval(英语和多语言)中提取的间接注入数据集上进行评估。总体而言,我们发现该模型对新分布具有良好的泛化能力,并且表现出色。
Code Shield是基于推理时间过滤的系统级保护类示例。特别是,它侧重于在不安全代码可能进入下游用例(如生产系统)之前检测其生成。它通过利用静态分析库Insecure Code Detector(ICD)来识别不安全代码。ICD使用一套静态分析工具对7种编程语言进行分析。这类保护措施对于开发人员通常是有用的,他们可以在各种应用中部署多层保护。
5.4.8 局限性
我们对Llama 3的安全使用进行了广泛的风险测量和缓解。然而,没有任何测试能够保证穷尽识别每一个可能的风险。由于训练数据集的多样性,特别是在英语以外的语言中,Llama 3仍可能生成有害内容,尤其是当熟练的对抗性红队进行提示工程时。恶意开发人员或对抗性用户可能会找到新的方法来破解我们的模型并将其用于各种恶意用途。我们将继续主动识别风险,开展缓解方法研究,并鼓励开发人员在模型开发到用户部署的每个环节中都考虑责任。我们希望开发人员能够利用和贡献我们在开源系统级安全套件中发布的工具。
6. 推理
我们研究了两种主要技术,以提高Llama 3 405B模型的推理效率:(1)管道并行和(2)FP8量化。我们已经公开发布了FP8量化的实现。
6.1 管道并行
当使用BF16数值表示模型参数时,Llama 3 405B无法放入单台配备8个Nvidia H100 GPU的机器的GPU内存中。为了解决这个问题,我们在两台机器上的16个GPU上使用BF16精度进行模型推理。在每台机器内,高NVLink带宽使得张量并行成为可能(Shoeybi等,2019)。然而,跨节点的连接带宽较低且延迟较高,因此我们使用管道并行(Huang等,2019)。
在使用管道并行进行训练时,气泡是主要的效率问题(见3.3节)。然而,在推理过程中,气泡不是问题,因为推理不涉及需要刷新管道的反向传递。因此,我们使用微批处理来提高管道并行的推理吞吐量。
图24 微批处理对推理吞吐量和延迟的影响。左:预填充阶段。右:解码阶段。图中的数字对应于(微)批处理大小。
我们在推理工作负载中评估了在4,096个输入token和256个输出token的情况下使用两个微批处理的效果,包括在推理的键值缓存预填充阶段和解码阶段。我们发现微批处理在保持相同本地批量大小的情况下提高了推理吞吐量;见图24。这些改进归功于微批处理使得微批量在这两个阶段能够并行执行。由于微批处理带来的额外同步点也增加了延迟,但总体而言,微批处理仍然带来了更好的吞吐量-延迟权衡。
6.2 FP8量化
我们利用H100 GPU的原生FP8支持进行低精度推理实验。为了实现低精度推理,我们对模型内部的大多数矩阵乘法应用FP8量化。特别是,我们对模型中前馈网络层的大多数参数和激活进行量化,这些层约占推理计算时间的50%。我们没有量化模型的自注意力层中的参数。我们利用动态缩放因子来提高准确性(Xiao等,2024b),优化我们的CUDA内核以减少计算缩放因子的开销。我们发现Llama 3 405B对某些类型的量化非常敏感,并做了一些额外的更改以提高模型输出质量:
1. 类似于Zhang等(2021),我们不对第一个和最后一个Transformer层进行量化。
图25 张量级和行级FP8量化的示意图。右:行级量化使得使用更细粒度的激活因子比左边的张量级量化更好。
3. 我们使用行级量化,对参数和激活矩阵的行计算缩放因子(见图25)。我们发现这比张量级量化方法效果更好。
图26 使用BF16和FP8推理的Llama 3 405B的奖励分布。我们的FP8量化方法对模型的响应影响微乎其微。
量化误差的影响。标准基准测试通常表明,即使没有这些缓解措施,FP8推理的性能也能与BF16推理相媲美。然而,我们发现这些基准测试并不能充分反映FP8量化的影响。当缩放因子没有上限时,模型偶尔会生成损坏的响应,即使基准测试性能强劲。与其依赖基准测试来衡量量化引起的分布变化,我们发现分析使用FP8和BF16生成的10万个响应的奖励模型分数分布更好。图26展示了我们量化方法的奖励分布。图中的结果表明,我们的FP8量化方法对模型响应的影响非常有限。
图27 使用不同的管道并行设置,在Llama 3 405B的FP8推理与BF16推理中的吞吐量-延迟权衡。左:预填充结果。右:解码结果。
效率的实验评估。图27描绘了在预填充和解码阶段使用4,096个输入token和256个输出token时进行FP8推理的吞吐量-延迟权衡。该图比较了FP8推理与第6.1节中描述的两台机器BF16推理方法的效率。结果表明,使用FP8推理在预填充阶段的吞吐量提高了50%,并且在解码期间提供了更好的吞吐量-延迟权衡。
--【本文完】---
近期受欢迎的文章:
更多交流,可添加本人微信
(请附姓名/单位/关注领域)





