The Llama 3 Herd of Models
The Llama 3 Herd of Models
发表时间: 2024-07 · arXiv:2407.21783 (Meta)
文章标题: The Llama 3 Herd of Models
作者/机构: Llama Team, AI @ Meta
A1 主要贡献
本文介绍了名为Llama 3的新一代基础模型,这是一系列本身即支持多语言、编码、推理和工具使用的语言模型。文章的核心目标是展示Llama 3的开发过程和其卓越性能,推动AI领域的创新和负责任的发展。
核心问题与研究目标:
开发高质量的基础模型面临三大关键挑战:数据、规模和复杂性管理。Llama 3的开发旨在优化这三个方面,以达到与业界领先模型(如GPT-4)相媲美的性能。
主要创新点与贡献:
1. 数据(Data):相较于Llama 2,Llama 3在预训练和后训练阶段都使用了数量更多、质量更高的数据。预训练语料库约15万亿(15T)多语言token,远超Llama 2的1.8T。为此,团队开发了更精细的预处理和筛选流程。
2. 规模(Scale):Llama 3在训练规模上远超前代模型。其旗舰模型(405B参数)使用了3.8 × 10²⁵ FLOPs的算力进行预训练,是Llama 2最大模型的近50倍。该模型在15.6T的文本token上进行训练。同时,较小模型(8B和70B)的训练时间远超计算最优(compute-optimal)时长,以在相同的推理预算下获得更好的性能。
3. 复杂性管理(Managing complexity):为最大化模型开发过程的可扩展性,团队选择了简化且稳定的设计。
* 架构:采用标准的密集Transformer架构,而非混合专家(MoE)模型,以确保训练稳定性。
* 后训练:采用相对简单的后训练流程,包括监督微调(SFT)、拒绝采样(RS)和直接偏好优化(DPO),避免了更复杂且不稳定的强化学习算法。
主要成果:
- 模型系列:发布了包含8B、70B和405B参数的三个多语言语言模型,即Llama 3.1系列。
- 性能:旗舰405B模型在多种任务上与GPT-4等领先模型性能相当,接近SOTA水平。8B和70B模型在其同等参数规模的竞品中表现最佳。
- 开源发布:公开发布了所有三个Llama 3模型(包括预训练和后训练版本),以及新的Llama Guard 3安全模型,旨在激发社区创新。
- 多模态探索:初步探索了通过组合方法为Llama 3集成图像、视频和语音能力,并在相关识别任务上取得了有竞争力的结果(这些模型仍在开发中,未公开发布)。
Table 1 Llama 3模型系列概览。本文所有结果均针对Llama 3.1模型。
Table 2 微调后的Llama 3模型在关键基准评测上的性能。该表比较了8B、70B和405B版本的Llama 3与竞争模型的性能。在三个模型规模等效类别中,性能最佳的模型已加粗显示。△使用5-shot prompting(无CoT)获得的结果。◁未使用CoT获得的结果。♢使用zero-shot prompting获得的结果。
A3 关键设计
Llama 3的模型架构如图1所示。其语言模型的开发包括两个主要阶段:
- 语言模型预训练。我们首先将一个大型、多语言的文本语料库转换为离散的token,并在此数据上预训练一个大型语言模型(LLM)来执行下一token预测任务。在语言模型预训练阶段,模型从其“阅读”的文本中学习语言结构并获取大量关于世界的知识。为有效实现这一点,预训练在极大规模下进行:我们在8K token的上下文窗口上,使用15.6T的token预训练了一个405B参数的模型。标准预训练阶段之后,是一个持续预训练阶段,将支持的上下文窗口增加到128K token。详情见第3节。
- 语言模型后训练。预训练的语言模型对语言有丰富的理解,但还不能遵循指令或像我们期望的助手那样行事。我们通过几轮迭代,使用人类反馈来对齐模型,每一轮都涉及在指令调优数据上进行监督微调(SFT)和直接偏好优化(DPO;【索引1,Direct preference optimization: Your language model is secretly a reward model,2024,Advances in Neural Information Processing Systems】)。在这个后训练阶段,我们还集成了新能力,如工具使用,并观察到在其他领域(如编码和推理)的显著改进。详情见第4节。最后,安全缓解措施也在后训练阶段被整合到模型中,具体细节在第5.4节描述。
最终得到的模型具备丰富的能力。它们能用至少八种语言回答问题,编写高质量代码,解决复杂的推理问题,并能开箱即用或以零样本方式使用工具。
我们还进行了实验,通过一种组合方法为Llama 3增加了图像、视频和语音能力。我们研究的方法包括如图28所示的三个额外阶段:
- 多模态编码器预训练。我们为图像和语音分别训练了独立的编码器。我们在大量的图像-文本对上训练我们的图像编码器。这教会模型视觉内容与自然语言描述之间的关系。我们的语音编码器使用一种自监督方法进行训练,该方法掩盖部分语音输入,并尝试通过离散token表示来重建被掩盖的部分。结果,模型学习了语音信号的结构。图像编码器详情见第7节,语音编码器详情见第8节。
Figure 1 Llama 3的整体架构与训练示意图。Llama 3是一个Transformer语言模型,被训练用于预测文本序列的下一个token。详情见正文。
- 视觉适配器训练。我们训练一个适配器,将预训练的图像编码器集成到预训练的语言模型中。该适配器由一系列交叉注意力层组成,将图像编码器表示输入到语言模型中。适配器在文本-图像对上进行训练。这使图像表示与语言表示对齐。在适配器训练期间,我们还更新图像编码器的参数,但有意不更新语言模型的参数。我们还在成对的视频-文本数据上,在图像适配器之上训练一个视频适配器。这使模型能够跨帧聚合信息。详情见第7节。
- 语音适配器训练。最后,我们通过一个适配器将语音编码器集成到模型中,该适配器将语音编码转换为可以直接输入到微调语言模型中的token表示。适配器和编码器的参数在一个监督微调阶段联合更新,以实现高质量的语音理解。在语音适配器训练期间,我们不改变语言模型。我们还集成了一个文本到语音系统。详情见第8节。
我们的多模态实验产生了能够识别图像和视频内容,并支持通过语音界面进行交互的模型。这些模型仍在开发中,尚未准备好发布。
A2 方法细节
3 预训练
语言模型的预训练包括:(1) 大规模训练语料库的整理和筛选,(2) 模型架构的开发和相应的用于确定模型大小的缩放法则,(3) 高效大规模预训练技术的开发,以及 (4) 预训练配方的开发。我们将在下面分别介绍这些组成部分。
3.1 预训练数据
我们从包含截至2023年底知识的各种数据源中创建了用于语言模型预训练的数据集。我们对每个数据源应用了多种去重方法和数据清洗机制,以获得高质量的token。我们移除了包含大量个人可识别信息(PII)的域,以及已知包含成人内容的域。
3.1.1 网页数据整理
PII和安全过滤。我们实施了多种过滤措施,旨在移除可能含有不安全内容或大量PII的网站数据、根据Meta多种安全标准被评为有害的域名,以及已知含有成人内容的域名。
文本提取和清洗。我们处理非截断网页文档的原始HTML内容,以提取高质量、多样化的文本。为此,我们构建了一个自定义解析器,它能提取HTML内容并优化样板内容的移除精度和内容召回率。我们在人工评估中评估了我们解析器的质量,将其与优化文章类内容的流行第三方HTML解析器进行比较,发现其表现良好。我们仔细处理包含数学和代码内容的HTML页面,以保留这些内容的结构。我们保留了图像的alt属性文本,因为数学内容通常表示为预渲染的图像,而数学公式也提供在alt属性中。我们通过实验评估了不同的清洗配置。我们发现,对于主要在网页数据上训练的模型,Markdown格式相比纯文本有害,因此我们移除了所有Markdown标记。
去重。我们在URL、文档和行级别应用了多轮去重:
* URL级别去重。我们对整个数据集进行URL级别的去重。对于每个URL对应的页面,我们保留最新版本。
* 文档级别去重。我们对整个数据集进行全局MinHash(【索引2,On the resemblance and containment of documents,1997,Proceedings. Compression and Complexity of SEQUENCES 1997】)去重,以移除近似重复的文档。
* 行级别去重。我们进行了类似于ccNet(【索引3,Ccnet: Extracting high quality monolingual datasets from web crawl data,2019,ArXiv】)的激进行级别去重。在每3000万个文档的桶中,我们移除了出现超过6次的行。尽管我们的人工定性分析表明,行级别去重不仅移除了各种网站的剩余样板内容,如导航菜单、cookie警告,还移除了频繁出现的高质量文本,但我们的经验评估显示了显著的改进。
启发式过滤。我们开发了启发式规则来移除额外的低质量文档、异常值和包含过度重复的文档。一些启发式规则的例子包括:
* 我们使用重复n-gram覆盖率(【索引4,Scaling language models: Methods, analysis & insights from training gopher,2021,ArXiv】)来移除由重复内容组成的行,如日志或错误信息。这些行可能非常长且独特,因此无法通过行级别去重过滤。
* 我们使用“脏词”计数(【索引5,Exploring the limits of transfer learning with a unified text-to-text transformer,2020,Journal of machine learning research】)来过滤未被域名黑名单覆盖的成人网站。
* 我们使用token分布的Kullback-Leibler散度来过滤掉与训练语料库分布相比包含过多异常token的文档。
基于模型的质量过滤。此外,我们尝试应用各种基于模型的质量分类器来筛选高质量的token。这些分类器包括使用fasttext(【索引6,Bag of tricks for efficient text classification,2017,EACL】)等快速分类器,训练其识别给定文本是否会被维基百科引用(【索引7,Llama: Open and efficient foundation language models,2023,ArXiv】),以及更耗费计算资源的、在Llama 2预测上训练的Roberta-based分类器(【索引8,Roberta: A robustly optimized bert pretraining approach,2019,ArXiv】)。为了训练一个基于Llama 2的质量分类器,我们创建了一个清洗过的网页文档训练集,描述了质量要求,并指示Llama 2的聊天模型判断这些文档是否满足要求。出于效率考虑,我们使用DistilRoberta(【索引9,Distilbert, a distilled version of bert: smaller, faster, cheaper and lighter,2019,ArXiv】)为每个文档生成质量分数。我们通过实验评估了各种质量过滤配置的有效性。
代码和推理数据。类似于DeepSeek-AI等人的工作(【索引10,Deepseek-coder-v2: Breaking the barrier of closed-source models in code intelligence,2024,ArXiv】),我们构建了特定领域的管道,用于提取与代码和数学相关的网页。具体来说,代码和推理分类器都是在由Llama 2标注的网页数据上训练的DistilRoberta模型。与上面提到的一般质量分类器不同,我们进行了提示调优,以针对包含数学推导、STEM领域推理以及自然语言与代码交织的网页。由于代码和数学的token分布与自然语言有显著不同,这些管道实现了特定领域的HTML提取、定制化的文本特征和过滤启发式规则。
多语言数据。与我们上述描述的英语处理管道类似,我们实施了过滤器来移除可能包含PII或不安全内容的网站数据。我们的多语言文本处理管道有几个独特的功能:
* 我们使用一个基于fasttext的语言识别模型,将文档分类为176种语言。
* 我们在每种语言的数据内部进行文档级别和行级别的去重。
* 我们应用特定语言的启发式规则和基于模型的过滤器来移除低质量文档。
此外,我们使用一个基于多语言Llama 2的分类器对多语言文档进行质量排序,以确保高质量内容被优先考虑。我们在预训练中使用的多语言token数量是通过实验确定的,旨在平衡模型在英语和多语言基准上的性能。
3.1.2 确定数据混合比例
知识分类。为了获得高质量的语言模型,仔细确定预训练数据混合中不同数据源的比例至关重要。我们确定这种数据混合的主要工具是知识分类和缩放法则实验。我们开发了一个分类器,用于对我们网页数据中包含的信息类型进行分类,以便更有效地确定数据混合比例。我们使用这个分类器来降采样在网络上过度代表的数据类别,例如艺术和娱乐。
数据混合的缩放法则。为了确定最佳的数据混合比例,我们进行了缩放法则实验,即在一种数据混合上训练几个小模型,并用它来预测大模型在该混合上的性能(见第3.2.1节)。我们对不同的数据混合重复此过程多次,以选择一个新的候选数据混合。随后,我们在这个候选数据混合上训练一个更大的模型,并评估该模型在几个关键基准上的性能。
数据混合总结。我们的最终数据混合包含大约50%的通用知识token,25%的数学和推理token,17%的代码token,以及8%的多语言token。
3.1.3 数据退火(Annealing)
退火提升性能。根据经验,我们发现在少量高质量的代码和数学数据上进行退火(见第3.4.3节)可以提升预训练模型在关键基准上的性能。类似于Li等人的工作(【索引11,Datacomp-lm: In search of the next generation of training sets for language models,2024,ArXiv】),我们使用一种上采样特定领域高质量数据的数据混合进行退火。我们的退火数据中不包含任何来自常用基准的训练集。这使我们能够评估Llama 3真正的少样本学习能力和域外泛化能力。
在GSM8k和MATH上的评估。遵循OpenAI(【索引12,Gpt-4 technical report,2023,ArXiv】)的做法,我们评估了在GSM8k(【索引13,Training verifiers to solve math word problems,2021,ArXiv】)和MATH(【索引14,Measuring mathematical problem solving with the MATH dataset,2021,NeurIPS Datasets and Benchmarks】)训练集上进行退火的有效性。我们发现,退火使一个预训练的Llama 3 8B模型在GSM8k和MATH验证集上的性能分别提高了24.0%和6.4%。然而,在405B模型上的改进微不足道,这表明我们的旗舰模型具有强大的上下文学习和推理能力,不需要特定的域内训练样本来获得强大的性能。
使用退火评估数据质量。类似于Blakeney等人的工作(【索引15,Does your data spark joy? performance gains from domain upsampling at the end of training,2024,ArXiv】),我们发现退火使我们能够判断小型特定领域数据集的价值。我们通过将一个训练了50%的Llama 3 8B模型的学习率在40B个token上线性退火至0来衡量这些数据集的价值。在这些实验中,我们将新数据集的权重设为30%,其余70%的权重分配给默认的数据混合。使用退火来评估新数据源比为每个小数据集进行缩放法则实验更有效。
3.2 模型架构
标准密集Transformer架构。Llama 3使用一个标准的、密集的Transformer架构(【索引16,Attention is all you need,2017,Advances in Neural Information Processing Systems】)。在模型架构方面,它与Llama和Llama 2(【索引7,Llama: Open and efficient foundation language models,2023,ArXiv】;【索引17,Llama 2: Open foundation and fine-tuned chat models,2023,ArXiv】)没有显著差异;我们的性能提升主要由数据质量和多样性的改进以及训练规模的增加所驱动。
与Llama 2的微小修改。我们与Llama 2相比做了一些小的修改:
* GQA:我们使用分组查询注意力(GQA;【索引18,Gqa: Training generalized multi-query transformer models from multi-head checkpoints,2023,ArXiv】),配备8个键值头,以提高推理速度并减少解码期间键值缓存的大小。
* 注意力掩码:我们使用一个注意力掩码,防止同一序列内不同文档之间的自注意力。我们发现在标准预训练中这一变化影响有限,但在对非常长的序列进行持续预训练时发现它很重要。
* 词汇表:我们使用一个包含128K个token的词汇表。我们的token词汇表结合了来自tiktoken3分词器的100K个token和28K个额外token,以更好地支持非英语语言。与Llama 2分词器相比,我们的新分词器在英语数据样本上的压缩率从每个token 3.17个字符提高到3.94个字符。这使得模型在相同的训练计算量下能够“阅读”更多文本。我们还发现,从选定的非英语语言中添加28K个token,既提高了压缩率又改善了下游性能,对英语分词没有影响。
* RoPE基础频率:我们将RoPE的基础频率超参数增加到500,000。这使我们能够更好地支持更长的上下文;Xiong等人(【索引19,Effective long-context scaling of foundation models,2023,ArXiv】)表明这个值对于长达32,768的上下文长度是有效的。
405B模型架构细节。Llama 3 405B使用一个包含126层、token表示维度为16,384、128个注意力头的架构;详情见表3。根据我们数据上的缩放法则,这使得模型大小对于我们3.8 × 10²⁵ FLOPs的训练预算来说是近似计算最优的。
Table 3 Llama 3关键超参数概览。我们展示了8B、70B和405B语言模型的设置。
3.2.1 缩放法则
预测下游性能的方法论。我们开发了缩放法则(【索引20,Training compute-optimal large language models,2022,ArXiv】;【索引21,Scaling laws for neural language models,2020,ArXiv】)来确定在给定预训练计算预算下我们旗舰模型的最佳模型大小。除了确定最佳模型大小外,一个主要挑战是预测旗舰模型在下游基准任务上的性能,这存在几个问题:(1) 现有的缩放法则通常只预测下一个token的预测损失,而不是特定的基准性能。(2) 缩放法则可能嘈杂且不可靠,因为它们是基于在小计算预算下进行的预训练运行开发的(【索引22,Emergent abilities of large language models,2022,TMLR】)。为了应对这些挑战,我们实施了一个两阶段方法来开发能够准确预测下游基准性能的缩放法则:
1. 我们首先建立计算最优模型的下游任务负对数似然与训练FLOPs之间的相关性。
2. 接着,我们利用缩放法则模型和用更高计算FLOPs训练的旧模型,将下游任务的负对数似然与任务准确率关联起来。在这一步中,我们特别利用了Llama 2系列模型。
这种方法使我们能够在给定特定数量的训练FLOPs的情况下,预测计算最优模型的下游任务性能。我们使用类似的方法来选择我们的预训练数据混合(见第3.4节)。
缩放法则实验。具体来说,我们通过使用6 × 10¹⁸ FLOPs到10²² FLOPs之间的计算预算预训练模型来构建我们的缩放法则。在每个计算预算下,我们预训练了参数大小在40M到16B之间的模型,并在每个计算预算下使用一部分模型大小。在这些训练运行中,我们使用带有2000个训练步骤线性预热的余弦学习率调度。峰值学习率根据模型大小设置在2 × 10⁻⁴到4 × 10⁻⁴之间。我们将余弦衰减设置为峰值的0.1。每一步的权重衰减设置为该步学习率的0.1倍。我们为每个计算规模使用固定的批量大小,范围在250K到4M之间。
Figure 2 6 × 10¹⁸到10²² FLOPs之间的缩放法则IsoFLOPs曲线。损失是在一个留出的验证集上的负对数似然。我们使用二阶多项式来近似每个计算规模下的测量值。
Figure 3 已识别的计算最优模型中的训练token数量作为预训练计算预算的函数。我们还包括了拟合的缩放法则预测。计算最优模型对应于图2中抛物线的最小值。
IsoFLOPs曲线与计算最优模型。这些实验产生了图2中的IsoFLOPs曲线。这些曲线中的损失是在一个单独的验证集上测量的。我们使用二阶多项式拟合测量的损失值,并识别每个抛物线的最小值。我们将抛物线的最小值称为在相应预训练计算预算下的计算最优模型。
预测最佳训练token数。我们使用这样识别出的计算最优模型来预测特定计算预算的最佳训练token数。为此,我们假设计算预算$C$与最佳训练token数$N^⋆(C)$之间存在幂律关系:
我们使用图2的数据拟合A和α。我们发现(α, A) = (0.53, 0.29);相应的拟合如图3所示。将得到的缩放法则外推到3.8 × 10²⁵ FLOPs,建议在16.55T个token上训练一个402B参数的模型。一个重要的观察是,随着计算预算的增加,IsoFLOPs曲线在最小值附近变得更平坦。这意味着旗舰模型的性能对模型大小和训练token之间权衡的微小变化相对稳健。基于这一观察,我们最终决定训练一个405B参数的旗舰模型。
预测下游任务性能。我们使用得到的计算最优模型来预测旗舰Llama 3模型在基准数据集上的性能。首先,我们线性关联基准中正确答案的(归一化)负对数似然与训练FLOPs。在此分析中,我们仅使用在上述数据混合上训练至10²² FLOPs的缩放法则模型。接下来,我们使用缩放法则模型和Llama 2模型(使用Llama 2数据混合和分词器训练)建立对数似然与准确率之间的S型关系。我们在图4中展示了这个实验在ARC Challenge基准上的结果。我们发现这种跨越四个数量级外推的两步缩放法则预测相当准确:它仅略微低估了旗舰Llama 3模型的最终性能。
Figure 4 ARC Challenge的缩放法则预测。左:ARC Challenge基准上正确答案的归一化负对数似然作为预训练FLOPs的函数。右:ARC Challenge基准准确率作为正确答案的归一化负对数似然的函数。此分析使我们能够在预训练开始前预测模型在ARC Challenge基准上的性能。详情见正文。
3.3 基础设施、扩展和效率
我们描述了支持Llama 3 405B大规模预训练的硬件和基础设施,并讨论了几个提高训练效率的优化措施。
3.3.1 训练基础设施
训练集群迁移。Llama 1和2模型在Meta的AI研究超级集群(【索引23,Introducing the AI Research SuperCluster — Meta’s cutting-edge AI supercomputer for AI research,2022,Meta AI Blog】)上进行训练。随着我们规模的进一步扩大,Llama 3的训练迁移到了Meta的生产集群(【索引24,Building meta’s genai infrastructure,2024】)。这种设置优化了生产级的可靠性,这在我们扩大训练规模时至关重要。
计算资源。Llama 3 405B在多达16K个H100 GPU上进行训练,每个GPU以700W TDP运行,配备80GB HBM3,使用Meta的Grand Teton AI服务器平台(【索引25,Meta open compute project, grand teton ai platform,2022,Meta Engineering Blog】)。每个服务器配备八个GPU和两个CPU。在一个服务器内,八个GPU通过NVLink连接。训练任务使用MAST(【索引26,MAST: Global scheduling of ml training across geo-distributed datacenters at hyperscale,2024,OSDI】),Meta的全球规模训练调度器进行调度。
存储系统。Tectonic(【索引27,Facebook’s tectonic filesystem: Efficiency from exascale,2021,FAST】),Meta的通用分布式文件系统,被用来为Llama 3预训练构建存储结构(【索引28,Training llama: A storage perspective,2024,@Scale Conference】)。它提供了来自7500台配备SSD的服务器的240 PB存储,支持2 TB/s的可持续吞吐量和7 TB/s的峰值吞吐量。一个主要挑战是支持高度突发性的检查点写入,这些写入会在短时间内使存储结构饱和。检查点保存每个GPU的模型状态,范围从每个GPU 1 MB到4 GB,用于恢复和调试。我们的目标是最小化检查点期间的GPU暂停时间,并增加检查点频率,以减少恢复后损失的工作量。
网络。Llama 3 405B使用了基于Arista 7800和Minipack2开放计算项目(OCP)机架交换机的RDMA over Converged Ethernet (RoCE) fabric。Llama 3家族中的较小模型使用了Nvidia Quantum2 Infiniband fabric。RoCE和Infiniband集群都利用了GPU之间400 Gbps的互连。尽管这些集群之间的底层网络技术存在差异,但我们对它们都进行了调优,以为这些大型训练工作负载提供等效的性能。我们进一步阐述我们的RoCE网络,因为我们完全拥有其设计。
* 网络拓扑:我们的基于RoCE的AI集群包含24K个GPU,通过一个三层Clos网络(【索引24,Building meta’s genai infrastructure,2024】)连接。在底层,每个机架托管16个GPU,分布在两个服务器上,并通过一个Minipack2机架顶(ToR)交换机连接。在中层,192个这样的机架通过集群交换机连接,形成一个拥有3072个GPU、具有完全对分带宽的pod,确保没有超额订阅。在顶层,同一数据中心大楼内的八个这样的pod通过聚合交换机连接,形成一个24K GPU的集群。然而,聚合层的网络连接没有维持完全的对分带宽,而是有1:7的超额订阅比。我们的模型并行方法(见3.3.2节)和训练任务调度器(【索引26,MAST: Global scheduling of ml training across geo-distributed datacenters at hyperscale,2024,OSDI】)都经过优化,以感知网络拓扑,旨在最小化跨pod的网络通信。
* 负载均衡:LLM训练产生胖网络流,难以使用传统方法如等价多路径(ECMP)路由在所有可用网络路径上进行负载均衡。为了应对这一挑战,我们采用了两种技术。首先,我们的集合通信库在两个GPU之间创建16个网络流,而不是只有一个,从而减少了每个流的流量,并为负载均衡提供了更多的流。其次,我们的增强型ECMP(E-ECMP)协议通过对RoCE报头中的附加字段进行哈希,有效地将这16个流平衡到不同的网络路径上。
* 拥塞控制:我们在骨干交换机中使用深缓冲交换机(【索引29,RDMA over Ethernet for Distributed AI Training at Meta Scale,2024,SIGCOMM】)来容纳由集合通信模式引起的瞬时拥塞和缓冲。这种设置有助于限制由慢速服务器引起的持续拥塞和网络背压的影响,这在训练中很常见。最后,通过E-ECMP实现的更好的负载均衡显著降低了拥塞的可能性。通过这些优化,我们成功地运行了一个24K GPU的集群,而没有使用传统拥塞控制方法,如数据中心量化拥塞通知(DCQCN)。
Table 4 Llama 3 405B预训练各阶段的扩展配置和MFU。关于每种并行类型的描述见正文和图5。
3.3.2 模型扩展的并行化
4D并行化。为了扩展我们最大模型的训练,我们使用4D并行化——四种不同类型并行化方法的组合——来分片模型。这种方法有效地将计算分布在许多GPU上,并确保每个GPU的模型参数、优化器状态、梯度和激活值都适合其HBM。我们的4D并行化实现如图5所示。它结合了张量并行(TP;【索引30,Imagenet classification with deep convolutional neural networks,2012,NIPS】;【索引31,Megatron-lm: Training multi-billion parameter language models using model parallelism,2019,ArXiv】;【索引32,Reducing activation recomputation in large transformer models,2023,MLSys】)、流水线并行(PP;【索引33,Gpipe: Efficient training of giant neural networks using pipeline parallelism,2019】;【索引34,Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM,2021,SC】;【索引35,Breadth-first pipeline parallelism,2023,MLSys】)、上下文并行(CP;【索引36,Ring attention with blockwise transformers for near-infinite context,2023,ArXiv】)和数据并行(DP;【索引37,Zero: Memory optimizations toward training trillion parameter models,2020,ArXiv】;【索引38,Zero-offload: Democratizing billion-scale model training,2021,ArXiv】;【索引39,Pytorch fsdp: Experiences on scaling fully sharded data parallel,2023,ArXiv】)。
并行化方法详解。张量并行将单个权重张量分割成多个块,分布在不同的设备上。流水线并行按层将模型垂直划分为多个阶段,以便不同的设备可以并行处理完整模型流水线的不同阶段。上下文并行将输入上下文划分为多个段,减少了极长序列长度输入时的内存瓶颈。我们使用完全分片数据并行(FSDP;【索引37,Zero: Memory optimizations toward training trillion parameter models,2020,ArXiv】;【索引38,Zero-offload: Democratizing billion-scale model training,2021,ArXiv】;【索引39,Pytorch fsdp: Experiences on scaling fully sharded data parallel,2023,ArXiv】),它分片模型、优化器和梯度,同时实现数据并行,即在多个GPU上并行处理数据,并在每个训练步骤后进行同步。我们为Llama 3使用的FSDP分片了优化器状态和梯度,但对于模型分片,我们在前向计算后不重新分片,以避免在后向传递期间产生额外的all-gather通信。
GPU利用率。通过仔细调整并行化配置、硬件和软件,我们为表4中所示的配置实现了38-43%的整体BF16模型FLOPs利用率(MFU;【索引40,Palm: Scaling language modeling with pathways,2023,JMLR】)。在16K个GPU上使用DP=128时MFU略降至41%,相比于在8K个GPU上使用DP=64时的43%,是由于需要降低每个DP组的批次大小,以在训练期间保持全局每批token数恒定。
流水线并行改进。我们遇到了现有实现的一些挑战:
* 批次大小限制。当前实现对每个GPU支持的批次大小有限制,要求它能被流水线阶段数整除。如图6中的例子,深度优先调度(DFS)的流水线并行(【索引34,Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM,2021,SC】)要求N = PP = 4,而广度优先调度(BFS;【索引35,Breadth-first pipeline parallelism,2023,MLSys】)要求N = M,其中M是微批次的总数,N是同一阶段前向或后向的连续微批次数。然而,预训练通常需要灵活调整批次大小。
* 内存不平衡。现有的流水线并行实现导致资源消耗不平衡。第一阶段由于嵌入和预热微批次消耗更多内存。
* 计算不平衡。在模型的最后一层之后,我们需要计算输出和损失,使这一阶段成为执行延迟的瓶颈。
Figure 5 4D并行化示意图。GPU按[TP, CP, PP, DP]的顺序被划分为并行组,其中DP代表FSDP。在此示例中,16个GPU配置了|TP|=2, |CP|=2, |PP|=2, 和 |DP|=2的组大小。一个GPU在4D并行化中的位置表示为一个向量[D1, D2, D3, D4],其中Di是第i个并行维度上的索引。在此示例中,GPU0[TP0, CP0, PP0, DP0]和GPU1[TP1, CP0, PP0, DP0]在同一个TP组中,GPU0和GPU2在同一个CP组中,GPU0和GPU4在同一个PP组中,GPU0和GPU8在同一个DP组中。
流水线调度改进。为了解决这些问题,我们修改了我们的流水线调度,如图6所示,这允许灵活设置N——在这种情况下N = 5,可以在每个批次中运行任意数量的微批次。这使我们能够:(1) 在大规模下有批次大小限制时运行比阶段数更少的微批次;或(2) 运行更多的微批次来隐藏点对点通信,在DFS和广度优先调度(BFS)之间找到一个平衡点,以获得最佳的通信和内存效率。为了平衡流水线,我们分别从第一和最后一个阶段减少一个Transformer层。这意味着第一阶段的第一个模型块只有嵌入,最后一个阶段的最后一个模型块只有输出投影和损失计算。为了减少流水线气泡,我们使用了一个交错调度(【索引34,Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM,2021,SC】),在一个流水线等级上有V个流水线阶段。总的流水线气泡比率为$PP−1V ∗M$。此外,我们在PP中采用异步点对点通信,这大大加快了训练速度,特别是在文档掩码引入额外计算不平衡的情况下。我们启用TORCH_NCCL_AVOID_RECORD_STREAMS来减少异步点对点通信的内存使用。最后,为了降低内存成本,基于详细的内存分配剖析,我们主动释放未来计算中不会使用的张量,包括每个流水线阶段的输入和输出张量。通过这些优化,我们可以在不使用激活检查点的情况下,对8K token的序列进行Llama 3的预训练。
长序列的上下文并行。我们利用上下文并行(CP)来提高Llama 3上下文长度扩展时的内存效率,并支持在长达128K的极长序列上进行训练。在CP中,我们沿序列维度进行分区,具体来说,我们将输入序列划分为2 × CP个块,以便每个CP rank接收两个块以实现更好的负载均衡。第i个CP rank接收到第i个和第(2 × CP − 1 − i)个块。与现有的CP实现(【索引36,Ring attention with blockwise transformers for near-infinite context,2023,ArXiv】)在环状结构中重叠通信和计算不同,我们的CP实现采用了一种基于all-gather的方法,我们首先对键(K)和值(V)张量进行all-gather,然后为本地查询(Q)张量块计算注意力输出。尽管all-gather通信延迟暴露在关键路径中,我们仍然采用这种方法,主要有两个原因:(1) 在基于all-gather的CP注意力中支持不同类型的注意力掩码(如文档掩码)更容易、更灵活;(2) 暴露的all-gather延迟很小,因为通信的K和V张量由于使用了GQA(【索引18,Gqa: Training generalized multi-query transformer models from multi-head checkpoints,2023,ArXiv】)而比Q张量小得多。因此,注意力计算的时间复杂度比all-gather大一个数量级($O(S^2)$ vs $O(S)$,其中S表示全因果掩码中的序列长度),使得all-gather开销可以忽略不计。
Figure 6 Llama 3中的流水线并行示意图。流水线并行将八个流水线阶段(0到7)划分到四个流水线rank(PP rank 0到3)上,其中rank 0的GPU运行阶段0和4,rank 1的GPU运行阶段1和5,以此类推。彩色块(0到9)代表一个微批次序列,其中M是微批次的总数,N是同一阶段前向或后向的连续微批次数。我们的关键洞见是使N可调。
网络感知的并行配置。并行维度的顺序[TP, CP, PP, DP]是为网络通信而优化的。最内层的并行需要最高的网络带宽和最低的延迟,因此通常限制在同一服务器内。最外层的并行可能跨越多跳网络,并应能容忍更高的网络延迟。因此,根据网络带宽和延迟的要求,我们按[TP, CP, PP, DP]的顺序放置并行维度。DP(即FSDP)是最外层的并行,因为它可以通过异步预取分片模型权重和减少梯度来容忍更长的网络延迟。在避免GPU内存溢出的同时,识别具有最小通信开销的最佳并行配置是具有挑战性的。我们开发了一个内存消耗估算器和一个性能预测工具,这帮助我们探索各种并行配置,并有效地预测整体训练性能和识别内存差距。
数值稳定性。通过比较不同并行设置之间的训练损失,我们修复了几个影响训练稳定性的数值问题。为确保训练收敛,我们在多个微批次的后向计算中使用FP32梯度累积,并在FSDP中跨数据并行工作者以FP32进行梯度的reduce-scatter。对于中间张量,例如在前向计算中多次使用的视觉编码器输出,其后向梯度也在FP32中累积。
3.3.3 集合通信
NCCLX。我们的Llama 3集合通信库基于Nvidia NCCL库的一个分支,名为NCCLX。NCCLX显著提高了NCCL的性能,特别是在高延迟网络上。回想一下,并行维度的顺序是[TP, CP, PP, DP],其中DP对应于FSDP。最外层的并行维度PP和DP可能通过多跳网络进行通信,延迟可达数十微秒。原始的NCCL集合操作——FSDP中的all-gather和reduce-scatter,以及PP中的点对点通信——需要数据分块和分阶段数据复制。这种方法会带来几个低效之处,包括(1) 需要在网络上交换大量小的控制消息以促进数据传输,(2) 额外的内存复制操作,以及(3) 为通信使用额外的GPU周期。对于Llama 3的训练,我们通过调整分块和数据传输以适应我们的网络延迟(对于大型集群可高达数十微秒)来解决这些低效问题的一部分。我们还允许小的控制消息以更高的优先级在我们的网络中传输,特别是避免在深缓冲核心交换机中被队头阻塞。我们为未来Llama版本正在进行的更深层次的NCCLX更改工作,旨在全面解决上述所有问题。
Table 5 Llama 3 405B预训练54天期间意外中断的根本原因分类。约78%的意外中断归因于已确认或可疑的硬件问题。
3.3.4 可靠性与运营挑战
大规模训练的复杂性。16K GPU训练的复杂性和潜在故障场景超过了我们运营过的更大规模的CPU集群。此外,训练的同步性使其容错性较低——单个GPU故障可能需要重启整个任务。尽管存在这些挑战,对于Llama 3,我们实现了超过90%的有效训练时间,同时支持自动化集群维护,如固件和Linux内核升级(【索引41,Maintaining large-scale ai capacity at meta,2024】),这导致每天至少有一次训练中断。有效训练时间衡量的是在已过时间内用于有效训练的时间。
中断分析。在预训练的一个54天快照期间,我们共经历了466次任务中断。其中,47次是由于自动化维护操作(如固件升级)或操作员发起的(如配置或数据集更新)的计划中断。其余419次是意外中断,分类见表5。大约78%的意外中断归因于已确认的硬件问题,如GPU或主机组件故障,或可疑的硬件相关问题,如静默数据损坏和计划外的单个主机维护事件。GPU问题是最大的类别,占所有意外问题的58.7%。尽管故障数量众多,但在此期间仅需三次重大手动干预,其余问题均由自动化处理。
提高有效训练时间的措施。为了提高有效训练时间,我们减少了任务启动和检查点时间,并开发了用于快速诊断和问题解决的工具。我们广泛使用PyTorch内置的NCCL飞行记录器(【索引42,Pytorch 2: Faster machine learning through dynamic python bytecode transformation and graph compilation,2024,ASPLOS】),该功能将集合元数据和堆栈跟踪捕获到环形缓冲区中,从而使我们能够大规模快速诊断挂起和性能问题,特别是在NCCLX方面。通过这种方式,我们有效地记录了每个通信事件和每个集合操作的持续时间,并在NCCLX看门狗或心跳超时时自动转储跟踪数据。我们通过在线配置更改(【索引43,Holistic Configuration Management at Facebook,2015,SOSP】)在生产环境中实时按需选择性地启用计算密集型跟踪操作和元数据收集,而无需代码发布或任务重启。
调试挑战。在大规模训练中调试问题因网络中混合使用NVLink和RoCE而变得复杂。通过NVLink的数据传输通常通过CUDA内核发出的加载/存储操作进行,远程GPU或NVLink连接的故障通常表现为CUDA内核内加载/存储操作的停滞,而不会返回明确的错误代码。NCCLX通过与PyTorch的紧密协同设计,提高了故障检测和定位的速度和准确性,允许PyTorch访问NCCLX的内部状态并跟踪相关信息。虽然无法完全防止由NVLink故障引起的停滞,但我们的系统会监视通信库的状态,并在检测到此类停滞时自动超时。此外,NCCLX会跟踪每个NCCLX通信的内核和网络活动,并提供故障NCCLX集合内部状态的快照,包括所有rank之间已完成和待处理的数据传输。我们分析这些数据来调试NCCLX的扩展问题。
慢节点检测与环境影响。有时,硬件问题可能会导致功能正常但速度缓慢的“掉队者”(stragglers),这些节点难以检测。即使是单个掉队者也可能拖慢数千个其他GPU,通常表现为功能正常但通信缓慢。我们开发了工具来优先处理来自选定进程组的潜在问题通信。通过仅调查少数几个最高嫌疑对象,我们通常能够有效识别掉队者。一个有趣的观察是环境因素对大规模训练性能的影响。对于Llama 3 405B,我们注意到基于一天中不同时间的1-2%的日吞吐量变化。这种波动是由于中午较高的温度影响GPU动态电压和频率缩放所致。
数据中心功耗挑战。在训练期间,数万个GPU可能会同时增加或减少功耗,例如,由于所有GPU都在等待检查点或集合通信完成,或者整个训练任务的启动或关闭。当这种情况发生时,可能会导致数据中心功耗在数十兆瓦的量级上瞬间波动,挑战电网的极限。随着我们为未来更大规模的Llama模型扩展训练,这对我们来说是一个持续的挑战。
3.4 训练配方
用于预训练Llama 3 405B的配方包括三个主要阶段:(1) 初始预训练,(2) 长上下文预训练,和 (3) 退火。下面将分别描述这三个阶段。我们使用类似的配方来预训练8B和70B模型。
3.4.1 初始预训练
训练参数设置。我们使用AdamW预训练Llama 3 405B,峰值学习率为8 × 10⁻⁵,线性预热8,000步,余弦学习率调度在1,200,000步内衰减至8 × 10⁻⁷。我们在训练初期使用较小的批次大小以提高训练稳定性,随后增加批次大小以提高效率。具体来说,我们使用初始批次大小为4M token和序列长度为4,096,在预训练了252M token后,将这些值翻倍至批次大小为8M和序列长度为8,192 token。在预训练了2.87T token后,我们再次将批次大小翻倍至16M。我们发现这个训练配方非常稳定:我们观察到很少的损失尖峰,并且不需要干预来纠正模型训练的发散。
调整数据混合。在训练期间,我们对预训练数据混合进行了几次调整,以提高模型在特定下游任务上的性能。特别是,我们在预训练期间增加了非英语数据的百分比,以提高Llama 3的多语言性能。我们还上采样了数学数据以提高模型的数学推理性能,在预训练的后期阶段添加了更新的网页数据以推进模型的知识截止日期,并且我们对后来被识别为质量较低的预训练数据子集进行了降采样。
3.4.2 长上下文预训练
逐步增加上下文长度。在预训练的最后阶段,我们对长序列进行训练,以支持高达128K token的上下文窗口。我们没有在早期对长序列进行训练,因为自注意力层中的计算量随序列长度呈二次方增长。我们分阶段增加支持的上下文长度,预训练直到模型成功适应增加的上下文长度。我们通过测量以下两点来评估是否成功适应:(1) 模型在短上下文评估上的性能已完全恢复;(2) 模型完美解决了该长度下的“大海捞针”任务。在Llama 3 405B的预训练中,我们分六个阶段逐步增加上下文长度,从最初的8K上下文窗口开始,最终达到128K上下文窗口。这个长上下文预训练阶段使用了大约800B的训练token。
Figure 7 Llama 3整体后训练方法示意图。我们的后训练策略涉及拒绝采样、监督微调和直接偏好优化。详情见正文。
3.4.3 退火
最终训练阶段。在预训练的最后40M个token期间,我们线性地将学习率退火至0,同时保持128K token的上下文长度。在这个退火阶段,我们还调整了数据混合,以上采样质量非常高的数据源;详见第3.1.3节。最后,我们计算退火期间模型检查点的平均值(Polyak平均法;【索引44,New stochastic approximation type procedures,1991,Automation and Remote Control】),以产生最终的预训练模型。
4 后训练
我们通过在预训练检查点之上应用多轮后训练,或将模型与人类反馈对齐(【索引45,Training language models to follow instructions with human feedback,2022,ArXiv】;【索引46,Direct preference optimization: Your language model is secretly a reward model,2023,NeurIPS】),来生产对齐的Llama 3模型。每一轮后训练都包括监督微调(SFT),然后是对通过人类标注或合成生成收集的示例进行直接偏好优化(DPO;【索引46,Direct preference optimization: Your language model is secretly a reward model,2023,NeurIPS】)。我们的后训练建模和数据方法分别在第4.1节和第4.2节中描述。我们在第4.3节中进一步详细介绍了为提高推理、编码、事实性、多语言、工具使用、长上下文和精确指令遵循等能力的定制数据整理策略。
4.1 建模
我们的后训练策略的核心是一个奖励模型和一个语言模型。我们首先在预训练检查点之上,使用人类标注的偏好数据训练一个奖励模型(见第4.1.2节)。然后,我们通过监督微调(SFT;见第4.1.3节)对预训练检查点进行微调,并进一步通过直接偏好优化(DPO;见第4.1.4节)对齐检查点。此过程如图7所示。除非另有说明,我们的建模过程适用于Llama 3 405B,为简洁起见,我们将其称为Llama 3。
4.1.1 聊天对话格式
新多消息聊天协议。为了针对人机交互调整LLM,我们需要定义一个聊天对话协议,让模型能够理解人类指令并执行对话任务。与前代模型相比,Llama 3具有新功能,如工具使用(第4.3.5节),这可能需要在一个对话回合内生成多条消息并发送到不同位置(例如,用户、ipython)。为了支持这一点,我们设计了一个新的多消息聊天协议,它使用各种特殊的头部和终止token。头部token用于指示对话中每条消息的来源和目的地。同样,终止token指示何时轮到人类和AI交替发言。
4.1.2 奖励建模
训练方法。我们在预训练检查点之上,训练一个覆盖不同能力的奖励模型(RM)。训练目标与Llama 2相同,只是我们移除了损失中的边际项(margin term),因为我们观察到在数据扩展后,改进效果递减。遵循Llama 2的做法,我们在过滤掉响应相似的样本后,使用我们所有的偏好数据进行奖励建模。除了标准的(选择的,拒绝的)响应对偏好外,标注者还为一些提示创建了第三个“编辑过的响应”,即对选择的响应进行进一步改进(见第4.2.1节)。因此,每个偏好排序样本都有两个或三个具有明确排序的响应(编辑过的 > 选择的 > 拒绝的)。我们在训练时将提示和多个响应连接成单行,并随机打乱响应顺序。这是对将响应放在不同行并计算分数的标准场景的一种近似,但在我们的消融实验中,这种方法在不损失准确性的情况下提高了训练效率。
4.1.3 监督微调
SFT流程。然后,我们使用奖励模型对我们的人类标注提示进行拒绝采样,具体细节在第4.2节中描述。连同这些拒绝采样的数据和其他数据源(包括合成数据),我们使用标准交叉熵损失对目标token进行微调,同时在提示token上屏蔽损失。关于数据混合的更多细节可以在第4.2节中找到。我们将这个阶段称为监督微调(SFT;【索引47,Finetuned language models are zero-shot learners,2022,ICLR】;【索引48,Multitask prompted training enables zero-shot task generalization,2022,ICLR】;【索引49,Super-naturalinstructions: Generalization via declarative instructions on 1600+ nlp tasks,2022,EMNLP】),尽管许多训练目标是模型生成的。我们最大的模型在8.5K到9K步的训练过程中,使用10⁻⁵的学习率进行微调。我们发现在不同的轮次和数据混合中,这些超参数设置效果良好。
4.1.4 直接偏好优化
DPO训练流程。我们进一步使用直接偏好优化(DPO;【索引46,Direct preference optimization: Your language model is secretly a reward model,2023,NeurIPS】)对我们的SFT模型进行训练,以实现人类偏好对齐。对于训练,我们主要使用从前几轮对齐中表现最佳的模型收集的最新批次的偏好数据。因此,我们的训练数据更好地符合每一轮中正在优化的策略模型的分布。我们还探索了如PPO(【索引50,Proximal policy optimization algorithms,2017,ArXiv】)等在线策略算法,但发现DPO对于大规模模型需要更少的计算,并且表现更好,特别是在像IFEval(【索引51,Instruction-following evaluation for large language models,2023,ArXiv】)这样的指令遵循基准上。对于Llama 3,我们使用10⁻⁵的学习率,并将β超参数设置为0.1。此外,我们对DPO应用了以下算法修改:
- 在DPO损失中屏蔽格式化token:我们在损失中从选择和拒绝的响应中屏蔽掉特殊的格式化token,包括头部和终止token(在第4.1.1节中描述),以稳定DPO训练。我们观察到让这些token对损失有贡献可能会导致不希望的模型行为,如尾部重复或突然生成终止token。我们假设这是由于DPO损失的对比性质——在选择和拒绝的响应中都存在的共同token导致了冲突的学习目标,因为模型需要同时增加和减少这些token的可能性。
- 使用NLL损失进行正则化:我们在选择的序列上添加了一个额外的负对数似然(NLL)损失项,缩放系数为0.2,类似于Pang等人(【索引52,Iterative reasoning preference optimization,2024,ArXiv】)的做法。这通过保持期望的生成格式和防止选择响应的对数概率下降(【索引52,Iterative reasoning preference optimization,2024,ArXiv】;【索引53,Smaug: Fixing failure modes of preference optimisation with dpo-positive,2024,ArXiv】),有助于进一步稳定DPO训练。
4.1.5 模型平均
平均模型权重。最后,我们在每个RM、SFT或DPO阶段,对使用不同版本数据或超参数的实验所获得的模型进行平均(【索引54,Averaging weights leads to wider optima and better generalization,2019,ArXiv】;【索引55,Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time,2022,ArXiv】;【索引56,Branch-train-merge: Embarrassingly parallel training of expert language models,2022,ArXiv】)。
Table 6 人类偏好数据统计。我们列出了用于Llama 3对齐的内部收集的人类偏好数据的统计信息。我们要求标注员与模型进行多轮对话,并在每轮对响应进行比较。在后处理中,我们将每个对话按轮次拆分为多个示例。每个示例包含一个提示(如果可用,包括之前的对话)和一个响应(例如,选择的或拒绝的响应)。
4.1.6 迭代轮次
六轮迭代。继Llama 2之后,我们分六轮应用上述方法。在每个周期中,我们收集新的偏好标注和SFT数据,并从最新的模型中采样合成数据。
4.2 后训练数据
后训练数据的构成对语言模型的实用性和行为起着关键作用。在本节中,我们讨论我们的人类标注程序和偏好数据收集(第4.2.1节)、我们SFT数据的构成(第4.2.2节),以及数据质量控制和清洗的方法(第4.2.3节)。
4.2.1 偏好数据
标注流程。我们的偏好数据标注过程与Llama 2类似。我们在每一轮后部署多个模型进行标注,并为每个用户提示从两个不同的模型中采样两个响应。这些模型可以用不同的数据混合和对齐配方进行训练,从而实现不同的能力强度(例如,代码专业知识)和增加数据多样性。我们要求标注者根据他们对选择的响应比拒绝的响应的偏好程度,将其分为四个级别之一:显著更好、更好、略好或稍微更好。我们还在偏好排序后加入了一个编辑步骤,以鼓励标注者进一步改进偏好的响应。标注者直接编辑选择的响应,或用反馈提示模型以改进其自身的响应。因此,我们的一部分偏好数据有三个排序的响应(编辑过的 > 选择的 > 拒绝的)。
数据统计与质量控制。在表6中,我们报告了用于Llama 3训练的偏好标注统计数据。“通用英语”涵盖了多个子类别,如基于知识的问答或精确的指令遵循,这些都超出了特定能力的范围。与Llama 2相比,我们观察到提示和响应的平均长度有所增加,这表明我们训练Llama 3处理更复杂的任务。此外,我们实施了一个质量分析和人工评估过程,以严格评估收集的数据,使我们能够改进提示并向标注者提供系统性、可操作的反馈。例如,随着Llama 3在每一轮后不断改进,我们相应地增加提示的复杂性,以针对模型滞后的领域。
数据使用策略。在每一轮后训练中,我们使用当时所有可用的偏好数据进行奖励建模,而仅使用来自各种能力的最新批次进行DPO训练。对于奖励建模和DPO,我们都使用被标记为选择的响应显著好于或好于被拒绝的响应的样本进行训练,并丢弃响应相似的样本。
4.2.2 SFT数据
我们的微调数据主要由以下来源组成:
* 来自我们人类标注收集的提示,其响应经过拒绝采样。
* 针对特定能力的合成数据(更多细节见第4.3节)。
* 少量人工策划的数据(更多细节见第4.3节)。
随着我们后训练轮次的推进,我们开发出更强大的Llama 3变体,我们用这些变体来收集覆盖广泛复杂能力的更大数据集。在本节中,我们讨论拒绝采样程序的细节以及我们最终SFT数据混合的整体构成。
拒绝采样(RS)。在拒绝采样(RS)期间,对于在人类标注(第4.2.1节)期间收集的每个提示,我们从最新的聊天模型策略(通常是前一次后训练迭代中表现最佳的检查点,或特定能力表现最佳的检查点)中采样K个(通常在10到30之间)输出,并使用我们的奖励模型选择最佳候选者,这与Bai等人(【索引57,Constitutional AI: harmlessness from AI feedback,2022,ArXiv】)的做法一致。在后训练的后期轮次中,我们引入系统提示来引导RS响应,使其符合期望的语调、风格或格式,这对于不同的能力可能有所不同。
PagedAttention优化。为了提高拒绝采样的效率,我们采用了PagedAttention(【索引58,Efficient memory management for large language model serving with pagedattention,2023】)。PagedAttention通过动态键值缓存分配来增强内存效率。它通过根据当前缓存容量动态调度请求来支持任意输出长度。不幸的是,这带来了在内存耗尽时发生交换(swap-out)的风险。为了消除这种交换开销,我们定义了一个最大输出长度,并且仅在有足够内存容纳该长度的输出时才执行请求。PagedAttention还使我们能够在一个提示的所有相应输出之间共享键值缓存页面。这些措施共同使拒绝采样期间的吞吐量提高了2倍以上。
整体数据构成。表7显示了我们“有用性”混合中每个大类的数据统计。“SFT”和“偏好数据”虽然包含重叠的领域,但它们的策划方式不同,产生了不同的计数统计。在第4.2.3节中,我们描述了对数据样本进行主题、复杂性和质量分类的技术。在每一轮后训练中,我们仔细调整我们在这些轴上的整体数据混合,以调整在广泛基准上的性能。我们的最终数据混合对一些高质量来源进行了多次迭代,并对其他来源进行了降采样。
Table 7 SFT数据统计。我们列出了用于Llama 3对齐的内部收集的SFT数据。每个SFT示例包括一个上下文(即除最后一轮外的所有对话轮次)和一个最终响应。
4.2.3 数据处理与质量控制
鉴于我们大部分的训练数据是模型生成的,它需要仔细的清洗和质量控制。
数据清洗。在早期轮次中,我们观察到数据中存在一些常见的不良模式,例如过度使用表情符号或感叹号。因此,我们实施了一系列基于规则的数据移除和修改策略来过滤或清洗有问题的数据。例如,为了缓解过度道歉的语调问题,我们识别出过度使用的短语(如“我很抱歉”或“我道歉”),并仔细平衡数据集中此类样本的比例。
数据修剪。我们还应用了一系列基于模型的技术来移除低质量的训练样本并提高整体模型性能:
* 主题分类:我们首先将Llama 3 8B微调成一个主题分类器,并对所有数据进行推理,将其分类到粗粒度桶(“数学推理”)和细粒度桶(“几何和三角学”)中。
* 质量评分:我们使用奖励模型和基于Llama的信号来为每个样本获得质量分数。对于基于RM的分数,我们将RM分数排在前四分之一的数据视为高质量。对于基于Llama的分数,我们提示Llama 3检查点对每个样本在通用英语数据上进行三点评分(准确性、指令遵循和语调/呈现),在编码数据上进行两点评分(错误识别和用户意图),并将获得最高分的样本视为高质量。RM和基于Llama的分数有很高的不一致率,我们发现结合这些信号可以在我们的内部测试集上产生最佳的召回率。最终,我们选择被RM或基于Llama的过滤器标记为高质量的示例。
* 难度评分:因为我们也对优先处理对模型更复杂的示例感兴趣,我们使用两种难度度量来对数据进行评分:Instag(【索引59,Instag: Instruction tagging for analyzing supervised fine-tuning of large language models,2023】)和基于Llama的评分。对于Instag,我们提示Llama 3 70B对SFT提示进行意图标记,其中更多的意图意味着更复杂。我们还提示Llama 3在三点尺度上衡量对话的难度(【索引60,What makes good data for alignment? a comprehensive study of automatic data selection in instruction tuning,2024,ArXiv】)。
* 语义去重:最后,我们进行语义去重(【索引61,Semdedup: Data-efficient learning at web-scale through semantic deduplication,2023,ArXiv】;【索引60,What makes good data for alignment? a comprehensive study of automatic data selection in instruction tuning,2024,ArXiv】)。我们首先使用RoBERTa(【索引62,Roberta: A robustly optimized BERT pretraining approach,2019,ArXiv】)对完整的对话进行聚类,并在每个聚类内按质量分数 × 难度分数进行排序。然后我们进行贪婪选择,迭代所有排序后的示例,只保留那些与聚类中已见示例的最大余弦相似度小于阈值的示例。
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(【索引63,Evaluating large language models trained on code,2021,ArXiv】)发布以来,用于代码的LLM受到了极大的关注。我们训练了一个代码专家,用于在后续的后训练轮次中收集高质量的人类代码标注。这是通过从主预训练运行中分支出一个分支,并继续在主要由代码数据(>85%)组成的1T token混合数据上进行预训练来实现的。在特定领域数据上继续预训练已被证明能有效提高特定领域的性能(【索引64,Don’t stop pretraining: Adapt language models to domains and tasks,2020,ACL】)。我们遵循了类似于CodeLlama(【索引65,Code llama: Open foundation models for code,2023,ArXiv】)的配方。在训练的最后几千步中,我们进行了长上下文微调(LCFT),将专家的上下文长度扩展到16K token,使用的是高质量的仓库级代码数据混合。最后,我们遵循第4.1节中描述的类似后训练建模配方来对齐该模型,但SFT和DPO数据混合主要针对代码。该模型也用于编码提示的拒绝采样(第4.2.2节)。
合成数据生成。在开发过程中,我们确定了代码生成的关键问题,包括难以遵循指令、代码语法错误、不正确的代码生成以及难以修复错误。虽然密集的人类标注理论上可以解决这些问题,但合成数据生成以更低的成本和更高的规模提供了一种补充方法,不受标注者专业水平的限制。因此,我们使用Llama 3和代码专家生成了大量的合成SFT对话。我们描述了三种生成合成代码数据的高级方法。总共,我们生成了超过270万个合成示例,用于SFT。
1. 合成数据生成:执行反馈。我们通过以下过程生成了大约一百万个合成编码对话的大型数据集:
* 问题描述生成:首先,我们生成大量的编程问题描述,涵盖多样化的主题。为了实现这种多样性,我们从各种来源随机抽样代码片段,并提示模型生成受这些示例启发的编程问题(【索引66,Magicoder: Empowering code generation with oss-instruct,2024,ArXiv】)。
* 解决方案生成:然后,我们提示Llama 3用给定的编程语言解决每个问题。
* 正确性分析:我们通过静态分析(linter、parser)和动态分析(单元测试生成和执行)来测试其正确性。
* 错误反馈和迭代自修正:当解决方案在任何步骤失败时,我们提示模型进行修正。提示中包括原始问题描述、错误的解决方案以及来自解析器/linter/测试器的反馈。
* 微调和迭代改进:微调过程分多轮进行,每一轮都建立在前一轮的基础上。
- 合成数据生成:编程语言翻译。为了弥补常见编程语言(如Python/C++)和不常见语言(如Typescript/PHP)之间的性能差距,我们通过将常见语言的数据翻译成不常见语言来补充现有数据(类似于Chen等人(【索引67,Breaking language barriers in multilingual mathematical reasoning: Insights and observations,2023,ArXiv】)在推理领域的做法)。这通过提示Llama 3并确保通过语法解析、编译和执行来保证质量。图8展示了一个从Python翻译成PHP的合成PHP代码示例。
- 合成数据生成:反向翻译。为了提高某些编码能力(如文档、解释),我们采用了一种多步骤方法。使用此过程,我们生成了约120万个与代码解释、生成、文档和调试相关的合成对话。从预训练数据中的各种语言代码片段开始:
- 生成:我们提示Llama 3生成代表我们目标能力的数据。
- 反向翻译:然后我们提示模型将合成生成的数据“反向翻译”回原始代码。
- 过滤:使用原始代码作为参考,我们提示Llama 3确定输出的质量,并使用得分最高的示例进行SFT。
拒绝采样中的系统提示引导。在拒绝采样过程中,我们使用特定于代码的系统提示来提高代码的可读性、文档性、彻底性和特异性。图9显示了一个系统提示如何帮助提高生成代码质量的示例——它增加了必要的注释,使用了更具信息量的变量名,节省了内存等。
使用执行和模型作为裁判信号过滤训练数据。我们利用“模型作为裁判”的方法,让早期版本的Llama 3根据两个标准(代码正确性和代码风格)进行评估并分配二进制(0/1)分数。我们只保留那些获得满分2分的样本。最初,这种严格的过滤导致了下游基准性能的回归,主要是因为它不成比例地移除了带有挑战性提示的示例。为了解决这个问题,我们有策略地修改了一些被归类为最具挑战性的编码数据的响应,直到它们满足基于Llama的“模型作为裁判”的标准。
Figure 8 代码翻译示例。我们展示了一个使用Llama 3将Python代码(左)翻译成PHP代码(右)的示例,以扩充我们的SFT数据集,使其包含更广泛的编程语言。
Figure 9 使用系统提示提高生成的代码质量。左:无系统提示 右:有系统提示。
4.3.2 多语言能力
专家训练。我们的Llama 3预训练数据混合中,英语token显著多于非英语token。为了收集更高质量的非英语语言人类标注,我们训练了一个多语言专家。具体做法是从预训练运行中分支出一个分支,并继续在一个包含90%多语言token的数据混合上进行预训练。然后,我们按照第4.1节的方法对这个专家模型进行后训练。这个专家模型随后被用来收集更高质量的非英语语言标注,直到预训练完全结束。
多语言数据收集。我们的多语言SFT数据主要来自以下来源,总体分布为2.4%的人类标注,44.2%来自其他NLP任务的数据,18.8%的拒绝采样数据,以及34.6%的翻译推理数据。
- 人类标注:我们从语言学家和母语者那里收集高质量、手动标注的数据。这些标注主要包括代表现实世界用例的开放式提示。
- 来自其他NLP任务的数据:为进一步扩充,我们使用来自其他任务的多语言训练数据,并将其改写成对话格式。例如,我们使用来自exams-qa(【索引68,EXAMS: A multi-subject high school examinations dataset for cross-lingual and multilingual question answering,2020,EMNLP】)和Conic10k(【索引69,Conic10k: A challenging math problem understanding and reasoning dataset,2023,ArXiv】)的数据。为了改善语言对齐,我们还使用了来自GlobalVoices(【索引70,Parallel global voices: a collection of multilingual corpora with citizen media stories,2016,LREC】)和Wikimedia(【索引71,Parallel data, tools and interfaces in opus,2012,LREC】)的平行文本。我们使用基于LID的过滤和Blaser2.0(【索引72,Seamlessm4t—massively multilingual & multimodal machine translation,2023,ArXiv】)来移除低质量数据。对于平行文本数据,我们没有直接使用双语对,而是应用了一个受Wei等人(【索引47,Finetuned language models are zero-shot learners,2022,ICLR】)启发的多语言模板,以更好地模拟翻译和语言学习场景中的真实对话。
- 拒绝采样数据:我们对人类标注的提示应用拒绝采样,为微调生成高质量样本,与英语数据的处理过程相比只有少量修改。在生成阶段,我们探索了在早期后训练轮次中从0.2-1的范围内随机选择温度超参数以获得多样化的生成。在最后的后训练轮次中,我们使用0.6的恒定值来平衡权衡。此外,我们使用专门的系统提示来改善响应格式、结构和总体可读性。在基于奖励模型的选择之前,我们实施了特定于多语言的检查,以确保提示和响应之间的高语言匹配率。
- 翻译数据:我们尽量避免使用机器翻译的数据进行微调,以防止翻译腔(【索引73,How human is machine translationese? comparing human and machine translations of text and speech,2020,IWSLT】;【索引74,Crosslingual generalization through multitask finetuning,2023,ACL】)或可能的名字偏见(【索引75,Measuring and mitigating name biases in neural machine translation,2022,ACL】)、性别偏见(【索引76,Gender Bias in Machine Translation,2021,TACL】)或文化偏见(【索引77,Cultural and Linguistic Bias of Neural Machine Translation Technology,2023,Cambridge University Press】)。我们对此做了一个例外,翻译了我们的合成定量推理数据(详见第4.3.3节),以提高非英语语言的定量推理性能。由于这些数学问题中语言的简单性,翻译后的样本被发现几乎没有质量问题。我们观察到在MGSM(【索引78,Language models are multilingual chain-of-thought reasoners,2022,ArXiv】)上添加这些翻译数据后有显著的增益。
4.3.3 数学与推理
我们将推理定义为执行多步计算并得出正确最终答案的能力。在训练擅长数学推理的模型时,我们面临几个挑战,并为此采取了相应的方法:
* 缺乏提示:随着问题复杂度的增加,用于监督微调(SFT)的有效提示或问题的数量减少。这使得为模型教授各种数学技能创建多样化和代表性的训练数据集变得困难。
* 缺乏真实思维链:有效的推理需要一步一步的解决方案来促进推理过程。然而,通常缺乏真实的思维链,这对于指导模型如何逐步分解问题并得出最终答案至关重要。
* 中间步骤不正确:当使用模型生成的思维链时,中间步骤可能并不总是正确的。这种不准确性可能导致最终答案错误,需要加以解决。
* 教授模型使用外部工具:增强模型使用外部工具(如代码解释器)的能力,使其能够通过交错代码和文本进行推理。
* 训练与推理的差异:模型的微调方式与在推理中的使用方式之间通常存在差异。
为了应对这些挑战,我们采用了以下方法:
* 解决提示缺乏问题:我们从数学上下文中获取相关的预训练数据,并将其转换为问答格式用于SFT。此外,我们识别模型表现不佳的数学技能,并积极从人类那里获取相关提示来教授模型这些技能。
* 用逐步推理轨迹增强训练数据:我们使用Llama 3为一组提示生成逐步解决方案。然后根据正确答案对这些生成进行过滤。我们还进行自我验证,即使用Llama 3来验证特定逐步解决方案对给定问题是否有效。
* 过滤不正确的推理轨迹:我们训练结果和逐步奖励模型(【索引79,Let’s verify step by step,2023,ArXiv】;【索引80,Math-shepherd: Verify and reinforce llms step-by-step without human annotations,2023,ArXiv】)来过滤中间推理步骤不正确的训练数据。
* 交错代码和文本推理:我们提示Llama 3通过文本推理和相关Python代码的组合来解决推理问题(【索引81,Tora: A tool-integrated reasoning agent for mathematical problem solving,2023,ArXiv】)。代码执行被用作反馈信号,以消除推理链无效的情况。
* 从反馈和错误中学习:为了模拟人类反馈,我们利用不正确的生成(即导致不正确推理轨迹的生成),并通过提示Llama 3产生正确的生成来进行错误纠正(【索引82,Learning from mistakes makes llm better reasoner,2023,ArXiv】;【索引83,Generating sequences by learning to self-correct,2022,ArXiv】;【索引84,Self-refine: Iterative refinement with self-feedback,2024,NeurIPS】)。
4.3.4 长上下文
SFT和合成数据生成。在最终预训练阶段,我们将Llama 3的上下文长度从8K token扩展到128K token。与预训练类似,我们发现在微调期间必须仔细调整配方,以平衡短上下文和长上下文的能力。天真地应用我们现有的仅含短上下文数据的SFT配方,会导致预训练中的长上下文能力显著退化,这凸显了在SFT数据混合中加入长上下文数据的必要性。然而,在实践中,由于阅读冗长上下文的乏味和耗时,让人们标注此类示例基本上是不切实际的,因此我们主要依靠合成数据来填补这一空白。我们使用早期版本的Llama 3,基于关键的长上下文用例生成合成数据:(可能是多轮的)问答、长文档摘要和代码库推理,并下面详细描述它们。
* 问答:我们从预训练混合中精心策划了一组长文档。我们将这些文档分成8K token的块,并提示早期版本的Llama 3模型根据随机选择的块生成QA对。在训练期间,整个文档被用作上下文。
* 摘要:我们通过首先使用我们最强的Llama 3 8K上下文模型对8K输入长度的块进行摘要,然后对这些摘要进行摘要,来对长上下文文档进行分层摘要。在训练期间,我们提供完整的文档并提示模型在保留所有重要细节的同时对文档进行摘要。我们还根据文档的摘要生成QA对,并提示模型回答需要对整个长文档有全局理解的问题。
* 长上下文代码推理:我们解析Python文件以识别导入语句并确定它们的依赖关系。从这里,我们选择最常被依赖的文件,特别是那些被至少五个其他文件引用的文件。我们从一个仓库中移除其中一个关键文件,并提示模型识别哪些文件依赖于缺失的文件,并生成必要的缺失代码。
我们进一步根据序列长度(16K、32K、64K和128K)对这些合成生成的样本进行分类,以便更精细地针对输入长度。通过仔细的消融实验,我们观察到将0.1%的合成生成的长上下文数据与原始短上下文数据混合,可以优化短上下文和长上下文基准的性能。
DPO。我们观察到,只要SFT模型在长上下文任务中质量高,在DPO中仅使用短上下文训练数据并不会对长上下文性能产生负面影响。我们怀疑这是因为我们的DPO配方比SFT的优化器步骤少。鉴于这一发现,我们在长上下文SFT检查点之上,为DPO保留了标准的短上下文配方。
4.3.5 工具使用
工具集成。我们训练Llama 3与以下工具交互:
* 搜索引擎:Llama 3被训练使用Brave Search来回答超出其知识截止日期的近期事件问题,或需要从网络上检索特定信息的问题。
* Python解释器:Llama 3可以生成并执行代码来进行复杂计算、读取用户上传的文件并基于这些文件解决任务,如问答、摘要、数据分析或可视化。
* 数学计算引擎:Llama 3可以使用Wolfram Alpha API更准确地解决数学、科学问题,或从Wolfram的数据库中检索准确信息。
最终的模型能够在聊天设置中使用这些工具来解决用户的查询,包括在多轮对话中。如果查询需要多次工具调用,模型可以编写一个分步计划,按顺序调用工具,并在每次工具调用后进行推理。我们还改进了Llama 3的零样本工具使用能力——在给定上下文中的、可能是未见过的工具定义和用户查询的情况下,我们训练模型生成正确的工具调用。
实现。我们将核心工具实现为具有不同方法的Python对象。零样本工具可以作为带有描述、文档(即如何使用它们的示例)的Python函数来实现,模型只需要函数的签名和文档字符串作为上下文来生成适当的调用。我们还将函数定义和调用转换为JSON格式,例如用于Web API调用。所有工具调用都由Python解释器执行,该解释器必须在Llama 3系统提示中启用。核心工具可以在系统提示中单独启用或禁用。
数据收集。与Schick等人(【索引85,Toolformer: Language models can teach themselves to use tools,2024,NeurIPS】)不同,我们依赖人类标注和偏好来教Llama 3使用工具。与Llama 3通常使用的后训练流程主要有两个不同之处:
* 对于工具,对话通常包含不止一条助手消息(例如,调用工具和对工具输出进行推理)。因此,我们在消息级别进行标注以收集细粒度的反馈。
* 我们不进行拒绝采样,因为我们没有在工具基准测试中观察到增益。
为了加速标注过程,我们通过在先前Llama 3检查点生成的合成数据上进行微调来引导基本的工具使用能力。
工具数据集。为了创建工具使用应用的数据,我们利用以下程序:
* 单步工具使用:我们首先通过少样本生成合成用户提示,这些提示按构造需要调用我们的一个核心工具。然后,我们再次依赖少样本生成为这些提示生成适当的工具调用,执行它们,并将输出添加到模型的上下文中。最后,我们再次提示模型根据工具输出生成对用户查询的最终答案。
* 多步工具使用:我们遵循类似的协议,首先生成合成数据来教模型基本的多步工具使用能力。为此,我们首先提示Llama 3生成需要至少两次工具调用的用户提示。然后,我们对这些提示进行少样本提示,让Llama 3生成一个由交错的推理步骤和工具调用组成的解决方案,类似于ReAct(【索引86,React: Synergizing reasoning and acting in language models,2210,ArXiv】)。图10展示了Llama 3执行一个涉及多步工具使用任务的示例。
* 文件上传:我们对以下文件类型进行标注:.txt, .docx, .pdf, .pptx, .xlsx, .csv, .tsv, .py, .json, .jsonl, .html, .xml。我们的提示基于提供的文件,并要求总结文件内容、查找并修复错误、优化一段代码、进行数据分析或可视化。图11展示了Llama 3执行一个涉及文件上传任务的示例。
在对这些合成数据进行微调后,我们收集了在多样化和挑战性场景中的人类标注,包括多轮交互、超过三步的工具使用,以及工具调用未产生满意答案的情况。
Figure 10 多步工具使用。Llama 3执行多步规划、推理和工具调用以解决任务的示例。
零样本工具使用数据。我们通过在一个大型多样的部分合成(函数定义、用户查询、相应调用)元组集上进行微调,来提高Llama 3的零样本工具使用能力(也称为函数调用)。我们在一组未见过的工具上评估我们的模型。
* 单次、嵌套和并行函数调用:我们通过挖掘The Stack(【索引87,The stack: 3 tb of permissively licensed source code,2022,ArXiv】)来将我们的合成用户查询基于真实函数,从而生成多样化的函数、查询和基准。
* 多轮函数调用:我们还为带有函数调用的多轮对话生成合成数据,遵循Li等人(【索引88,Api-bank: A comprehensive benchmark for tool-augmented llms,2023,ArXiv】)提出的类似协议。我们使用多个代理来生成领域、API、用户查询、API调用和响应。
8用户提示
谷物的含糖量与其总体评分之间有什么关系?你能将这种关系可视化,并提供一种根据含糖量估算谷物评分的方法吗?
目系统提示
工具:brave_search, wolfram_alpha 知识截止日期:2023年12月 今天日期:2024年7月11日
助手响应
Figure 11 处理文件上传。Llama 3对上传文件进行分析和可视化的示例。
4.3.6 事实性
减少幻觉的方法。幻觉仍然是大型语言模型的一个主要挑战。我们遵循的原则是,后训练应该使模型对齐以“知道它所知道的”,而不是增加知识(【索引89,Does fine-tuning llms on new knowledge encourage hallucinations?,2024】;【索引90,Linguistic calibration through metacognition: aligning dialogue agent responses with expected correctness,2020,ArXiv】)。我们的主要方法是生成数据,将模型生成的内容与预训练数据中存在的事实数据子集对齐。为此,我们开发了一种知识探测技术,利用Llama 3的上下文能力。这个数据生成过程包括以下步骤:
1. 从预训练数据中提取一个数据片段。
2. 通过提示Llama 3,生成一个关于这些片段(上下文)的事实性问题。
3. 从Llama 3中采样对该问题的响应。
4. 使用原始上下文作为参考,并以Llama 3作为裁判,对生成的正确性进行评分。
5. 以Llama 3作为裁判,对生成的信息量进行评分。
6. 对于在所有生成中信息量丰富但始终不正确的响应,使用Llama 3生成一个拒绝回答。
我们使用从知识探测中生成的数据来鼓励模型只回答它有知识的问题,并拒绝回答它不确定的问题。此外,预训练数据并非总是事实一致或正确的。因此,我们还收集了一套有限的标记事实性数据,处理那些事实矛盾或不正确陈述普遍存在的敏感话题。
4.3.7 可控性
通过系统提示增强可控性。可控性是指引导模型的行为和结果以满足开发者和用户规范的能力。对于Llama 3,我们专注于通过带有自然语言指令的系统提示来增强其可控性,特别是在响应长度、格式、语调和角色/人设方面。
数据收集与建模。我们通过要求标注员为Llama 3设计不同的系统提示,在通用英语类别中收集可控性偏好样本。然后,标注员与模型进行对话,以评估它们在对话过程中遵循系统提示中定义的指令的一致性。我们展示了一个用于增强可控性的定制系统提示示例:
<blockquote>你是一个乐于助人、开朗的AI聊天机器人,为忙碌的家庭担任膳食计划助手。家庭成员包括2名成人、3名青少年和2名学龄前儿童。一次计划两到三天的餐食,并利用剩菜或多余的食材来安排第二天的计划。用户会告诉你他们想要两天还是三天的计划。如果他们没有说,就假设是三天。每个计划应包括早餐、午餐、点心和晚餐。询问用户是否同意该计划或需要调整。在他们同意后,提供一份考虑家庭规模的购物清单。始终牢记家庭偏好,如果有什么他们不喜欢的,就提供替代品。如果用户没有灵感,就问他们本周最想去哪个地方度假,然后根据该地的文化推荐餐食。周末的餐食可以更复杂。工作日的餐食应该快捷简便。早餐和午餐,偏爱像麦片、配有预煮培根的英式松饼等快捷简便的食物。家庭很忙。一定要问他们是否有咖啡或能量饮料等必需品和喜爱品,以免他们忘记购买。除非是特殊场合,否则要记得注意预算。
</blockquote>在收集了偏好数据后,我们利用这些数据进行奖励建模、拒绝采样、SFT和DPO,以增强Llama 3的可控性。
A4 实验环境
硬件配置:
* GPU:Llama 3 405B在多达16,000个NVIDIA H100 GPU上进行训练,每个GPU配备80GB HBM3内存,TDP为700W。
* 平台:训练使用了Meta的Grand Teton AI服务器平台,每台服务器配备8个GPU和2个CPU。
* 互连:
* 服务器内部:8个GPU通过NVLink连接。
* 集群网络:Llama 3 405B使用了基于Arista 7800和Minipack2交换机的400 Gbps RoCE(RDMA over Converged Ethernet) fabric。较小模型使用了Nvidia Quantum2 Infiniband fabric。
* 网络拓扑:RoCE集群为三层Clos网络,连接24,000个GPU,pod内(3072 GPU)为全对分带宽,跨pod有1:7的超额订阅。
- 存储:使用Meta的Tectonic分布式文件系统,提供240 PB的SSD存储,可持续吞吐量2 TB/s,峰值7 TB/s。
软件配置:
* 代码实现:基于PyTorch框架,并使用了其内置的NCCL飞行记录器进行调试。
* 并行库:使用了FSDP(Fully Sharded Data Parallelism)进行数据并行。
* 通信库:使用了Nvidia NCCL库的一个分支,名为NCCLX,以提升在高延迟网络下的性能。
* 调度器:使用Meta的全球规模训练调度器MAST进行任务调度。
数据集:
* 预训练:使用了约15T token的多语言语料库,数据截至2023年底。数据来源多样,包括网页、代码、数学推理等。最终数据混合比例为:通用知识约50%,数学与推理25%,代码17%,多语言8%。
* 后训练:使用了大量人类标注的指令和偏好数据,以及模型生成的合成数据。数据涵盖通用英语、编码、推理、多语言(德、法、意、葡、印、西、泰)、工具使用、长上下文等多个领域。
模型架构:
* Llama 3 405B:126层,隐藏层维度16,384,128个注意力头,使用GQA(8个KV头),词汇表大小128K,RoPE基础频率500,000。
* Llama 3 70B:80层,隐藏层维度8,192,64个注意力头,使用GQA(8个KV头)。
* Llama 3 8B:32层,隐藏层维度4,096,32个注意力头,使用GQA(8个KV头)。
A4 实验结果
5.1 预训练语言模型
-
标准基准测试:
- 结果:在常识推理、知识、阅读理解、数学与推理、代码等多个类别的基准测试中,Llama 3 8B和70B模型在其同等规模的竞品中表现出色,几乎在所有类别中都取得了领先(图12)。Llama 3 70B显著优于其前代Llama 2 70B和Mixtral 8x22B。Llama 3 405B与业界其他SOTA模型性能相当,并大幅超越了之前的开源模型(表9-14)。
- 分析:结果表明,通过优化数据、规模和简化架构,密集模型仍然可以达到极具竞争力的性能。
-
模型鲁棒性测试:
- 实验内容:在MMLU基准上测试了模型对多项选择题(MCQ)设置中不同设计选择的鲁棒性,包括少样本标签偏见、标签变体、答案顺序和提示格式。
- 结果:Llama 3模型,特别是405B版本,对MCQ标签的变化和少样本提示标签的结构表现出很强的鲁棒性(图13, 14)。
- 分析:这表明Llama 3的性能稳定性较高,不易受评测设置中无关变量的干扰。
-
对抗性基准测试:
- 实验内容:在问答(Adversarial SQuAD)、数学推理(GSM-Plus)和释义检测(PAWS)等对抗性基准上进行了评估。
- 结果:在释义检测上,Llama 3对PAWS数据集中的对抗性攻击不敏感。但在数学推理和问答任务中,其在对抗性数据集上的性能显著低于非对抗性数据集(图15)。
- 分析:模型在某些类型的对抗性攻击面前仍有改进空间,尤其是在需要复杂推理的任务上。
-
污染分析:
- 实验内容:分析了评测数据在预训练语料库中的污染程度及其对模型性能的潜在影响。
- 结果:对于某些数据集(如PiQA, HellaSwag),污染可能对性能有较大影响;而对于另一些数据集(如Natural Questions),即使污染率较高,性能影响也微乎其微(表15)。
- 分析:污染分析是一个复杂问题,当前方法仍有局限性,但结果表明需要持续关注和改进评测的纯净性。
5.2 后训练语言模型
- 通用知识与指令遵循:在MMLU、MMLU-Pro和IFEval等基准上,Llama 3各尺寸模型均优于同类竞品。405B模型在MMLU上优于GPT-4,但在MMLU-Pro上落后于Claude 3.5 Sonnet(表2)。
- 专业能力考试:在GRE、LSAT、SAT、GMAT等多种人类专业考试中,Llama 3 405B的性能与Claude 3.5 Sonnet和GPT-4o非常接近,而70B模型表现同样出色,在多项测试中击败了Nemotron 4 340B(表17)。
- 编码能力:在HumanEval、MBPP及其增强版等Python代码生成基准上,Llama 3 8B和70B模型优于同类模型。405B模型与Claude 3.5 Sonnet和GPT-4o性能相近(表18)。在多语言代码生成(MultiPL-E)上,性能虽有下降,但仍具竞争力(表19)。
- 多语言能力:在多语言MMLU和MGSM基准上,Llama 3 405B在MGSM上表现最佳,但在MMLU上略逊于GPT-4o。8B和70B模型在两个任务上均大幅领先于竞争对手(表20)。
- 数学与推理:在GSM8K、MATH、GPQA等基准上,8B和70B模型在同类中表现出色。405B模型在GSM8K和ARC-C上领先,但在MATH和GPQA上略有差距(表2)。
- 长上下文能力:在Needle-in-a-Haystack测试中,Llama 3模型实现了100%的完美检索。在ZeroSCROLLS和InfiniteBench等长文本理解基准上,Llama 3 405B和70B模型也表现出与SOTA模型相当或更优的性能(表21)。
- 工具使用:在Nexus、API-Bank、BFCL等零样本工具使用基准上,Llama 3各版本均表现优异(表22)。在人类评估中,Llama 3 405B在纯文本代码执行和绘图生成方面优于GPT-4o,但在文件上传用例上稍逊一筹(图16)。
5.3 人类评估
- 实验内容:在一个包含约7000个高质量、多难度、多类别提示的数据集上,对Llama 3 405B与GPT-4、GPT-4o和Claude 3.5 Sonnet进行了成对比较。
- 结果:Llama 3 405B与GPT-4(0125 API版)的性能大致相当。与GPT-4o和Claude 3.5 Sonnet相比,结果互有胜负。例如,Llama 3在多轮推理和编码上优于GPT-4,但在多语言上稍弱。与Claude 3.5 Sonnet相比,Llama 3在英语对话上占优,但在编码和推理上落后(图17)。
- 分析:人类评估结果与标准基准测试结果基本一致,证实Llama 3 405B是目前性能最强的开源模型之一,与顶尖的闭源模型具有很强的竞争力。
5.4 安全性评估
- 安全微调与评估框架:通过构建包含对抗性和边界性提示的内部基准,对模型的违规率(VR)和错误拒绝率(FRR)进行评估(表23)。安全微调结合了SFT和DPO,并发现模型大小对安全/有用性权衡有影响(图18)。
- 总体安全性能:Llama 3模型在保持低违规率的同时,也实现了较低的错误拒绝率,在安全性和有用性之间取得了良好平衡,与业界领先系统相比具有竞争力(图19, 20, 21)。
-
特定能力安全性:
- 多语言:通过收集特定语言的安全数据,Llama 3在多种语言上实现了与英语相当的安全性能(图19)。
- 长上下文:通过针对性的微调,有效抵御了多样本越狱攻击(many-shot jailbreaking),性能优于竞品(图20)。
- 工具使用:在搜索工具使用场景中,Llama 3比竞品更安全,但错误拒绝率略高(图20)。
-
网络安全与生化武器风险:
- 网络安全:在CyberSecEval基准测试中,Llama 3未显示出生成恶意代码或利用漏洞的显著倾向。但在提示注入攻击方面仍有一定脆弱性(图22)。在模拟的自主网络攻击中,模型未能成功获得初始访问权限。在“Uplift”测试中,为新手和专家提供Llama 3并未显著提高其网络攻击成功率。
- 生化武器:“Uplift”测试表明,使用Llama 3模型并未显著提升低技能或中等技能人员规划生化武器攻击的能力,评估认为其发布的风险较低。
-
红队测试:通过专家红队测试,发现了多轮对话、多语言混合、工具使用等场景下的多种攻击向量和风险,这些发现被用于改进安全微调数据。
- 系统级安全:发布了Llama Guard 3,一个基于Llama 3 8B的安全分类器,用于检测输入/输出中的不安全内容。它能显著降低违规率(平均降低65%),并支持多语言和工具使用场景(表25, 26)。同时,还开源了Prompt Guard(检测提示攻击)和Code Shield(检测不安全代码)等基于提示的防护机制(表28)。
A7 补充细节
6 推理
我们研究了两种主要技术来提高Llama 3 405B模型推理的效率:(1) 流水线并行和 (2) FP8量化。我们已经公开发布了我们的FP8量化实现。
6.1 流水线并行
跨节点推理。当模型参数使用BF16数字表示时,Llama 3 405B无法装入单台配备8个Nvidia H100 GPU的机器的GPU内存中。为解决此问题,我们在两台机器上的16个GPU上使用BF16精度进行模型推理的并行化。在每台机器内部,高带宽的NVLink使得可以使用张量并行(【索引31,Megatron-lm: Training multi-billion parameter language models using model parallelism,2019,ArXiv】)。然而,在节点之间,连接的带宽较低、延迟较高,因此我们改用流水线并行(【索引33,Gpipe: Efficient training of giant neural networks using pipeline parallelism,2019】)。
微批次优化。在训练中使用流水线并行时,气泡(bubbles)是一个主要的效率问题(见3.3节)。然而,在推理期间它们不是问题,因为推理不涉及需要流水线清空的后向传播。因此,我们使用微批次处理(micro-batching)来通过流水线并行提高推理吞吐量。我们评估了在4096个输入token和256个输出token的推理工作负载中,在推理的键值缓存预填充阶段和解码阶段使用两个微批次的效果。我们发现微批次处理提高了相同本地批次大小的推理吞吐量;见图24。这些改进源于微批次处理使得在这两个阶段中可以并发执行微批次。微批次处理带来的额外同步点也增加了延迟,但总体而言,微批次处理仍然带来了更好的吞吐量-延迟权衡。
Figure 24 微批次处理对推理吞吐量和延迟的影响。左:预填充阶段。右:解码阶段。图中的数字对应于(微)批次大小。
6.2 FP8量化
低精度推理。我们利用H100 GPU原生的FP8支持进行低精度推理实验。为了实现低精度推理,我们对模型内部的大部分矩阵乘法应用了FP8量化。具体来说,我们量化了模型中前馈网络层的大部分参数和激活值,这部分约占推理计算时间的50%。我们没有量化模型自注意力层中的参数。我们利用动态缩放因子以获得更好的准确性(【索引91,Smoothquant: Accurate and efficient post-training quantization for large language models,2024】),并优化我们的CUDA内核以减少计算缩放因子的开销。我们发现Llama 3 405B的质量对某些类型的量化很敏感,并做出了一些额外的改变来提高模型输出质量:
1. 类似于Zhang等人(【索引92,Training deep neural networks with joint quantization and pruning of weights and activations,2021】)的做法,我们不在第一个和最后一个Transformer层中进行量化。
2. 高困惑度的token(如日期)可能导致较大的激活值。这反过来又会导致FP8中较高的动态缩放因子和不可忽略的下溢数量,从而导致解码错误。为解决此问题,我们将动态缩放因子的上限设为1200。
3. 我们使用行级量化,对参数和激活矩阵按行计算缩放因子(见图25)。我们发现这种方法比张量级量化方法效果更好。
量化误差的影响。标准基准上的评估通常表明,即使没有这些缓解措施,FP8推理的性能也与BF16推理相当。然而,我们发现这类基准不能充分反映FP8量化的影响。当缩放因子没有上限时,即使基准性能很强,模型偶尔也会产生损坏的响应。我们发现,与其依赖基准来衡量量化引起的分佈变化,不如分析使用FP8和BF16产生的100,000个响应的奖励模型分数分布。图26显示了我们量化方法得到的奖励分布。图中的结果表明,我们的FP8量化方法对模型的响应影响非常有限。
效率的实验评估。图27描绘了在预填充和解码阶段,使用4,096个输入token和256个输出token,使用Llama 3 405B进行FP8推理的吞吐量-延迟权衡。该图比较了FP8推理与第6.1节中描述的双机BF16推理方法的效率。结果显示,使用FP8推理在预填充阶段可带来高达50%的吞吐量提升,并在解码阶段提供了显著更优的吞吐量-延迟权衡。
Figure 25 张量级和行级FP8量化示意图。右:行级量化比左:张量级量化能使用更细粒度的激活因子。
Figure 26 Llama 3 405B使用BF16和FP8推理的奖励分数分布。我们的FP8量化方法对模型的响应影响微乎其微。
Figure 27 与使用不同流水线并行设置的BF16推理相比,Llama 3 405B进行FP8推理的吞吐量-延迟权衡。左:预填充结果。右:解码结果。
7 视觉实验
我们进行了一系列实验,通过一种由两个主要阶段组成的组合方法,将视觉识别能力整合到Llama 3中。首先,我们通过在预训练的图像编码器(【索引93,Demystifying clip data,2023,ArXiv】)和预训练的语言模型之间引入并训练一组交叉注意力层(【索引94,Flamingo: a visual language model for few-shot learning,2022,ArXiv】),在大量的图文对上进行训练,从而将两者组合起来。这产生了图28所示的模型。其次,我们引入了时间聚合层和额外的视频交叉注意力层,这些层在一个大型的视频-文本对集合上操作,以学习模型识别和处理视频中的时间信息。
Figure 28 我们在本文中研究的为Llama 3添加多模态能力的组合方法示意图。这种方法产生了一个分五个阶段训练的多模态模型:(1) 语言模型预训练,(2) 多模态编码器预训练,(3) 视觉适配器训练,(4) 模型微调,和 (5) 语音适配器训练。
7.1 数据
图像数据处理流程。我们的图像编码器和适配器在图文对上训练。我们通过一个复杂的数据处理流程构建此数据集,该流程包括四个主要阶段:(1) 质量过滤,(2) 感知去重,(3) 重采样,和 (4) 光学字符识别。我们还应用了一系列安全缓解措施。
* 质量过滤。我们实施质量过滤器,通过启发式方法(如【索引95,Learning transferable visual models from natural language supervision,2021,ICML】产生的低对齐分数)移除非英语标题和低质量标题。
* 去重。我们使用SSCD复制检测模型(【索引96,A self-supervised descriptor for image copy detection,2022,CVPR】)的内部版本对图像进行大规模去重,以提高效率和隐私。
* 重采样。我们通过类似于Xu等人(【索引93,Demystifying clip data,2023,ArXiv】);Mahajan等人(【索引97,Exploring the limits of weakly supervised pretraining,2018,ECCV】);Mikolov等人(【索引98,Efficient estimation of word representations in vector space,2013,ArXiv】)的重采样方法来确保图文对的多样性。
* 光学字符识别。我们通过一个专有的光学字符识别(OCR)流程提取图像中的书面文本,并将其与标题连接,进一步改进我们的图文数据。
* 文档转录。为了提高模型在文档理解任务上的性能,我们将文档页面渲染为图像,并将其与各自的文本配对。
* 安全性。我们主要关注确保图像识别的预训练数据集不包含不安全内容,如儿童性虐待材料(CSAM)。我们使用感知哈希方法(如PhotoDNA)和内部专有分类器扫描所有训练图像。我们还对训练集中的所有图像进行人脸模糊处理。
* 退火数据。我们通过使用n-gram重采样图文对,创建了一个约3.5亿样本的退火数据集。我们用来自五个额外来源的约1.5亿样本增强了结果数据,包括视觉定位、截图解析、问答对、合成标题和合成生成的结构化图像。
视频数据。对于视频预训练,我们使用一个大型的视频-文本对数据集。我们的数据集通过一个多阶段过程进行整理。我们使用基于规则的启发式方法过滤和清洗相关文本。然后,我们运行语言识别模型来过滤掉非英语文本。我们运行OCR检测模型来过滤掉带有过多覆盖文本的视频。为了确保视频-文本对之间的合理对齐,我们使用CLIP(【索引95,Learning transferable visual models from natural language supervision,2021,ICML】)风格的图文和视频-文本对比模型。我们的数据集包含平均时长21秒、中位时长16秒的视频。
7.2 模型架构
图像编码器。我们的图像编码器是一个标准的视觉变换器(ViT;【索引99,An image is worth 16x16 words: Transformers for image recognition at scale,2020,ArXiv】),训练用于对齐图像和文本(【索引93,Demystifying clip data,2023,ArXiv】)。我们使用ViT-H/14变体,该变体有6.3亿参数,在25亿图文对上训练了五个周期。为了缓解细粒度定位信息丢失的问题,我们采用了多层特征提取,即除了最后一层特征外,还提供了第4、8、16、24和31层的特征。此外,我们在交叉注意力层预训练之前,进一步插入了8个门控自注意力层(总共40个transformer块),以学习特定于对齐的特征。图像编码器最终总共有8.5亿参数。
图像适配器。我们在视觉编码器产生的视觉token表示和语言模型产生的token表示之间引入了交叉注意力层(【索引94,Flamingo: a visual language model for few-shot learning,2022,ArXiv】)。交叉注意力层在核心语言模型的每四个自注意力层之后应用。我们分两个阶段预训练我们的图像适配器:(1) 初始预训练,在约60亿图文对上进行;(2) 退火,在约5亿张来自退火数据集的图像上继续训练,并提高图像分辨率。
视频适配器。我们的模型输入最多64帧(从完整视频中均匀采样),每帧都由图像编码器处理。我们通过两个组件来建模视频中的时间结构:(i) 编码的视频帧由一个时间聚合器聚合,该聚合器将32个连续帧合并为一个;(ii) 在每四个图像交叉注意力层之前添加额外的视频交叉注意力层。时间聚合器实现为感知器重采样器(【索引100,Perceiver: General perception with iterative attention,2021,ArXiv】;【索引94,Flamingo: a visual language model for few-shot learning,2022,ArXiv】)。
7.3 模型扩展
大规模训练挑战。在Llama 3中添加视觉识别组件后,模型包含自注意力层、交叉注意力层和ViT图像编码器。在大规模训练适配器时,除了第3.3节中概述的挑战外,还引入了三个新挑战:模型异构性、数据异构性和数值不稳定性。
模型异构性。由于对某些token(图像token)执行的计算比其他token(文本token)多,模型计算是异构的。我们通过确保每个流水线阶段包含五个层(四个自注意力层和一个交叉注意力层)来解决这个问题。此外,我们在所有流水线阶段复制图像编码器,以实现图像和文本部分计算的负载均衡。
数据异构性。数据是异构的,因为平均而言,图像的token比相关文本多。因此,交叉注意力层的计算需要更多的时间和内存。我们通过在图像编码器中引入序列并行化来解决这个问题,以便每个GPU处理大致相同数量的token。
数值不稳定性。添加图像编码器后,我们发现在bf16中进行梯度累积会导致数值不稳定性。我们通过在FP32中进行梯度累积来解决这个问题。
7.4 预训练
图像预训练。我们从预训练的文本模型和视觉编码器权重初始化。视觉编码器被解冻,而文本模型权重保持冻结。首先,我们使用60亿个图文对训练模型,其中每个图像被调整大小以适应最多四个336×336像素的图块。我们使用16,384的全局批量大小和余弦学习率调度。在基础预训练之后,我们进一步增加图像分辨率,并在退火数据集上继续训练相同的权重。
视频预训练。对于视频预训练,我们从上述图像预训练和退火的权重开始。我们添加视频聚合器和交叉注意力层,并随机初始化。我们冻结模型中除视频特定参数(聚合器和视频交叉注意力)外的所有参数,并在视频预训练数据上训练它们。我们使用与图像退火阶段相同的训练超参数,学习率略有不同。
7.5 后训练
SFT数据。我们使用学术数据集、人类标注和合成数据进行监督微调。对于图像,我们使用LLM重写将学术数据集转换为问答对,收集多模态对话数据,并利用文本表示的图像生成合成数据。对于视频,我们使用学术数据集,并要求人类标注视频的问答对,重点是需要时间理解的问题。
SFT配方。我们从预训练的图像适配器初始化,但用指令调优的语言模型权重替换预训练的语言模型权重。语言模型权重保持冻结以维持纯文本性能。我们采用类似于Wortsman等人(【索引55,Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time,2022,ArXiv】)的方法,通过平均多个超参数搜索中表现最好的模型的权重来获得最终模型。对于视频SFT,我们仅微调视频相关参数。
偏好数据。我们构建了多模态成对偏好数据集,用于奖励建模和直接偏好优化。这包括人类标注的偏好数据、通过引入错误生成的合成偏好对,以及从拒绝采样过程中收集的负样本。
奖励建模。我们在视觉SFT模型和语言RM之上训练一个视觉奖励模型(RM)。视觉编码器和交叉注意力层从视觉SFT模型初始化并解冻,而自注意力层从语言RM初始化并保持冻结。我们使用人类偏好标注来训练视觉RM,并添加了一个加权的正则化项来防止奖励分数漂移。
直接偏好优化(DPO)。与语言模型类似,我们使用DPO进一步训练视觉适配器。我们发现,以指数移动平均(EMA)方式更新参考模型有助于模型从数据中学到更多,从而在人类评估中获得更好的性能。
拒绝采样。我们使用拒绝采样为缺乏思维链解释的问答对生成解释,以提升模型的推理能力。我们通过启发式方法或LLM裁判比较生成的答案与基准答案,并将正确的答案添加回微调数据混合中。
质量调优(QT)。我们整理了一个小而精选的SFT数据集,其中所有样本都经过人类或我们最好的模型重写和验证,以达到最高标准。我们用这些数据训练DPO模型以提高响应质量,这个过程称为质量调优(QT)。我们发现QT在不影响基准验证的泛化能力的情况下,显著改善了人类评估。
8 语音实验
我们研究了一种将语音能力集成到Llama 3中的组合方法,类似于我们用于视觉识别的方法。在输入端,一个编码器和一个适配器被整合进来处理语音信号。我们利用系统提示(文本形式)来启用Llama 3中不同的语音理解操作模式。如果未提供系统提示,模型将作为一个通用的口语对话模型,其响应方式与Llama 3的纯文本版本一致。我们还尝试了启用Llama 3进行自动语音识别(ASR)和自动语音翻译(AST)的系统提示。Llama 3的语音接口支持多达34种语言。
我们还试验了一种语音生成方法,其中我们实现了一个流式文本到语音(TTS)系统,该系统在语言模型解码期间即时生成语音波形。语音接口如图28和29所示。
Figure 29 Llama 3语音接口的架构。
8.1 数据
语音理解数据。训练数据分为两类。预训练数据包括大量未标记的语音,用于以自监督方式初始化语音编码器。监督微调数据包括语音识别、语音翻译和口语对话数据;这些数据用于在与大型语言模型集成时解锁特定能力。预训练数据约1500万小时语音,ASR训练数据包含23万小时,AST训练数据包含9万小时。口语对话数据则通过合成方式生成。
语音生成数据。语音生成数据集主要包括用于训练文本归一化(TN)模型和韵律模型(PM)的数据。TN训练数据集包括5.5万个样本,涵盖广泛的符号类别。PM训练数据包括从5万小时的TTS数据集中提取的语言和韵律特征。Llama 3的嵌入作为额外的输入特征被增强到这两种训练数据中,以提供上下文信息。
8.2 模型架构
语音理解架构。在输入端,语音模块由两个连续的模块组成:一个语音编码器和一个适配器。语音模块的输出直接作为token表示馈入语言模型,实现了语音和文本token之间的直接交互。语音编码器是一个拥有10亿参数的Conformer模型(【索引101,Conformer: Convolution-augmented transformer for speech recognition,2020,ArXiv】)。语音适配器包含约1亿参数,由卷积层、旋转Transformer层和线性层组成。
语音生成架构。我们在语音生成的两个关键组件中使用了Llama 3 8B的嵌入:文本归一化(TN)和韵律建模(PM)。TN模块通过上下文感知的方式将书面文本转换为口语形式,确保语义正确性。PM模块通过使用这些嵌入预测韵律特征,增强了自然性和表现力。TN系统包含一个流式LSTM序列标注模型。PM则是一个解码器-only的Transformer模型。
8.3 训练配方
语音理解训练。语音模块的训练分两个阶段完成。第一阶段是语音预训练,利用未标记数据训练一个语音编码器。第二阶段是监督微调,将适配器和预训练的编码器与语言模型集成,并在LLM保持冻结的情况下联合训练。为解决多语言ASR和AST建模中的语言混淆问题,我们设计了只包含目标端语言ID的系统提示,例如ASR用Repeat after me in {language}:,AST用Translate the following sentence into {language}:。语音预训练使用自监督的BEST-RQ算法(【索引102,Self-supervised learning with random-projection quantizer for speech recognition,2022,ICML】)。监督微调阶段,预训练的语音编码器和随机初始化的适配器与Llama 3联合优化,语言模型本身保持不变。
语音生成训练。为支持实时处理,韵律模型采用了一种前瞻机制,考虑固定数量的未来音素和可变数量的未来token。训练时,我们开发了一种利用因果掩码的动态对齐策略,以实现流式语音合成。Llama 3 8B模型的嵌入被用作输入,但在韵律模型训练期间保持冻结。在推理期间,采用相同的前瞻机制和因果掩码策略,以确保训练和实时处理之间的一致性。
A5 结论
在许多方面,高质量基础模型的开发仍处于起步阶段。我们在开发Llama 3过程中的经验表明,这些模型未来仍有巨大的改进空间。在整个Llama 3模型家族的开发过程中,我们发现,对高质量数据、规模和简单性的高度关注始终能带来最佳结果。在初步实验中,我们探索了更复杂的模型架构和训练配方,但并未发现这些方法带来的好处能超过它们在模型开发中引入的额外复杂性。
开发像Llama 3这样的旗舰基础模型,不仅需要克服众多深层次的技术问题,还需要巧妙的组织决策。例如,为确保Llama 3不会意外地在常用基准上过拟合,我们的预训练数据由一个独立的团队采购和处理,该团队被强烈激励以防止预训练数据被外部基准污染。另一个例子是,我们通过只允许一小部分不参与模型开发的研究人员执行和访问人类评估,来确保其可信度。虽然这些组织决策在技术论文中很少被讨论,但我们发现它们对Llama 3模型家族的成功开发至关重要。
我们分享了开发过程的细节,因为我们相信这会:(1) 帮助更广泛的研究社区理解基础模型开发的关键因素;(2) 为公众就基础模型未来的更知情辩论做出贡献。我们还分享了将多模态能力集成到Llama 3中的初步实验。虽然这些模型仍在积极开发中,尚未准备好发布,但我们希望尽早分享我们的结果能加速这一方向的研究。
根据本文中详细的安全分析得出的积极结果,我们公开发布了我们的Llama 3语言模型,以加速为众多社会相关用例开发AI系统,并使研究社区能够审视我们的模型,找出使这些模型更好、更安全的方法。我们相信,基础模型的公开发布在这些模型的负责任开发中扮演着关键角色,我们希望Llama 3的发布能鼓励整个行业拥抱开放、负责任的AGI开发之路。
A6 附录
Llama 3是Meta众多人员共同努力的成果。下面,我们列出了所有核心贡献者(在项目运行期间至少工作了2/3时间的人员)和贡献者(在项目运行期间至少工作了1/5时间的人员)。我们按名字首字母顺序列出所有贡献者。
核心贡献者
Aaron Grattafiori, Abhimanyu Dubey, Abhinav Jauhri, Abhinav Pandey, Abhishek Kadian, Ahmad Al-Dahle, Aiesha Letman, Akhil Mathur, Alan Schelten, Alex Vaughan, Amy Yang, Angela Fan, Anirudh Goyal, Anthony Hartshorn, Aobo Yang, Archi Mitra, Archie Sravankumar, Artem Korenev, Arthur Hinsvark, Arun Rao, Aston Zhang, Aurelien Rodriguez, Austen Gregerson, Ava Spataru, Baptiste Roziere, Bethany Biron, Binh Tang, Bobbie Chern, Charlotte Caucheteux, Chaya Nayak, Chloe Bi, Chris Marra, Chris McConnell, Christian Keller, Christophe Touret, Chunyang Wu, Corinne Wong, Cristian Canton Ferrer, Cyrus Nikolaidis, Damien Allonsius, Daniel Song, Danielle Pintz, Danny Livshits, Danny Wyatt, David Esiobu, Dhruv Choudhary, Dhruv Mahajan, Diego Garcia-Olano, Diego Perino, Dieuwke Hupkes, Egor Lakomkin, Ehab AlBadawy, Elina Lobanova, Emily Dinan, Eric Michael Smith, Filip Radenovic, Francisco Guzmán, Frank Zhang, Gabriel Synnaeve, Gabrielle Lee, Georgia Lewis Anderson, Govind Thattai, Graeme Nail, Gregoire Mialon, Guan Pang, Guillem Cucurell, Hailey Nguyen, Hannah Korevaar, Hu Xu, Hugo Touvron, Iliyan Zarov, Imanol Arrieta Ibarra, Isabel Kloumann, Ishan Misra, Ivan Evtimov, Jack Zhang, Jade Copet, Jaewon Lee, Jan Geffert, Jana Vranes, Jason Park, Jay Mahadeokar, Jeet Shah, Jelmer van der Linde, Jennifer Billock, Jenny Hong, Jenya Lee, Jeremy Fu, Jianfeng Chi, Jianyu Huang, Jiawen Liu, Jie Wang, Jiecao Yu, Joanna Bitton, Joe Spisak, Jongsoo Park, Joseph Rocca, Joshua Johnstun, Joshua Saxe, Junteng Jia, Kalyan Vasuden Alwala, Karthik Prasad, Kartikeya Upasani, Kate Plawiak, Ke Li, Kenneth Heafield, Kevin Stone, Khalid El-Arini, Krithika Iyer, Kshitiz Malik, Kuenley Chiu, Kunal Bhalla, Kushal Lakhotia, Lauren Rantala-Yeary, Laurens van der Maaten, Lawrence Chen, Liang Tan, Liz Jenkins, Louis Martin, Lovish Madaan, Lubo Malo, Lukas Blecher, Lukas Landzaat, Luke de Oliveira, Madeline Muzzi, Mahesh Pasupuleti, Mannat Singh, Manohar Paluri, Marcin Kardas, Maria Tsimpoukelli, Mathew Oldham, Mathieu Rita, Maya Pavlova, Melanie Kambadur, Mike Lewis, Min Si, Mitesh Kumar Singh, Mona Hassan, Naman Goyal, Narjes Torabi, Nikolay Bashlykov, Nikolay Bogoychev, Niladri Chatterji, Ning Zhang, Olivier Duchenne, Onur Çelebi, Patrick Alrassy, Pengchuan Zhang, Pengwei Li, Petar Vasic, Peter Weng, Prajjwal Bhargava, Pratik Dubal, Praveen Krishnan, Punit Singh Koura, Puxin Xu, Qing He, Qingxiao Dong, Ragavan Srinivasan, Raj Ganapathy, Ramon Calderer, Ricardo Silveira Cabral, Robert Stojnic, Roberta Raileanu, Rohan Maheswari, Rohit Girdhar, Rohit Patel, Romain Sauvestre, Ronnie Polidoro, Roshan Sumbaly, Ross Taylor, Ruan Silva, Rui Hou, Rui Wang, Saghar Hosseini, Sahana Chennabasappa, Sanjay Singh, Sean Bell, Seohyun Sonia Kim, Sergey Edunov, Shaoliang Nie, Sharan Narang, Sharath Raparthy, Sheng Shen, Shengye Wan, Shruti Bhosale, Shun Zhang, Simon Vandenhende, Soumya Batra, Spencer Whitman, Sten Sootla, Stephane Collot, Suchin Gururangan, Sydney Borodinsky, Tamar Herman, Tara Fowler, Tarek Sheasha, Thomas Georgiou, Thomas Scialom, Tobias Speckbacher, Todor Mihaylov, Tong Xiao, Ujjwal Karn, Vedanuj Goswami, Vibhor Gupta, Vignesh Ramanathan, Viktor Kerkez, Vincent Gonguet, Virginie Do, Vish Vogeti, Vítor Albiero, Vladan Petrovic, Weiwei Chu, Wenhan Xiong, Wenyin Fu, Whitney Meers, Xavier Martinet, Xiaodong Wang, Xiaofang Wang, Xiaoqing Ellen Tan, Xide Xia, Xinfeng Xie, Xuchao Jia, Xuewei Wang, Yaelle Goldschlag, Yashesh Gaur, Yasmine Babaei, Yi Wen, Yiwen Song, Yuchen Zhang, Yue Li, Yuning Mao, Zacharie Delpierre Coudert, Zheng Yan, Zhengxing Chen, and Zoe Papakipos.
贡献者
Aaditya Singh, Aayushi Srivastava, Abha Jain, Adam Kelsey, Adam Shajnfeld, Adithya Gangidi, Adolfo Victoria, Ahuva Goldstand, Ajay Menon, Ajay Sharma, Alex Boesenberg, Alexei Baevski, Allie Feinstein, Amanda Kallet, Amit Sangani, Amos Teo, Anam Yunus, Andrei Lupu, Andres Alvarado, Andrew Caples, Andrew Gu, Andrew Ho, Andrew Poulton, Andrew Ryan, Ankit Ramchandani, Annie Dong, Annie Franco, Anuj Goyal, Aparajita Saraf, Arkabandhu Chowdhury, Ashley Gabriel, Ashwin Bharambe, Assaf Eisenman, Azadeh Yazdan, Beau James, Ben Maurer, Benjamin Leonhardi, Bernie Huang, Beth Loyd, Beto De Paola, Bhargavi Paranjape, Bing Liu, Bo Wu, Boyu Ni, Braden Hancock, Bram Wasti, Brandon Spence, Brani Stojkovic, Brian Gamido, Britt Montalvo, Carl Parker, Carly Burton, Catalina Mejia, Ce Liu, Changhan Wang, Changkyu Kim, Chao Zhou, Chester Hu, Ching-Hsiang Chu, Chris Cai, Chris Tindal, Christoph Feichtenhofer, Cynthia Gao, Damon Civin, Dana Beaty, Daniel Kreymer, Daniel Li, David Adkins, David Xu, Davide Testuggine, Delia David, Devi Parikh, Diana Liskovich, Didem Foss, Dingkang Wang, Duc Le, Dustin Holland, Edward Dowling, Eissa Jamil, Elaine Montgomery, Eleonora Presani, Emily Hahn, Emily Wood, Eric-Tuan Le, Erik Brinkman, Esteban Arcaute, Evan Dunbar, Evan Smothers, Fei Sun, Felix Kreuk, Feng Tian, Filippos Kokkinos, Firat Ozgenel, Francesco Caggioni, Frank Kanayet, Frank Seide, Gabriela Medina Florez, Gabriella Schwarz, Gada Badeer, Georgia Swee, Gil Halpern, Grant Herman, Grigory Sizov, Guangyi (Jack) Zhang, Guna Lakshminarayanan, Hakan Inan, Hamid Shojanazeri, Han Zou, Hannah Wang, Hanwen Zha, Haroun Habeeb, Harrison Rudolph, Helen Suk, Henry Aspegren, Hunter Goldman, Hongyuan Zhan, Ibrahim Damlaj, Igor Molybog, Igor Tufanov, Ilias Leontiadis, Irina-Elena Veliche, Itai Gat, Jake Weissman, James Geboski, James Kohli, Janice Lam, Japhet Asher, Jean-Baptiste Gaya, Jeff Marcus, Jeff Tang, Jennifer Chan, Jenny Zhen, Jeremy Reizenstein, Jeremy Teboul, Jessica Zhong, Jian Jin, Jingyi Yang, Joe Cummings, Jon Carvill, Jon Shepard, Jonathan McPhie, Jonathan Torres, Josh Ginsburg, Junjie Wang, Kai Wu, Kam Hou U, Karan Saxena, Kartikay Khandelwal, Katayoun Zand, Kathy Matosich, Kaushik Veeraraghavan, Kelly Michelena, Keqian Li, Kiran Jagadeesh, Kun Huang, Kunal Chawla, Kyle Huang, Lailin Chen, Lakshya Garg, Lavender A, Leandro Silva, Lee Bell, Lei Zhang, Liangpeng Guo, Licheng Yu, Liron Moshkovich, Luca Wehrstedt, Madian Khabsa, Manav Avalani, Manish Bhatt, Martynas Mankus, Matan Hasson, Matthew Lennie, Matthias Reso, Maxim Groshev, Maxim Naumov, Maya Lathi, Meghan Keneally, Miao Liu, Michael L. Seltzer, Michal Valko, Michelle Restrepo, Mihir Patel, Mik Vyatskov, Mikayel Samvelyan, Mike Clark, Mike Macey, Mike Wang, Miquel Jubert Hermoso, Mo Metanat, Mohammad Rastegari, Munish Bansal, Nandhini Santhanam, Natascha Parks, Natasha White, Navyata Bawa, Nayan Singhal, Nick Egebo, Nicolas Usunier, Nikhil Mehta, Nikolay Pavlovich Laptev, Ning Dong, Norman Cheng, Oleg Chernoguz, Olivia Hart, Omkar Salpekar, Ozlem Kalinli, Parkin Kent, Parth Parekh, Paul Saab, Pavan Balaji, Pedro Rittner, Philip Bontrager, Pierre Roux, Piotr Dollar, Polina Zvyagina, Prashant Ratanchandani, Pritish Yuvraj, Qian Liang, Rachad Alao, Rachel Rodriguez, Rafi Ayub, Raghotham Murthy, Raghu Nayani, Rahul Mitra, Rangaprabhu Parthasarathy, Raymond Li, Rebekkah Hogan, Robin Battey, Rocky Wang, Russ Howes, Ruty Rinott, Sachin Mehta, Sachin Siby, Sai Jayesh Bondu, Samyak Datta, Sara Chugh, Sara Hunt, Sargun Dhillon, Sasha Sidorov, Satadru Pan, Saurabh Mahajan, Saurabh Verma, Seiji Yamamoto, Sharadh Ramaswamy, Shaun Lindsay, Shaun Lindsay, Sheng Feng, Shenghao Lin, Shengxin Cindy Zha, Shishir Patil, Shiva Shankar, Shuqiang Zhang, Shuqiang Zhang, Sinong Wang, Sneha Agarwal, Soji Sajuyigbe, Soumith Chintala, Stephanie Max, Stephen Chen, Steve Kehoe, Steve Satterfield, Sudarshan Govindaprasad, Sumit Gupta, Summer Deng, Sungmin Cho, Sunny Virk, Suraj Subramanian, Sy Choudhury, Sydney Goldman, Tal Remez, Tamar Glaser, Tamara Best, Thilo Koehler, Thomas Robinson, Tianhe Li, Tianjun Zhang, Tim Matthews, Timothy Chou, Tzook Shaked, Varun Vontimitta, Victoria Ajayi, Victoria Montanez, Vijai Mohan, Vinay Satish Kumar, Vishal Mangla, Vlad Ionescu, Vlad Poenaru, Vlad Tiberiu Mihailescu, Vladimir Ivanov, Wei Li, Wenchen Wang, Wenwen Jiang, Wes Bouaziz, Will Constable, Xiaocheng Tang, Xiaojian Wu, Xiaolan Wang, Xilun Wu, Xinbo Gao, Yaniv Kleinman, Yanjun Chen, Ye Hu, Ye Jia, Ye Qi, Yenda Li, Yilin Zhang, Ying Zhang, Yossi Adi, Youngjin Nam, Yu (Sid) Wang, Yu Zhao, Yuchen Hao, Yundi Qian, Yunlu Li, Yuzi He, Zach Rait, Zachary DeVito, Zef Rosnbrick, Zhaoduo Wen, Zhenyu Yang, Zhiwei Zhao, Zhiyu Ma.
方法细节中引用的参考文献
-
【1, Rafailov et al. (2024), Direct preference optimization: Your language model is secretly a reward model, 2024, Advances in Neural Information Processing Systems】
- 引用位置: 2 General Overview, 4 Post-Training, 4.1.4 Direct Preference Optimization
- 引用描述: 描述了后训练中使用的直接偏好优化(DPO)方法。
-
【2, Broder (1997), On the resemblance and containment of documents, 1997, Proceedings. Compression and Complexity of SEQUENCES 1997】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 描述了文档级去重使用的全局MinHash方法。
-
【3, Wenzek et al. (2019), Ccnet: Extracting high quality monolingual datasets from web crawl data, 2019, ArXiv】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 描述了行级去重所参考的ccNet方法。
-
【4, Rae et al. (2021), Scaling language models: Methods, analysis & insights from training gopher, 2021, ArXiv】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 描述了启发式过滤中使用的重复n-gram覆盖率方法。
-
【5, Raffel et al. (2020), Exploring the limits of transfer learning with a unified text-to-text transformer, 2020, Journal of machine learning research】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 描述了启发式过滤中使用的“脏词”计数方法。
-
【6, Joulin et al. (2017), Bag of tricks for efficient text classification, 2017, EACL】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 描述了模型质量过滤中使用的fasttext分类器。
-
【7, Touvron et al. (2023a), Llama: Open and efficient foundation language models, 2023, ArXiv】
- 引用位置: 3.1.1 Web Data Curation, 3.2 Model Architecture
- 引用描述: 描述了模型质量过滤中参考维基百科引用的方法,并作为Llama 3模型架构的比较基准。
-
【8, Liu et al. (2019a), Roberta: A robustly optimized bert pretraining approach, 2019, ArXiv】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 描述了模型质量过滤中使用的Roberta-based分类器。
-
【9, Sanh et al. (2019), Distilbert, a distilled version of bert: smaller, faster, cheaper and lighter, 2019, ArXiv】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 描述了用于生成质量分数的DistilRoberta模型。
-
【10, DeepSeek-AI et al. (2024), Deepseek-coder-v2: Breaking the barrier of closed-source models in code intelligence, 2024, ArXiv】
- 引用位置: 3.1.1 Web Data Curation
- 引用描述: 作为构建代码和数学相关领域特定管道的参考。
-
【11, Li et al. (2024b), Datacomp-lm: In search of the next generation of training sets for language models, 2024, ArXiv】
- 引用位置: 3.1.3 Annealing Data
- 引用描述: 作为数据退火中上采样高质量数据方法的参考。
-
【12, OpenAI (2023a), Gpt-4 technical report, 2023, ArXiv】
- 引用位置: 3.1.3 Annealing Data
- 引用描述: 作为在GSM8k和MATH训练集上进行退火评估的参考。
-
【13, Cobbe et al. (2021), Training verifiers to solve math word problems, 2021, ArXiv】
- 引用位置: 3.1.3 Annealing Data
- 引用描述: 提及GSM8k数据集。
-
【14, Hendrycks et al. (2021b), Measuring mathematical problem solving with the MATH dataset, 2021, NeurIPS Datasets and Benchmarks】
- 引用位置: 3.1.3 Annealing Data
- 引用描述: 提及MATH数据集。
-
【15, Blakeney et al. (2024), Does your data spark joy? performance gains from domain upsampling at the end of training, 2024, ArXiv】
- 引用位置: 3.1.3 Annealing Data
- 引用描述: 作为使用退火来判断小数据集价值的参考。
-
【16, Vaswani et al. (2017), Attention is all you need, 2017, Advances in Neural Information Processing Systems】
- 引用位置: 3.2 Model Architecture
- 引用描述: 描述了Llama 3使用的标准密集Transformer架构。
-
【17, Touvron et al. (2023b), Llama 2: Open foundation and fine-tuned chat models, 2023, ArXiv】
- 引用位置: 3.2 Model Architecture
- 引用描述: 作为Llama 3模型架构的比较基准。
-
【18, Ainslie et al. (2023), Gqa: Training generalized multi-query transformer models from multi-head checkpoints, 2023, ArXiv】
- 引用位置: 3.2 Model Architecture, 3.3.2 Parallelism for Model Scaling
- 引用描述: 描述了使用的分组查询注意力(GQA)技术。
-
【19, Xiong et al. (2023), Effective long-context scaling of foundation models, 2023, ArXiv】
- 引用位置: 3.2 Model Architecture
- 引用描述: 证明了RoPE基础频率超参数值的有效性。
-
【20, Hoffmann et al. (2022), Training compute-optimal large language models, 2022, ArXiv】
- 引用位置: 3.2.1 Scaling Laws
- 引用描述: 作为开发缩放法则的参考。
-
【21, Kaplan et al. (2020), Scaling laws for neural language models, 2020, ArXiv】
- 引用位置: 3.2.1 Scaling Laws
- 引用描述: 作为开发缩放法则的参考。
-
【22, Wei et al. (2022b), Emergent abilities of large language models, 2022, TMLR】
- 引用位置: 3.2.1 Scaling Laws
- 引用描述: 指出缩放法则可能因基于小计算预算而不可靠。
-
【23, Lee and Sengupta (2022), Introducing the AI Research SuperCluster — Meta’s cutting-edge AI supercomputer for AI research, 2022, Meta AI Blog】
- 引用位置: 3.3.1 Training Infrastructure
- 引用描述: 提及Llama 1和2的训练集群。
-
【24, Lee et al. (2024), Building meta’s genai infrastructure, 2024】
- 引用位置: 3.3.1 Training Infrastructure
- 引用描述: 提及Llama 3的训练集群和网络拓扑。
-
【25, Matt Bowman (2022), Meta open compute project, grand teton ai platform, 2022, Meta Engineering Blog】
- 引用位置: 3.3.1 Training Infrastructure
- 引用描述: 提及使用的Grand Teton AI服务器平台。
-
【26, Choudhury et al. (2024), MAST: Global scheduling of ml training across geo-distributed datacenters at hyperscale, 2024, OSDI】
- 引用位置: 3.3.1 Training Infrastructure, 3.3.1 Network topology
- 引用描述: 提及使用的MAST训练调度器。
-
【27, Pan et al. (2021), Facebook’s tectonic filesystem: Efficiency from exascale, 2021, FAST】
- 引用位置: 3.3.1 Training Infrastructure
- 引用描述: 提及使用的Tectonic分布式文件系统。
-
【28, Battey and Gupta (2024), Training llama: A storage perspective, 2024, @Scale Conference】
- 引用位置: 3.3.1 Training Infrastructure
- 引用描述: 提及为Llama 3预训练构建的存储结构。
-
【29, Gangidi et al. (2024), RDMA over Ethernet for Distributed AI Training at Meta Scale, 2024, SIGCOMM】
- 引用位置: 3.3.1 Congestion control
- 引用描述: 提及在骨干交换机中使用深缓冲交换机。
-
【30, Krizhevsky et al. (2012), Imagenet classification with deep convolutional neural networks, 2012, NIPS】
- 引用位置: 3.3.2 Parallelism for Model Scaling
- 引用描述: 作为张量并行(TP)的参考文献。
-
【31, Shoeybi et al. (2019), Megatron-lm: Training multi-billion parameter language models using model parallelism, 2019, ArXiv】
- 引用位置: 3.3.2 Parallelism for Model Scaling, 6.1 Pipeline Parallelism
- 引用描述: 作为张量并行(TP)的参考文献。
-
【32, Korthikanti et al. (2023), Reducing activation recomputation in large transformer models, 2023, MLSys】
- 引用位置: 3.3.2 Parallelism for Model Scaling
- 引用描述: 作为张量并行(TP)的参考文献。
-
【33, Huang et al. (2019), Gpipe: Efficient training of giant neural networks using pipeline parallelism, 2019】
- 引用位置: 3.3.2 Parallelism for Model Scaling, 6.1 Pipeline Parallelism
- 引用描述: 作为流水线并行(PP)的参考文献。
-
【34, Narayanan et al. (2021), Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM, 2021, SC】
- 引用位置: 3.3.2 Parallelism for Model Scaling, 3.3.2 Pipeline parallelism improvements
- 引用描述: 作为流水线并行(PP)及其深度优先调度(DFS)和交错调度的参考文献。
-
【35, Lamy-Poirier (2023), Breadth-first pipeline parallelism, 2023, MLSys】
- 引用位置: 3.3.2 Parallelism for Model Scaling, 3.3.2 Pipeline parallelism improvements
- 引用描述: 作为流水线并行(PP)及其广度优先调度(BFS)的参考文献。
-
【36, Liu et al. (2023a), Ring attention with blockwise transformers for near-infinite context, 2023, ArXiv】
- 引用位置: 3.3.2 Parallelism for Model Scaling, 3.3.2 Context parallelism for long sequences
- 引用描述: 作为上下文并行(CP)的参考文献。
-
【37, Rajbhandari et al. (2020), Zero: Memory optimizations toward training trillion parameter models, 2020, ArXiv】
- 引用位置: 3.3.2 Parallelism for Model Scaling
- 引用描述: 作为完全分片数据并行(FSDP)的参考文献。
-
【38, Ren et al. (2021), Zero-offload: Democratizing billion-scale model training, 2021, ArXiv】
- 引用位置: 3.3.2 Parallelism for Model Scaling
- 引用描述: 作为完全分片数据并行(FSDP)的参考文献。
-
【39, Zhao et al. (2023b), Pytorch fsdp: Experiences on scaling fully sharded data parallel, 2023, ArXiv】
- 引用位置: 3.3.2 Parallelism for Model Scaling
- 引用描述: 作为完全分片数据并行(FSDP)的参考文献。
-
【40, Chowdhery et al. (2023), Palm: Scaling language modeling with pathways, 2023, JMLR】
- 引用位置: 3.3.2 GPU utilization
- 引用描述: 提及模型FLOPs利用率(MFU)的定义。
-
【41, Vigraham and Leonhardi (2024), Maintaining large-scale ai capacity at meta, 2024】
- 引用位置: 3.3.4 Reliability and Operational Challenges
- 引用描述: 提及自动化集群维护,如固件和内核升级。
-
【42, Ansel et al. (2024), Pytorch 2: Faster machine learning through dynamic python bytecode transformation and graph compilation, 2024, ASPLOS】
- 引用位置: 3.3.4 Reliability and Operational Challenges
- 引用描述: 提及使用的PyTorch内置NCCL飞行记录器。
-
【43, Tang et al. (2015), Holistic Configuration Management at Facebook, 2015, SOSP】
- 引用位置: 3.3.4 Reliability and Operational Challenges
- 引用描述: 提及在线配置更改技术。
-
【44, Polyak (1991), New stochastic approximation type procedures, 1991, Automation and Remote Control】
- 引用位置: 3.4.3 Annealing
- 引用描述: 提及模型检查点平均法(Polyak averaging)。
-
【45, Ouyang et al. (2022), Training language models to follow instructions with human feedback, 2022, ArXiv】
- 引用位置: 1 Introduction, 4 Post-Training
- 引用描述: 描述了通过人类反馈对齐模型的方法。
-
【46, Rafailov et al. (2023), Direct preference optimization: Your language model is secretly a reward model, 2023, NeurIPS】
- 引用位置: 1 Introduction, 4 Post-Training, 4.1.4 Direct Preference Optimization, 7.5.5 Direct Preference Optimization
- 引用描述: 描述了后训练中使用的直接偏好优化(DPO)方法。
-
【47, Wei et al. (2022a), Finetuned language models are zero-shot learners, 2022, ICLR】
- 引用位置: 4.1.3 Supervised Finetuning, 4.3.2 Multilingual data collection
- 引用描述: 作为监督微调(SFT)和多语言模板的参考文献。
-
【48, Sanh et al. (2022), Multitask prompted training enables zero-shot task generalization, 2022, ICLR】
- 引用位置: 4.1.3 Supervised Finetuning
- 引用描述: 作为监督微调(SFT)的参考文献。
-
【49, Wang et al. (2022b), Super-naturalinstructions: Generalization via declarative instructions on 1600+ nlp tasks, 2022, EMNLP】
- 引用位置: 4.1.3 Supervised Finetuning
- 引用描述: 作为监督微调(SFT)的参考文献。
-
【50, Schulman et al. (2017), Proximal policy optimization algorithms, 2017, ArXiv】
- 引用位置: 1 Introduction, 4.1.4 Direct Preference Optimization
- 引用描述: 提及PPO算法作为DPO的对比。
-
【51, Zhou et al. (2023), Instruction-following evaluation for large language models, 2023, ArXiv】
- 引用位置: 4.1.4 Direct Preference Optimization
- 引用描述: 提及IFEval指令遵循基准。
-
【52, Pang et al. (2024), Iterative reasoning preference optimization, 2024, ArXiv】
- 引用位置: 4.1.4 Direct Preference Optimization
- 引用描述: 作为DPO中添加NLL损失正则化项的参考。
-
【53, Pal et al. (2024), Smaug: Fixing failure modes of preference optimisation with dpo-positive, 2024, ArXiv】
- 引用位置: 4.1.4 Direct Preference Optimization
- 引用描述: 作为DPO中防止选择响应对数概率下降的参考。
-
【54, Izmailov et al. (2019), Averaging weights leads to wider optima and better generalization, 2019, ArXiv】
- 引用位置: 4.1.5 Model Averaging
- 引用描述: 作为模型平均的参考文献。
-
【55, Wortsman et al. (2022), Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time, 2022, ArXiv】
- 引用位置: 4.1.5 Model Averaging, 7.5.2 Supervised Finetuning Recipe
- 引用描述: 作为模型平均和视觉SFT配方的参考文献。
-
【56, Li et al. (2022), Branch-train-merge: Embarrassingly parallel training of expert language models, 2022, ArXiv】
- 引用位置: 4.1.5 Model Averaging
- 引用描述: 作为模型平均的参考文献。
-
【57, Bai et al. (2022), Constitutional AI: harmlessness from AI feedback, 2022, ArXiv】
- 引用位置: 4.2.2 Rejection sampling
- 引用描述: 作为拒绝采样中选择最佳候选者方法的参考。
-
【58, Kwon et al. (2023), Efficient memory management for large language model serving with pagedattention, 2023】
- 引用位置: 4.2.2 Rejection sampling
- 引用描述: 提及用于提高拒绝采样效率的PagedAttention技术。
-
【59, Lu et al. (2023), Instag: Instruction tagging for analyzing supervised fine-tuning of large language models, 2023】
- 引用位置: 4.2.3 Data pruning
- 引用描述: 提及用于数据难度评分的Instag方法。
-
【60, Liu et al. (2024c), What makes good data for alignment? a comprehensive study of automatic data selection in instruction tuning, 2024, ArXiv】
- 引用位置: 4.2.3 Difficulty scoring, 4.2.3 Semantic deduplication
- 引用描述: 作为难度评分和语义去重的参考。
-
【61, Abbas et al. (2023), Semdedup: Data-efficient learning at web-scale through semantic deduplication, 2023, ArXiv】
- 引用位置: 4.2.3 Semantic deduplication, 7.1.1 De-duplication
- 引用描述: 作为语义去重的参考。
-
【62, Liu et al. (2019b), Roberta: A robustly optimized BERT pretraining approach, 2019, ArXiv】
- 引用位置: 4.2.3 Semantic deduplication
- 引用描述: 提及用于聚类对话的RoBERTa模型。
-
【63, Chen et al. (2021), Evaluating large language models trained on code, 2021, ArXiv】
- 引用位置: 4.3.1 Code
- 引用描述: 提及LLM用于代码的开创性工作Codex。
-
【64, Gururangan et al. (2020), Don’t stop pretraining: Adapt language models to domains and tasks, 2020, ACL】
- 引用位置: 4.3.1 Expert training
- 引用描述: 证明了在特定领域数据上继续预训练的有效性。
-
【65, Rozière et al. (2023), Code llama: Open foundation models for code, 2023, ArXiv】
- 引用位置: 4.3.1 Expert training
- 引用描述: 作为训练代码专家的配方参考。
-
【66, Wei et al. (2024), Magicoder: Empowering code generation with oss-instruct, 2024, ArXiv】
- 引用位置: 4.3.1 Problem description generation
- 引用描述: 提及通过从代码片段生成问题描述来获得多样性。
-
【67, Chen et al. (2023), Breaking language barriers in multilingual mathematical reasoning: Insights and observations, 2023, ArXiv】
- 引用位置: 4.3.1 Synthetic data generation: programming language translation
- 引用描述: 作为通过翻译增强不常见语言数据的参考。
-
【68, Hardalov et al. (2020), EXAMS: A multi-subject high school examinations dataset for cross-lingual and multilingual question answering, 2020, EMNLP】
- 引用位置: 4.3.2 Multilingual data collection
- 引用描述: 提及用于扩充多语言SFT数据的exams-qa数据集。
-
【69, Wu et al. (2023), Conic10k: A challenging math problem understanding and reasoning dataset, 2023, ArXiv】
- 引用位置: 4.3.2 Multilingual data collection
- 引用描述: 提及用于扩充多语言SFT数据的Conic10k数据集。
-
【70, Prokopidis et al. (2016), Parallel global voices: a collection of multilingual corpora with citizen media stories, 2016, LREC】
- 引用位置: 4.3.2 Multilingual data collection
- 引用描述: 提及用于改善语言对齐的GlobalVoices平行文本。
-
【71, Tiedemann (2012), Parallel data, tools and interfaces in opus, 2012, LREC】
- 引用位置: 4.3.2 Multilingual data collection
- 引用描述: 提及用于改善语言对齐的Wikimedia平行文本。
-
【72, Seamless Communication et al. (2023), Seamlessm4t—massively multilingual & multimodal machine translation, 2023, ArXiv】
- 引用位置: 4.3.2 Multilingual data collection
- 引用描述: 提及用于移除低质量数据的Blaser2.0。
-
【73, Bizzoni et al. (2020), How human is machine translationese? comparing human and machine translations of text and speech, 2020, IWSLT】
- 引用位置: 4.3.2 Translated data
- 引用描述: 提及避免使用机器翻译数据以防止“翻译腔”。
-
【74, Muennighoff et al. (2023), Crosslingual generalization through multitask finetuning, 2023, ACL】
- 引用位置: 4.3.2 Translated data
- 引用描述: 提及避免使用机器翻译数据以防止“翻译腔”。
-
【75, Wang et al. (2022a), Measuring and mitigating name biases in neural machine translation, 2022, ACL】
- 引用位置: 4.3.2 Translated data
- 引用描述: 提及避免机器翻译可能导致的名字偏见。
-
【76, Savoldi et al. (2021), Gender Bias in Machine Translation, 2021, TACL】
- 引用位置: 4.3.2 Translated data
- 引用描述: 提及避免机器翻译可能导致的性别偏见。
-
【77, Ji et al. (2023), Cultural and Linguistic Bias of Neural Machine Translation Technology, 2023, Cambridge University Press】
- 引用位置: 4.3.2 Translated data
- 引用描述: 提及避免机器翻译可能导致的文化偏见。
-
【78, Shi et al. (2022), Language models are multilingual chain-of-thought reasoners, 2022, ArXiv】
- 引用位置: 4.3.2 Translated data
- 引用描述: 提及MGSM多语言数学推理基准。
-
【79, Lightman et al. (2023), Let’s verify step by step, 2023, ArXiv】
- 引用位置: 4.3.3 Filtering incorrect reasoning traces
- 引用描述: 作为训练结果和逐步奖励模型以过滤不正确推理的参考。
-
【80, Wang et al. (2023a), Math-shepherd: Verify and reinforce llms step-by-step without human annotations, 2023, ArXiv】
- 引用位置: 4.3.3 Filtering incorrect reasoning traces
- 引用描述: 作为训练结果和逐步奖励模型以过滤不正确推理的参考。
-
【81, Gou et al. (2023), Tora: A tool-integrated reasoning agent for mathematical problem solving, 2023, ArXiv】
- 引用位置: 4.3.3 Interleaving code and text reasoning
- 引用描述: 作为通过代码和文本交错解决推理问题的参考。
-
【82, An et al. (2023b), Learning from mistakes makes llm better reasoner, 2023, ArXiv】
- 引用位置: 4.3.3 Learning from feedback and mistakes
- 引用描述: 作为通过错误纠正从反馈中学习的参考。
-
【83, Welleck et al. (2022), Generating sequences by learning to self-correct, 2022, ArXiv】
- 引用位置: 4.3.3 Learning from feedback and mistakes
- 引用描述: 作为通过错误纠正从反馈中学习的参考。
-
【84, Madaan et al. (2024a), Self-refine: Iterative refinement with self-feedback, 2024, NeurIPS】
- 引用位置: 4.3.3 Learning from feedback and mistakes
- 引用描述: 作为通过错误纠正从反馈中学习的参考。
-
【85, Schick et al. (2024), Toolformer: Language models can teach themselves to use tools, 2024, NeurIPS】
- 引用位置: 4.3.5 Data collection
- 引用描述: 作为工具使用数据收集方法的对比。
-
【86, Yao et al. (2022), React: Synergizing reasoning and acting in language models, 2210, ArXiv】
- 引用位置: 4.3.5 Multi-step tool use
- 引用描述: 提及ReAct方法作为生成交错推理和工具调用解决方案的参考。
-
【87, Kocetkov et al. (2022), The stack: 3 tb of permissively licensed source code, 2022, ArXiv】
- 引用位置: 4.3.5 Single, nested, and parallel function calling
- 引用描述: 提及The Stack数据集,用于挖掘真实函数以生成合成用户查询。
-
【88, Li et al. (2023b), Api-bank: A comprehensive benchmark for tool-augmented llms, 2023, ArXiv】
- 引用位置: 4.3.5 Multi-turn function calling
- 引用描述: 作为生成多轮函数调用合成数据协议的参考。
-
【89, Gekhman et al. (2024), Does fine-tuning llms on new knowledge encourage hallucinations?, 2024】
- 引用位置: 4.3.6 Factuality
- 引用描述: 提及“后训练应使模型知道它所知道的,而非增加知识”的原则。
-
【90, Mielke et al. (2020), Linguistic calibration through metacognition: aligning dialogue agent responses with expected correctness, 2020, ArXiv】
- 引用位置: 4.3.6 Factuality
- 引用描述: 提及“后训练应使模型知道它所知道的,而非增加知识”的原则。
-
【91, Xiao et al. (2024b), Smoothquant: Accurate and efficient post-training quantization for large language models, 2024】
- 引用位置: 6.2 FP8 Quantization
- 引用描述: 作为使用动态缩放因子以获得更好量化准确性的参考。
-
【92, Zhang et al. (2021), Training deep neural networks with joint quantization and pruning of weights and activations, 2021】
- 引用位置: 6.2 FP8 Quantization
- 引用描述: 作为不在第一和最后一个Transformer层进行量化的参考。
-
【93, Xu et al. (2023), Demystifying clip data, 2023, ArXiv】
- 引用位置: 7 Vision Experiments, 7.1.1 Resampling, 7.2 Image encoder
- 引用描述: 作为训练图像编码器对齐图像和文本以及重采样方法的参考。
-
【94, Alayrac et al. (2022), Flamingo: a visual language model for few-shot learning, 2022, ArXiv】
- 引用位置: 7 Vision Experiments, 7.2 Image adapter, 7.2 Video adapter
- 引用描述: 作为引入交叉注意力层连接视觉和语言模块以及视频时间聚合器(Perceiver Resampler)的参考。
-
【95, Radford et al. (2021), Learning transferable visual models from natural language supervision, 2021, ICML】
- 引用位置: 7.1.1 Quality filtering, 7.1.2 Video Data
- 引用描述: 提及CLIP模型用于质量过滤和视频-文本对齐。
-
【96, Pizzi et al. (2022), A self-supervised descriptor for image copy detection, 2022, CVPR】
- 引用位置: 7.1.1 De-duplication
- 引用描述: 提及用于图像去重的SSCD复制检测模型。
-
【97, Mahajan et al. (2018), Exploring the limits of weakly supervised pretraining, 2018, ECCV】
- 引用位置: 7.1.1 Resampling
- 引用描述: 作为重采样方法的参考。
-
【98, Mikolov et al. (2013), Efficient estimation of word representations in vector space, 2013, ArXiv】
- 引用位置: 7.1.1 Resampling
- 引用描述: 作为重采样方法的参考。
-
【99, Dosovitskiy et al. (2020), An image is worth 16x16 words: Transformers for image recognition at scale, 2020, ArXiv】
- 引用位置: 7.2 Image encoder
- 引用描述: 提及使用的ViT(Vision Transformer)架构。
-
【100, Jaegle et al. (2021), Perceiver: General perception with iterative attention, 2021, ArXiv】
- 引用位置: 7.2 Video adapter
- 引用描述: 提及视频时间聚合器中使用的Perceiver Resampler。
-
【101, Gulati et al. (2020), Conformer: Convolution-augmented transformer for speech recognition, 2020, ArXiv】
- 引用位置: 8.2.1 Speech encoder
- 引用描述: 提及语音编码器使用的Conformer模型。
-
【102, Chiu et al. (2022), Self-supervised learning with random-projection quantizer for speech recognition, 2022, ICML】
- 引用位置: 8.3.1 Speech pre-training
- 引用描述: 提及语音预训练使用的BEST-RQ自监督算法。
💬 评论讨论
欢迎在这里分享您的想法和见解!