本系列目录

《带你自学大语言模型》系列部分目录及计划,完整版目录见:带你自学大语言模型系列 —— 前言

第一部分 走进大语言模型(科普向)

  • 第一章 走进大语言模型

… …

第二部分 构建大语言模型(技术向)

  • 第二章 基础知识
  • 第三章 预训练

… …

欢迎关注同名公众号【陌北有棵树】,关注AI最新技术与资讯。

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_服务器

写在前面

上周LLM圈的大事件,莫过于LLaMa 3.1和 Mistral Large 2这两个开源模型的发布。先是 Meta 发布LLaMa 3.1系列开源模型,包括 8B、70B和405B三个版本,在多项基准测试中,LLaMa 3.1 405B甚至可以超越闭源模型 GPT-4o和Claude 3.5 Sonnet。

随后,Mistral发布 Mistral Large 2,1230 亿个参数,只有LLaMa 3.1 405B的1/3,但是在代码生成、数学和推理方面与 CPT-4 和 LLaMa 不相上下。

要说性能提升,早已激不起大家的热情,毕竟这一年里,每隔一段时间SOTA模型就易主一次,大家早都看麻了… 这次让大家振奋的是,开源模型首次做到了与闭源LLM不相上下,甚至更胜一筹。

开源和闭源不是技术之争,而是商业模式之争。只要钱、卡、人三要素齐备,开源也可以比闭源好,况且现在的开源也不是真正意义的开源。李彦宏和扎克伯格的所有言论,也都是屁股决定脑袋,大家听听就好,不要过于较真,有自己的判断就好。

本节目录

  • 2.2.1 LLaMa3 几个关键点
  • 2.2.2 技术报告组成结构
  • 2.2.3 LLaMa3 模型概述
  • 2.2.4 预训练阶段
  • 2.2.4.1 数据
  • 2.2.4.2 模型结构
  • 2.2.4.3 基础设施
  • 2.2.5 后训练阶段
  • 2.2.5.1 数据
  • 2.2.5.2 模型
  • 2.2.5.3 模型能力增强

2.2.1 LLaMa 3 的几个思考点

1、405B大模型的作用不仅仅在于提供服务,还将成为微调和蒸馏较小模型的最佳选择,同时也可以为训练小模型生产数据。前OpenAI创始成员 Andrej Karpathy在评价GPT-4o Mini时也发表过类似观点:“模型必须先变大,然后才能变小。因为我们需要它们(自动)帮助重构训练数据,使其成为理想的、合成的格式。”

2、合成数据的重要程度日渐增强。尤其是在后训练的有监督微调阶段,在朝着合成数据占主导的趋势演进。在技术报告的「4.3 能力增强 」章节,会看到很多地方采用了合成数据。

3、LLaMa 3.1 405B 并没有像之前大家预想的使用 MOE架构,这主要是出于模型稳定性的权衡。当前采用MOE架构,大多是出于效率和成本的考量。在报告「9.1 Language」章节有提到,Llama 3的性能优于MOE模型,表明密集架构并不是模型能力的限制因素,但在训练和推理效率以及大规模模型稳定性方面仍然存在许多权衡。(但随后发布的Mistral Large 2 让这点有些存疑,后续继续观察…)

4、目前看来,405B部署成本高,速度一般。随后发布Mistral Large 2也侧面说明了这一点,用不到三分之一的参数量性能就可以媲美Llama 3.1 405B,也不逊于GPT-4o、Claude 3 Opus等闭源模型,说明LLaMa还有优化空间。

5、模型量化或许会成为未来新趋势,报告中也提到了将模型从BF16量化至FP8,让405B模型能够在单一服务器节点内运行,提升405B模型的实用性。

LLaMa 3 还随之公开了一篇长达92页的技术报告,这篇报告含金量极高,可以说是详细介绍了当前最领先的大模型的构建过程。

AI2的研究员Nathan Lambert估计,这份90页的Llama 3.1论文,将直接把开源模型的进展往前推上3-9个月。

同时,这篇技术报告,几乎涵盖了LLM构建过程中涉及的所有技术。正好借着解读这篇报告,以LLaMa 3为例,再次梳理LLM构建过程中涉及的关键技术。

本篇报告涉及的技术点,后续都会按照专题分别进行详细介绍和横向对比,主要是我看到新模型的技术报告就忍不住盘一下,所以加更了本篇😂😂。

