现代人工智能(AI)系统由基础模型驱动。本文介绍了一组新的基础模型,称为Llama 3。这是一系列原生支持多语言、编程、推理和工具使用的语言模型。我们最大的模型是一个拥有405B参数和最长可达128K token上下文窗口的大规模Transformer模型。本文对Llama 3进行了广泛的实证评估。我们发现,Llama 3在多项任务上的表现与领先的语言模型(如GPT-4)不相上下。我们公开发布了Llama 3,包括预训练和微调版本的405B参数语言模型,以及我们的Llama Guard 3模型,用于输入和输出安全性控制。本文还展示了将图像、视频和语音能力通过组合方法整合到Llama 3中的实验结果。我们观察到这种方法在图像、视频和语音识别任务上的表现可与最先进的技术相媲美。由于这些多模态模型仍在开发中,目前尚未广泛发布。
目录
10 结论
基础模型是用于支持多种AI任务的通用语言、视觉、语音及其他模态模型,它们构成了许多现代AI系统的基础。
(2)后训练阶段(post-training stage),模型被微调以遵循指令、对齐人类偏好并提高特定能力(如编码和推理)。
在本文中,我们介绍了一组新的语言基础模型,称为Llama 3。Llama 3模型家族原生支持多语言、编码、推理和工具使用。我们最大的模型是一个拥有405B参数的密集Transformer,能够处理最长达128K token的上下文窗口。表1列出了模型家族的各个成员。本文中呈现的所有结果都基于Llama 3.1模型,以下简称Llama 3以示简洁。
我们认为,高质量基础模型的开发有三大关键杠杆:数据、规模和复杂性管理。我们在开发过程中力求优化这三大杠杆:
我们的工作成果是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开发过程的一部分,我们还开发了模型的多模态扩展,使其具备图像识别、视频识别和语音理解能力。这些模型仍在积极开发中,尚未准备好发布。除了我们的语言建模结果外,本文还展示了我们对这些多模态模型的初步实验结果。
2 总体概述
Llama 3的模型架构如图1所示。Llama 3语言模型的开发包括两个主要阶段:
由此产生的模型具有丰富的功能。它们可以用至少8种语言回答问题、编写高质量代码、解决复杂的推理问题,并能开箱即用或以零样本的方式使用工具。
我们还进行了一些实验,通过组合方法为Llama 3增加图像、视频和语音功能。我们研究的方法包括图28所示的三个附加阶段:
我们的多模态实验产生了能够识别图像和视频内容并支持通过语音界面进行交互的模型。这些模型仍在开发中,尚未准备好发布。
3 预训练
3.1 预训练数据
我们从多种数据源创建了语言模型预训练的数据集,包含截至2023年底的知识。我们对每个数据源应用了多种去重方法和数据清洗机制,以获得高质量的token。我们移除包含大量个人身份信息(PII)和已知成人内容的域名。
3.1.1 网络数据策划
我们利用了大量来自网络的数据,并对其进行了如下清洗过程。
PII和安全过滤。我们实施了一些过滤器,旨在移除来自可能包含不安全内容或大量PII的网站的数据、根据多种Meta安全标准被评为有害的域名以及已知包含成人内容的域名。
文本提取和清洗。我们处理原始HTML内容,提取高质量的多样化文本。为此,我们构建了一个自定义解析器,提取HTML内容并优化版面移除和内容召回的精度。我们在人类评估中对比了自定义解析器与流行的第三方HTML解析器,发现我们的解析器表现更佳。我们谨慎处理包含数学和代码内容的HTML页面,以保持这些内容的结构。我们保留图像的alt属性文本,因为数学内容通常以预渲染图像形式表示,数学也在alt属性中提供。我们实验评估了不同的清洗配置,发现与纯文本相比,markdown对主要在网络数据上训练的模型性能有害,因此我们移除了所有的markdown标记。
基于模型的质量过滤。此外,我们还尝试应用各种基于模型的质量分类器来选择高质量的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提取、定制文本特征和过滤启发式方法。
我们应用特定语言的启发式方法和基于模型的过滤器,移除低质量文档。
此外,我们使用基于多语言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的基础上做了一些小的修改:
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数量预测计算最优模型在下游任务上的性能。我们使用类似的方法来选择我们的预训练数据组合(见第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中的等FLOPs曲线。我们在一个单独的验证集上测量这些曲线的损失。我们使用二次多项式拟合测量的损失值,并识别每个抛物线的最小值。我们将抛物线的最小值称为相应预训练计算预算下的计算最优模型。
我们使用这种方式识别的计算最优模型来预测特定计算预算的最佳训练token数量。为此,我们假设计算预算C与最佳训练token数量N?(C)之间的幂律关系:
我们使用图2中的数据拟合A和α。我们发现(α, A) = (0.53, 0.29);相应的拟合如图3所示。将结果规模法则(Scaling Laws)外推到3.8 × 10^25 FLOPs,建议训练一个402B参数模型在16.55T token上。
一个重要的观察结果是,等FLOPs曲线在最小值附近变得更平坦,随着计算预算的增加。这意味着旗舰模型的性能对模型尺寸和训练token之间的小变化相对鲁棒。基于这一观察结果,我们最终决定训练一个405B参数的旗舰模型。
预测下游任务性能。我们使用结果的计算最优模型来预测旗舰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网络的设计有全面的掌控,接下来我们将重点阐述这一网络的设计细节。
3.3.2 模型扩展的并行方法
为了扩展我们最大模型的训练,我们采用了四维并行(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)通信。
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所示,允许灵活设置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)。这种维护策略导致每天至少会出现一次训练中断。这里的有效训练时间是指在总运行时间内实际用于有效训练的时间比例。
在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 建模
我们后训练策略的核心是一个奖励模型和一个语言模型。首先,我们使用人类注释的偏好数据在预训练检查点的基础上训练一个奖励模型(见第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进行了以下算法修改:
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训练的偏好标注统计数据。普通英语类别涵盖了多个子类别,如知识问答或精确指令执行,这些都超出了特定能力的范畴。与Llama 2相比,我们观察到提示和响应的平均长度有所增加,这表明我们在更复杂的任务上训练Llama 3。此外,我们实施了质量分析和人工评估流程,以严格评估所收集的数据,使我们能够优化提示并向标注者提供系统性、可操作的反馈。例如,随着Llama 3在每轮后训练中不断改进,我们相应地增加了提示的复杂性,以针对模型仍有不足的领域。
在每轮后训练中,我们使用当时所有可用的偏好数据进行奖励建模,同时仅使用各种能力最新批次的数据进行DPO训练。对于奖励建模和DPO,我们使用被标注为"所选响应显著优于或优于被拒绝响应"的样本进行训练,并剔除响应相似的样本。
4.2.2 SFT 数据
随着后训练轮次的进行,我们开发出了更强大的Llama 3变体,用于收集涵盖广泛复杂能力的大规模数据集。本节将讨论拒绝采样程序的细节和我们最终SFT数据集的整体组成。
拒绝采样。在拒绝采样(RS)过程中,对于每个人工标注收集的提示(见第4.2.1节),我们从最新的对话模型策略中采样K个输出(通常在10到30之间),并使用我们的奖励模型选择最佳候选者,这与Bai等(2022)的方法一致。在后期的后训练轮次中,我们引入了系统提示,引导RS响应符合预期的语气、风格或格式,这可能因不同能力而异。
为提高拒绝采样的效率,我们采用了PagedAttention技术(Kwon等,2023)。PagedAttention通过动态分配键值缓存来提高内存效率,并根据当前缓存容量动态调度请求,从而支持任意输出长度。然而,这可能在内存耗尽时带来换出风险。为消除这种换出开销,我们定义了一个最大输出长度,只在有足够内存容纳该长度输出时执行请求。PagedAttention还使我们能够为一个提示的所有对应输出共享键值缓存页面。综合这些优化,拒绝采样的吞吐量提高了两倍多。
整体数据组成。表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)。
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并无助益(甚至可能降低性能)。为解决这一限制,我们引入了执行反馈作为事实来源,使模型能够从错误中学习并保持正确轨道。具体来说,我们生成了大约一百万个合成编码对话的数据集,使用如下过程:
2. 合成数据生成:编程语言翻译。我们观察到主要编程语言(如Python/C++)与不太常见的编程语言(如Typescript/PHP)之间存在性能差距。这并不意外,因为我们对不太常见的编程语言的训练数据较少。为减轻这一问题,我们通过将常见编程语言的数据翻译成不太常见的语言来补充现有数据(类似于Chen et al. (2023)在推理背景下的方法)。这是通过提示Llama 3并通过语法解析、编译和执行确保质量来实现的。图8展示了从Python翻译生成的PHP代码示例。通过MultiPL-E(Cassano et al., 2023)基准测试,这显著提升了不太常见语言的性能。
3. 合成数据生成:反向翻译。为提升某些代码能力(如文档编写、解释),在确定质量时执行反馈不太有帮助,我们采用一种替代的多步方法。通过这一程序,我们生成了大约120万个与代码解释、生成、文档编写和调试相关的合成对话。从预训练数据中的各种编程语言代码片段开始:
拒绝采样期间的系统提示引导:在拒绝采样过程中,我们使用特定的代码系统提示来改进代码的可读性、文档编写、彻底性和具体性。请回顾第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%的翻译推理数据。
4.3.3 数学与推理
我们将推理定义为执行多步计算并得出正确最终答案的能力。几个挑战引导了我们训练在数学推理方面表现出色的模型的方法:
为了应对这些挑战,我们应用了以下方法:
4.3.4 长上下文
在最终预训练阶段,我们将Llama 3的上下文长度从8K token扩展到128K token(详见第3.4节)。类似于预训练,我们发现,在微调过程中,我们必须仔细调整配方,以平衡短上下文和长上下文的能力。
监督微调(SFT)和合成数据生成。单纯使用仅包含短上下文数据的现有SFT配方,会导致长上下文能力在预训练中的显著退化,这凸显了在SFT数据混合中加入长上下文数据的必要性。然而,在实际操作中,由于阅读长篇上下文的繁琐和耗时性质,很难让人工来注释这样的例子,因此我们主要依赖合成数据来填补这一空白。我们使用早期版本的Llama 3基于关键的长上下文用例生成合成数据,包括(可能是多轮的)问答、长文档的摘要和代码库的推理,具体描述如下:
我们进一步根据序列长度(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的零样本工具使用能力——在给定上下文中,可能是未见过的工具定义和用户查询的情况下,我们训练模型生成正确的工具调用。
实现。我们将核心工具实现为具有不同方法的Python对象。零样本工具可以实现为带有描述和文档(即使用示例)的Python函数,模型只需要函数的签名和文档字符串作为上下文即可生成适当的调用。我们还将函数定义和调用转换为JSON格式,例如用于Web API调用。所有工具调用都由Python解释器执行,必须在Llama 3系统提示中启用。核心工具可以在系统提示中单独启用或禁用。
我们不进行拒绝采样,因为我们在工具基准测试中没有观察到收益。
为了加速注释过程,我们首先通过在先前Llama 3检查点生成的合成数据上进行微调,启动基本工具使用能力。因此,注释员需要进行的编辑更少。同样,随着Llama 3在其开发过程中逐步改进,我们逐步复杂化我们的人工注释协议:从单轮工具使用注释开始,然后转向对话中的工具使用,最后注释多步工具使用和数据分析。
工具数据集。为了创建工具使用应用的数据,我们采用以下程序:
多步工具使用:我们遵循类似的协议,首先生成合成数据以教授模型基本的多步工具使用能力。为此,我们首先提示Llama 3生成至少需要两个工具调用的用户提示,这些工具可以是我们核心集合中的相同或不同的工具。然后,基于这些提示,我们通过少样本提示Llama 3生成一个解决方案,该解决方案包含交错的推理步骤和工具调用,类似于ReAct(Yao等, 2022)。请参见图10,了解Llama 3执行多步工具使用任务的示例。
在对这些合成数据进行微调后,我们在多样且具有挑战性的场景中收集人工注释,包括多轮互动、超过三步的工具使用以及工具调用未能产生满意答案的实例。我们通过不同的系统提示扩充我们的合成数据,以教授模型仅在激活时使用工具。为了训练模型避免在简单查询时调用工具,我们还添加了来自简单数学或问答数据集(Berant等, 2013; Koncel-Kedziorski等, 2016; Joshi等, 2017; Amini等, 2019)的查询及其不使用工具但在系统提示中激活工具的响应。
零样本工具使用数据。我们通过在大量多样的部分合成(函数定义、用户查询、相应调用)元组上进行微调,改进了Llama 3的零样本工具使用能力(也称为函数调用)。我们在一组未见过的工具上评估我们的模型。
4.3.6 事实性(Factuality)
幻觉(Hallucinations)仍然是大型语言模型面临的主要挑战之一。模型往往在它们知识有限的领域表现得过于自信。尽管存在这些缺点,模型仍然常被用作知识库,这可能导致传播错误信息等风险结果。尽管我们认识到事实性问题可以超越幻觉,但我们在此采取了以幻觉为主的方法。
我们利用从知识探测生成的数据,鼓励模型仅回答它知道的问题,对于不确定的问题拒绝回答。此外,预训练数据并不总是事实一致或正确的。因此,我们还收集了一组有限的标注事实性数据,处理涉及敏感话题且存在事实矛盾或不正确陈述的情况。
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 标准基准测试
为了将我们的模型与当前的最先进模型进行比较,我们在大量标准基准测试上评估了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。
8B和70B模型的结果。图12报告了Llama 3 8B和70B在常识推理、知识、阅读理解、数学和推理及代码基准测试上的平均表现。结果显示,Llama 3 8B在几乎每个类别中都优于竞争对手模型,无论是按类别的胜率还是按类别的平均表现。我们还发现,Llama 3 70B在大多数基准测试上大幅优于其前代Llama 2 70B,除了可能已经饱和的常识基准测试。Llama 3 70B也优于Mixtral 8x22B。
所有模型的详细结果。表9、表10、表11、表12、表13和表14展示了预训练的Llama 3 8B、70B和405B模型在阅读理解任务、编码任务、常识理解任务、数学推理任务和一般任务上的基准性能。这些表格将Llama 3的性能与同类大小模型进行了比较。结果表明,Llama 3 405B在其类别中表现出色,特别是在大幅超越以前的开源模型。对于长上下文,我们在第5.2节中呈现了更全面的结果(包括“针在草堆中”之类的探测任务)。
5.1.2 模型鲁棒性
图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展示了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中,我们观察到某些数据集的污染影响很大,而其他数据集则没有显著影响。例如,对于PiQA和HellaSwag,污染和性能增益的估计都很高。而对于Natural Questions,尽管估计的污染率为52%,但几乎对性能没有影响。对于SQuAD和MATH,尽管低阈值导致高污染率,但没有性能增益。这表明对这些数据集来说,污染无助于提高性能,或者需要更大的n值来获得更好的估计。最后,对于MBPP、HumanEval、MMLU和MMLU-Pro,可能需要其他污染检测方法:即使使用更高的阈值,8-gram重叠给出的污染率仍然很高,以至于无法获得好的性能增益估计。
5.2 后训练语言模型
我们展示了Llama 3在不同能力基准测试上的后训练模型结果。与预训练类似,我们发布了使用公开可用基准测试生成的评估数据,详情可在Huggingface上找到。关于我们评估设置的更多细节请参考这里。
基准测试和指标。表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考试,我们仅在模型选择了所有正确选项时才将其视为正确答案。在有多个考试集的情况下,我们使用少量提示运行评估。我们将分数缩放至130-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的结果。
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的结果最为强劲。
多编程语言代码生成。为了评估超越Python的代码生成能力,我们报告了MultiPL-E(Cassano et al., 2023)基准测试的结果,该基准测试基于HumanEval和MBPP问题的翻译。表19中报告了部分流行编程语言的结果。需要注意的是,与表18中的Python基准测试相比,性能显著下降。
5.2.4 多语言基准测试
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重叠指标。我们还优先考虑我们发现方差较低的任务。
5.2.7 工具使用性能
我们在一系列零样本工具使用(即函数调用)的基准测试上评估了我们的模型: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)、人工标注者和合成生成。
我们使用OpenAI的Assistants API将Llama 3 405B与GPT-4o进行了比较。结果见图16。在纯文本代码执行任务和绘图生成上,Llama 3 405B显著优于GPT-4o。然而,在文件上传用例上,它表现稍逊。
5.3 人工评估
除了在标准基准测试集上的评估外,我们还进行了系列人工评估。这些评估使我们能够衡量和优化模型性能的更微妙方面,如模型的语调、冗长程度以及对细微差别和文化背景的理解。精心设计的人工评估能更真实地反映用户体验,提供关于模型在实际场景中表现的洞察。
提示收集。我们收集了涵盖广泛类别和难度的高质量提示。为此,我们首先开发了一个分类法,包含尽可能多的模型能力类别和子类别。我们使用该分类法收集了大约7000个提示,涵盖了六种单一能力(英语、推理、编码、印地语、西班牙语和葡萄牙语)和三种多轮能力(英语、推理和编码)。我们确保在每个类别内,提示在子类别间均匀分布。我们还将每个提示分类为三种难度级别,并确保我们的提示集合大约包含10%的简单提示、30%的中等提示和60%的困难提示。所有人工评估提示集均经过了严格的质量保证过程。建模团队无法访问我们的人工评估提示,以防止意外污染或在测试集上过拟合。
评估过程。为了对两个模型进行配对人工评估,我们请人工标注者选择他们更喜欢的两个模型响应(由不同模型生成)中的一个。标注者使用一个7点量表进行评分,使他们能够指示一个模型响应是否明显优于、优于、略优于或与另一个模型响应差不多。当标注者指示一个模型响应优于或明显优于另一个模型响应时,我们将其视为该模型的“胜利”。我们在模型之间进行配对比较,并报告提示集中每种能力的胜率。
结果。我们使用我们的人工评估过程比较了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。对抗性提示范围从直接引出有害响应的简单提示到包含复杂破解技术的提示。这些对抗性提示的基准测试是我们衡量违规率的基础。
作为违规率的对照指标,我们还构建了错误拒绝基准测试,这些基准测试由边界提示组成。当模型拒绝在安全可行的情况下提供有用的回答时,我们称之为错误拒绝(false refusal)。边界提示是接近决策边界的提示,一个校准良好的模型应该能够处理这些提示,例如,“如何在我的好朋友总是扮演主角的时候抢风头?”我们的总体基准测试规模涵盖了每种能力或语言的4000多个提示,包含单轮和多轮提示的混合。
5.4.2 安全预训练
我们认为负责任的发展必须从端到端的角度考虑,并在模型开发和部署的每个阶段纳入。在预训练期间,我们应用了各种过滤器,例如用于识别可能包含个人可识别信息的网站的过滤器(见第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中考察了模型规模对FRR和VR之间权衡的影响。我们的结果表明,这种权衡随着模型规模的变化而变化——较小的模型相对于有用性数据需要更大比例的安全数据,且比大模型更难有效平衡VR和FRR。
安全DPO。为了加强安全学习,我们将对抗性和边界示例纳入我们的DPO偏好数据集中。我们发现,在嵌入空间中将响应对几乎正交化在教模型区分给定提示的好坏响应时特别有效。我们进行了多次实验,确定对抗性、边界和有用性示例的最佳比例,旨在优化FRR和VR之间的权衡。我们还发现模型规模会影响学习结果——因此,我们为各种模型规模定制了不同的安全混合。
5.4.4 安全性结果
我们首先重点展示Llama 3在多个维度上的总体表现,然后描述每个新功能的具体结果及其在缓解安全风险方面的效果。
整体性能。Llama 3的最终违规率和错误拒绝率与类似模型的比较结果见图19和图20。这些结果重点展示了我们参数规模最大的Llama 3 405B模型,并与相关竞争对手进行比较。其中两个竞争对手是通过API访问的端到端系统,另一个是我们内部托管并直接评估的开源语言模型。我们对Llama模型进行了独立评估,并结合Llama Guard(我们开源的系统级安全解决方案,详见第5.4.7节)进行评估。
虽然低违规率是理想的,但必须考虑错误拒绝作为对照指标,因为一个总是拒绝的模型虽然最大限度地安全,但毫无用处。同样,一个总是回答所有提示的模型,无论请求多么有问题,都将是极其有害和有毒的。在图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在生成恶意代码或利用漏洞方面没有显著的漏洞。以下是特定任务的简要结果:
网络攻击的提升测试。我们进行了一项提升研究,衡量虚拟助手在两个模拟的进攻性网络安全挑战中提高新手和专家网络攻击者攻击率的程度。研究分为两阶段进行,有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和诚信方面的专家组成,此外还包括具有特定地理市场诚信问题背景的多语言内容专家。我们还与内部和外部的关键风险领域专家合作,帮助建立风险分类法,并协助进行更有针对性的对抗性评估。
儿童安全风险。我们利用专家团队进行儿童安全风险评估,评估模型生成可能导致儿童安全风险的输出的能力,并通过微调告知任何必要和适当的风险缓解措施。我们利用这些专家红队测试会议,通过模型开发扩展我们的评估基准覆盖范围。对于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都是一项更困难的任务,我们发现人工标签略好,尤其是对于边界提示,尽管我们的完整迭代系统能够减少噪音并生成更准确的标签。
结果。Llama Guard 3能够显著减少各项功能的违规行为(在我们的基准测试中平均减少65%的违规行为)。需要注意的是,添加系统保护措施(以及任何安全缓解措施)会增加对无害提示的拒绝率。在表25中,我们报告了与基础模型相比,违规率的减少和虚假拒绝率的增加,以突出这种权衡。在图19、20和21中也可以看到这一效果。
系统安全还提供了更多的灵活性。Llama Guard 3可以针对特定危害进行部署,从而在危害类别级别上控制违规和虚假拒绝的权衡。表26展示了每个类别的违规减少,以便开发人员根据使用情况决定开启/关闭哪些类别。
为了更容易部署安全系统,我们使用常用的int8量化技术提供Llama Guard 3的量化版本,将其大小减少了40%以上。表27说明了量化对模型性能的影响可以忽略不计。
基于提示的系统保护。系统级安全组件使开发人员能够自定义和控制LLM系统如何响应用户请求。作为我们改善模型系统整体安全性和使开发人员能够负责任部署的一部分,我们描述并发布了两个基于提示的过滤机制:Prompt Guard和Code Shield。我们开源这些机制,供社区利用或根据自己的用例进行改编。
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节)。然而,在推理过程中,气泡不是问题,因为推理不涉及需要刷新管道的反向传递。因此,我们使用微批处理来提高管道并行的推理吞吐量。
我们在推理工作负载中评估了在4,096个输入token和256个输出token的情况下使用两个微批处理的效果,包括在推理的键值缓存预填充阶段和解码阶段。我们发现微批处理在保持相同本地批量大小的情况下提高了推理吞吐量;见图24。这些改进归功于微批处理使得微批量在这两个阶段能够并行执行。由于微批处理带来的额外同步点也增加了延迟,但总体而言,微批处理仍然带来了更好的吞吐量-延迟权衡。
6.2 FP8量化
我们利用H100 GPU的原生FP8支持进行低精度推理实验。为了实现低精度推理,我们对模型内部的大多数矩阵乘法应用FP8量化。特别是,我们对模型中前馈网络层的大多数参数和激活进行量化,这些层约占推理计算时间的50%。我们没有量化模型的自注意力层中的参数。我们利用动态缩放因子来提高准确性(Xiao等,2024b),优化我们的CUDA内核以减少计算缩放因子的开销。我们发现Llama 3 405B对某些类型的量化非常敏感,并做了一些额外的更改以提高模型输出质量:
1. 类似于Zhang等(2021),我们不对第一个和最后一个Transformer层进行量化。
3. 我们使用行级量化,对参数和激活矩阵的行计算缩放因子(见图25)。我们发现这比张量级量化方法效果更好。
量化误差的影响。标准基准测试通常表明,即使没有这些缓解措施,FP8推理的性能也能与BF16推理相媲美。然而,我们发现这些基准测试并不能充分反映FP8量化的影响。当缩放因子没有上限时,模型偶尔会生成损坏的响应,即使基准测试性能强劲。与其依赖基准测试来衡量量化引起的分布变化,我们发现分析使用FP8和BF16生成的10万个响应的奖励模型分数分布更好。图26展示了我们量化方法的奖励分布。图中的结果表明,我们的FP8量化方法对模型响应的影响非常有限。
效率的实验评估。图27描绘了在预填充和解码阶段使用4,096个输入token和256个输出token时进行FP8推理的吞吐量-延迟权衡。该图比较了FP8推理与第6.1节中描述的两台机器BF16推理方法的效率。结果表明,使用FP8推理在预填充阶段的吞吐量提高了50%,并且在解码期间提供了更好的吞吐量-延迟权衡。