2.2.2 技术报告组成结构

【1】Introduction:先对LLaMa 3.1 做了简要介绍,包括模型的2个训练阶段;在训练过程中着重关注的三个因素:数据、规模、复杂性管理;以及LLaMa 3.1的性能评估简介。

【2】General Overview:对预训练和后训练过程进行了简要介绍,并简单说了如何将视觉和语音合并到LLaMa 3中。

【3】Pre-Training:预训练阶段主要包括:预训练数据、模型结构、基础设施和训练效率、训练方案四个部分

【4】Post-Training:后训练阶段主要包括:模型、后训练数据、能力增强。

【5】Results:分别对预训练模型和后训练模型进行基准测试。

【6】Inference:主要讲了推理阶段的2个主要技术优化:流水线并行和 FP8量化

【7】Vision Experiments:主要从数据、模型架构、模型扩展、预训练、后训练几个方面,介绍如何将视觉能力合并到LLaMa 3.

【8】Speech Experiments:也是主要从数据、模型架构、训练方案几个方面介绍将语音能力合并到LLaMa 3.

【9】Related Work:从语言模型和多模态两个方面总结了LLaMa 3的相关工作,语言模型方面提到了规模、小模型、模型架构、开源、后训练这几个方面的创新性工作,多模态主要提到了图像、视频、语音。本节都是简短概括,详细的在前面的章节。

【10】Conclusion:结论

2.2.3 LLaMa 3模型概述

LLaMa 3的训练过程分为两个阶段:Pre-Training(预训练阶段)和Post-Training(后训练阶段)。

预训练阶段与之前 2.1 大语言模型的训练过程 系列讲的预训练过程类似,LLaMa 3使用15.6T Tokens的数据集,在8k Tokens的上下文窗口,训练了405B参数的大模型,区别在于LLaMa 3继续进行预训练,将上下文窗口调整至128k。

后训练阶段对应 2.1 大语言模型的训练过程 中的有监督微调阶段和 RLHF阶段,不过LLaMa并没有采用RLHF,而是使用DPO(直接偏好优化)的技术方案,然后进一步整合了工具使用、数学推理、代码等其他能力。

此外还训练了一个视觉适配器和一个语音适配器,用于将多模态能力融合到LLaMa 3。

2.2.4 预训练阶段

2.2.4.1 数据

【1】数据预处理

预训练的大部分数据是来源于互联网,需要对数据进行前置的预处理,数据处理主要包括如下步骤:

一、隐私数据和安全过滤

二、文本提取和清理

(1)构建了一个提取HTML的自定义解析器,并优化模板去除和内容召回的精度。同时,对包含数学和代码内容的HTML进行了额外处理,确保能正确提取出内容。研究人员在处理过程中还发现,相比纯文本,带有标记符会对模型的性能有不好的影响,所以删除了所有标记符。

(2)去重:主要包括URL级、文档级、行级重复数据的删除。

三、启发式过滤:用启发式的方法过滤低质量、有异常值和重复过多的文档,具体如下:

(1)用重复N-Gram覆盖率来删除由重复内容组成的行

(2)用 “dirty word”过滤封锁列表未覆盖的成网站

(3)使用标记分布 Kullback-Leibler 过滤掉与训练语料库分布相比含有异常token的文档。

四、训练质量分类器模型

五、代码和推理数据:构建特定的流水线来提取代码和数学相关的网页

六、针对多语言数据进行了如下处理

(1)通过语言识别模型将文档分类为 176 种语言

(2)在每种语言的数据中执行文档级和行级重复删除。

(3)应用特定语言的启发式方法和基于模型的过滤器来删除低质量文档。

**
**

【2】数据配比

为了确定最合适的数据配比,Meta研究人员进行了如下的工作:

1、首先开发了一个分类器对网络数据进行分类。

2、为了确定最佳的数据配比,研究人员进行了Scaling laws实验,当然Scaling laws实验得目的不只是确定配比,还要预测最合适模型大小,405B就是这样算出来的,报告中也写了详细的过程,后面再细写

3、最终确定的数据配比为:通用知识50%、数学和推理25%、代码17%、多语言8%

2.2.4.2 模型结构

LLaMa 3模型结构上依旧使用基于解码器的Transformer架构,这已经几乎成为业内共识了,相比于LLaMa 3做了如下几个优化:

(1)GQA,8-kv head,以此提高推理效率

(2)405B的模型层数是126 层,减掉了2层,这是为了训练阶段方便流水线并行切分。

(3)词表大小为128K,词汇表结合了来自 tiktoken3 分词器的 100K tokens 和额外的 28K tokens

(4)RoPE theta 调到了500000

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_llama_02

2.2.4.3 基础设施和训练优化

报告花了很长篇幅来介绍LLaMa 3训练基础设施,以及训练过程中提升效率的方法,可以说是诚意满满了,万卡集群的训练经验是十分稀缺的。包括包括如何并行化、保持系统可靠性、训练过程中什么情况容易失败等等…这些细节都藏在了这篇技术报告中。

2.2.4.3.1 基础设施

首先从计算、存储、网络三个方面来看基础设施。

计算

采用8卡的H100-80GB SXM服务器, 物理服务器采用OCP Grand Teton平台。每个服务器配备了8个GPU和2个CPU。8个GPU通过NVLink连接。使用MAST调度训练作业。

存储

存储采用了自研的分布式文件系统Tectonic[3], 7500台服务器提供240PB的存储能力, 支持平均2TB/s峰值7TB/s的写入能力

网络

每个机柜放置两台H100服务器, 每个服务器8个400Gbps单口的网卡, 然后两台服务器连接到同一个TOR Switch上

不同参数规模的模型采用了不同的网络:

小模型是使用Nvidia Quantum2 InfiniBand网络进行训练的。

405B大模型采用了基于 Arista 7800 和 Minipack2 开放计算项目(OCP)机架交换机的 RDMA over Converged Ethernet(RoCE)网络。报告中详细说明了RoCE网络的拓扑结构和负载均衡策略。

RoCE网络集群由24K GPU组成,通过三层Clos网络进行连接。这里有一个细节报告中没有说,RoCE集群是24K GPU组成,但训练405B说是只用了16K GPU,具体没有细说。

底层每个机架两台H100服务器(托管16个GPU),每个服务器8个400Gbps单口的网卡,并通过单个Minipack2机架顶部(ToR)交换机连接。

中层192个机架通过集群交换机连接,形成一个拥有3,072个GPU的pod。

顶层8个pod通过聚合交换机连接,形成一个24K GPU集群。

一个pod内的192个机柜,按照1:1无收敛的方式连接到Cluster交换机。不过,pod之间的带宽有1:7的收敛比,会拖慢集合通信的性能。所以,LLaMa 3的模型并行方法和Job训练调度器都针对这种网络拓扑进行了优化,目的是最小化跨pod的网络通信。

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_人工智能_03

2.2.4.3.2 并行策略

LLaMa 3采用了4D并行策略,之前比较常提的是3D并行策略,本次相比之前多了一个CP并行(上下文并行),这里先给出一些基本概念介绍,关于分布式并行,后面专门一篇细讲。

张量并行性在不同的设备上将单个权重张量分割成多个块。

流水线并行性通过层将模型垂直划分为多个阶段,以便不同的设备可以并行处理模型管道的不同阶段。有一点值得注意,在PP并行时, 模型结构上从128层降低到了126层,第一个Stage和最后一个Stage仅有7层, 中间的每个Stage有8层。采用这种首尾各少一层的方式是为了平衡每层的计算量和内存用量。

上下文并行性通过将输入上下文划分为多个部分,减少由于长序列长度输入带来的内存瓶颈。

数据并行采用完全分片的数据并行,处理数据时在多个GPU上并行同步每个训练步骤后的模型、优化器和梯度。

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_服务器_04

通过采用上述方案,GPU利用率如下:

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_数据_05

可以看到尽管使用了NVDIA的H100,目前GPU的利用率仍然是在38%~43%之间,还存在优化空间。

2.2.4.3.3 稳定性

在整个54天的训练中, 遇到了466次任务中断, 其中包括47次主动中断用于调整数据集升级Firmware等,其余419次是意外的中断。因为是自动化运维, 只有3次非预期中断需要人工干预。

还提供了故障事件列表:

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_语言模型_06

因为采用新的Spine-Leaf架构, 出现GPU故障时,可以很容的进行宕机迁移,所以很多情况不需要人为干预很快就切换掉,很快重新拉起。

对于交换机和网络故障,也可以做到快速迁移,因此整体在模型训练中实现了90%的有效训练时间。

2.2.4.3 训练方案

Llama 3 405B 的方案包括三个主要阶段:(1) 初始预训练,(2) 长上下文预训练,(3) 退火。

LLaMa的训练批次策略值得一提,概括来说是初期采用小批次,然后逐渐加大。报告中提到他们发现这种训练方式非常稳定。

最开始的批次大小和序列长度分别为 4M tokens 和 4096,在训练252M tokens 后,翻倍至 8M tokens 和 8192,后续再翻倍至 16M,直到达到 2.87T tokens 的预训练量。

另外就是数据配比,报告中提到在训练期间对数据的配比做了几次调整,并且增加了非英语数据在预训练数据中的比例,前文中也有提到。

2.2.5 后训练阶段

2.2.5.1 数据

后训练阶段的数据主要包括偏好数据和有监督微调数据

偏好数据

偏好数据标注过程与 LLaMA 2 类似,每个轮次后部署多个模型进行标注,并为每个用户提供来自两个不同模型的两个结果(模型是使用不同的数据混合和对齐方式进行训练的)。标注时要求标注人员提供 4 个偏好等级:明显更好(significantly better)、更好(better)、略好(slightly better)、勉强更好(marginally better)。

下表给出了关于偏好数据的统计情况:

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_服务器_07

有监督微调数据

有监督微调数据主要由以下来源:

(1)人类注释收集的提示,拒绝采样的响应

(2)针对特定能力的合成数据

(3)少量人类策划的数据

下表给出了关于有监督微调数据的统计情况:

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_服务器_08

数据处理

后训练阶段的数据处理,主要包括数据清洗和数据修剪两方面。其中关于数据修剪,报告中介绍了(1)主题分类;(2) 质量评分;(3)难度评分;(4)语义去重。这部分也属于目前相对常规的一些数据操作,详细内容放到写微调阶段数据处理时再整体细写。

2.2.5.2 模型

后训练阶段的模型主要包括奖励模型和有监督微调模型。训练过程如下图所示:

从LLaMa 3 技术报告,再看LLM构建过程 ——《带你自学大语言模型》系列(番外)_语言模型_09

后训练阶段包括多轮,同时每轮又有多个阶段:

多阶段是指,首先使用人类标注偏好数据训练 Reward 模型,使用 SFT 数据训练 SFT 模型,以及使用 DPO 训练 DPO 模型,最后的 DPO 模型用于下一轮的训练。

多轮是指上面的步骤总共迭代6轮,每轮都会收集新的人类偏好标注数据以及 SFT 数据,并且会从最新的模型中采样合成数据。

2.2.5.3 模型能力增强

LLaMa 3还针对特定的能力对模型进行了增强,其中包括了代码能力、多语言能力、数学和推理能力、工具使用能力等等

这部分内容对于各行业如何对模型进行专业领域能力增强,有着十分重要的参考意义。这里简要介绍2个有代表性的。

**
**

代码能力

代码能力的增强主要分为了4步:

(1)训练代码专家

(2)生成合成数据

(3)在拒绝抽样过程中的系统提示导向

(4)使用执行和模型作为裁判信号过滤训练数据

**
**

数学与推理能力

首先列出了解决数学与推理问题面临的几个挑战:(1)缺乏提示;(2)缺乏真实的思考链;(3)中间步骤不正确;(4)教会模型使用外部工具;(5)训练与推理之间的差异;

为了解决这些挑战,Meta主要采用了下面这些方法:

(1)解决缺乏提示不足的问题:从预训练数据中提取数学相关的数据,将其转化成问答格式,然后进行有监督微调。

(2)用带有推理步骤的数据微调模型:用LLaMa 3为每个prompt生成多个推理步骤的结果数据,然后过滤出结果正确的步骤数据,再用这些数据进行模型的有监督微调。

(3)将代码和文本推理穿插组合,

(4)从错误和反馈中进行学习:通过让模型进行错误纠正

写不完了写不完了😭…后面有点潦草了,望见谅(但看我后台数据,大部分人也读不到最后😂😂),原本还想把量化、评估、 Scaling laws实验的细节、集合通信、多模态写一写的,但是现在已经周一早晨了,下次一定(也可能是融合到后续的子章节里)…

**
**

参考资料

[1] https://ai.meta.com/research/publications/the-llama-3-herd-of-models/

[2]https://llama.meta.com/

[3]https://ai.meta.com/blog/meta-llama-3-1/