2024年7月

模型结构分析

LLaMA 3的模型结构继续沿用了Transformer架构,这一架构已经成为Dense LLM模型的标准。LLaMA 3的结构包括了自注意力机制和前馈神经网络(FFN),后者采用了SwiGLU激活函数。虽然有些模型采用了专家混合(MOE)结构,但LLaMA 3选择了Dense结构,主要是因为Dense模型训练更稳定,且在性能和可扩展性上表现优异。Meta的技术报告指出,尽管MOE结构在推理成本上有优势,但在训练稳定性和效果上并不如Dense模型[[1]](https://github.com/meta-llama/llama3)[[2]](https://www.ctol.digital)。

llama3架构

预训练过程

LLaMA 3的预训练过程分为三个主要阶段:

  1. 初始预训练:标准的预训练阶段,类似于其他LLM模型。
  2. 长上下文预训练:在训练的后期阶段,使用长文本数据进行训练,支持最长128K token的上下文窗口。
  3. 退火阶段:在最后4000万个token期间,线性地将学习率退火至0,同时增加高质量数据如数学、代码、逻辑内容的比例[[3]](https://huggingface.co)[[4]](https://techmonitor.ai)。

后训练过程(Post-Training)

LLaMA 3的后训练流程包括人工标注数据训练的RM模型,用于拒绝采样和SFT(监督微调)数据生成。这个过程通过反复迭代,逐步优化模型输出质量。具体步骤包括:

  1. 使用人工标注数据训练RM模型。
  2. RM模型对生成的回答进行评分,选择得分最高的作为SFT数据。
  3. 使用DPO模型调整LLM参数,鼓励输出高质量答案[[3]](https://huggingface.co)[[5]](https://openrouter.ai)。

小模型的崛起

小模型在训练和推理成本、数据隐私保护方面相比大模型有显著优势。提升小模型效果的关键因素包括:

  1. 增加训练数据的数量和质量:突破Optimal Chinchilla Law,在保证质量的前提下增加数据数量。
  2. 模型蒸馏:通过大模型作为Teacher,小模型作为Student,学习大模型的预测分布。
  3. 退火数据:在预训练的最后阶段,上采样高质量数据以提升模型能力[[5]](https://openrouter.ai)。

合成数据的实用化

在后训练阶段,合成数据已经被广泛应用,尤其是在SFT阶段。合成数据质量的提升显著增强了模型的最终效果。此外,合成数据和模型蒸馏本质上都是模型知识传递的一种形式,通过更大的模型生成数据,提升小模型的能力[[5]](https://openrouter.ai)。

影响与展望

LLaMA 3 405B的发布是开源AI领域的一大里程碑,它不仅缩小了开源模型与闭源模型之间的性能差距,还推动了小模型技术的发展。未来,随着更多高质量数据和先进训练方法的应用,小模型的效果将越来越接近甚至匹敌超大规模模型。这一趋势将进一步推动AI技术的普及和应用[[1]](https://github.com/meta-llama/llama3)[[3]](https://huggingface.co)[[4]](https://techmonitor.ai)。

通过LLaMA 3 405B的开源,Meta在AI生态系统中的话语权得到了极大提升,同时也促使其他公司在模型开发和开源策略上作出相应调整。这一发展不仅对研究者和开发者有重要意义,也为整个AI行业注入了新的活力和竞争力[[2]](https://www.ctol.digital)[[5]](https://openrouter.ai)。

参考链接:

  1. GitHub - meta-llama/llama3
  2. Meta Unleashes Llama 3 405B
  3. Welcome Llama 3 - Meta's new open LLM
  4. Meta releases Llama 3 large language model
  5. Meta: Llama 3.1 405B Instruct

LLama 3 405B 技术报告解读

Meta于2024年7月24日发布了Llama 3的405B版本,这一模型在技术报告中引起了广泛关注。报告开头特别强调了一个关键概念:“Managing complexity”,即管控复杂度。Meta没有使用Mixture of Experts (MoE)架构,而是选择了405B参数的密集模型(dense model),并且在优化过程中采用了Direct Preference Optimization (DPO)而非Proximal Policy Optimization (PPO)。下面将详细解读这份技术报告,涵盖预训练、模型结构、规模定律、硬件和网络、并行策略等方面的亮点。

一、预训练

数据部分

  1. 数据清洗:对个人隐私数据(PII)进行清洗、去重和去黄。
  2. 数据配比:通过模型进行细粒度打标签,最终确定了50%通用数据,25%数理数据,17%代码数据,8%多语言数据。
  3. 数据退火:在大模型训练的最后阶段,使用高质量数据学习并逐渐将学习率衰减到0。

数据配比和Scaling Law

  1. 数据配比:作者在不同的小模型上进行了不同的配比实验,用于预测大模型的最优配比。
  2. Scaling Law:通过在小模型上探索数据配比的Scaling Law,预测了大模型的最优配比。

二、模型结构

GQA和8-kv head

Llama 3使用了分组查询注意力(GQA)和8个键值对头,提高了推理速度并减少了解码过程中的键值对缓存大小。

GQA参数

长文拼接

使用注意力掩码防止不同来源数据串味,这在扩长序列时尤为重要。

词表和RoPE

  1. 词表大小:128K,增强了非英语能力。
  2. RoPE theta:调整到500000,支持更长的上下文窗口。

三、Scaling Law

两步方法

  1. 计算最优模型:在下游任务上的负对数似然与训练FLOPs之间的相关性。
  2. Benchmark表现:利用Scaling Law模型和使用更高计算FLOPs训练的旧模型,将负对数似然与Benchmark的准确率关联。

结果

在ARC Challenge基准上,拟合结果表现良好。

模型拟合结果

四、硬件和网络

GPU资源

16K H100 80GB with NVLink,采用Meta的生产集群,提供240 PB SSD和7500台机器,支持2TB-7TB/s的存储吞吐。

网络部分

  1. RoCE和400Gb/s网络接口:采用3层网络架构。
  2. 负载均衡和拥塞控制:使用16个流减少单流流量,在网络包头部增加特殊区域,通过hash使得流的选路更均衡。

五、并行策略

并行策略

4D并行

结合张量并行(TP)、流水线并行(PP)、上下文并行(CP)和数据并行(DP),多了一个上下文并行CP或称为序列并行。

FSDP

使用全分片数据并行(FSDP),优化模型权重的拉取次数,减少反向梯度计算时的通信。

PP并行策略改进

  1. Batch Size限制:当前的流水线并行策略限制了micro batch个数为流水线stage的整数倍。
  2. 显存和计算不均衡:首尾stage做了padding,以平衡显存和计算。

CP并行策略的改进

基于allgather的通信方法,支持不同类型的注意力掩码。

六、预训练策略

三阶段训练法

  1. 初始训练:余弦调度,逐步增加上下文长度和batch size。
  2. 长上下文训练:从8K逐步增加到128K。
  3. 退火训练:最后40M token,用128K长度,逐渐线性缩减学习率到0。

七、后训练(对齐)

对话数据格式

设置多种角色的输入输出格式和特殊token。

奖励建模

增加了人工编辑样本,进行更精细的训练和权重平均。

SFT和DPO

拒绝采样,使用DPO+NLL的loss进行优化,迭代式训练,增强数据选择和训练效果。

八、基础设施、扩展性和效率

训练基础设施

Meta的生产集群提供了大规模的计算资源和存储网络,支持高效的模型训练和调度。

模型扩展的并行性

通过4D并行性将计算分布到多个GPU上,实现高效的模型训练。

总结

Llama 3 405B版本在数据处理、模型结构、并行策略和训练基础设施等方面进行了全面优化。尽管其性能未达到压倒性的领先地位,但在各个方面都展示了许多值得学习的技术亮点。特别是对数据的细粒度处理和大规模并行训练策略,对于提升模型性能和效率具有重要意义。

为什么LLM模型普遍选择6/7/8/9B、13B和130B这些规模?

近年来,随着自然语言处理(NLP)技术的飞速发展,语言模型(LLM)的规模不断扩大。我们经常听到6B、7B、13B和130B等不同规模的模型,但这些模型大小的选择并非随意,而是深思熟虑后的结果。这些模型大小主要是为了匹配显存和硬件的限制,使得训练和部署更加高效。本文将详细探讨为什么LLM的大小通常设计成这几个档次,并介绍计算显存占用的一些基本方法。

为什么LLM模型普遍选择6/7/8/9B、13B和130B这些规模?

一、模型大小与显存匹配

1.1 6B和7B模型

6B和7B模型的规模是为了适应消费级显卡的显存限制。通常,消费级显卡的显存容量为12GB、16GB或24GB。这些显卡广泛用于个人计算机、科研机构和中小型企业中。6B和7B模型在这些显卡上可以顺利部署和训练。

1.2 13B模型

13B模型的规模设计是为了最大化利用4卡8卡机器的显存和计算资源。以4096长度的输入数据为例,13B模型可以通过数据并行和量化技术部署在A10甚至4090显卡上。13B模型在8卡的机器上可以占满整个系统资源,实现高效的计算和推理。

1.3 超大规模模型

除了常见的6B、7B和13B模型外,行业内还有一些更大规模的模型,如16B、34B、52B、56B、65B、70B、100B、130B、170B和220B。这些模型的规模是根据训练和推理所需的算力设计的,通常用于大型数据中心和超级计算机。对于这些超大规模模型,训练速度的提升可以通过倍增显卡数量来实现。例如,7B模型以8卡为单位进行训练,而70B模型则可以以80卡为单位进行训练。

二、计算显存占用的方法

在选择模型规模时,计算显存占用是一个关键问题。不同的训练框架(如DeepSpeed和Megatron)对显存的占用不同。以下是一个基于Megatron框架的显存占用计算方法。

2.1 Megatron框架的显存占用

Megatron框架的模型和优化器存储系数为18,即模型参数量乘以18等于显存占用。对于13B的模型,其显存占用为13B x 18 = 234GB。这个系数18的来源是:

  • 2 (半精度模型参数)
  • 4 (单精度梯度)
  • 4 (单精度模型参数副本)
  • 4 (单精度一阶动量)
  • 4 (单精度二阶动量)

2.2 Pipeline并行和Zero并行

在使用Pipeline并行时,模型和优化器的显存占用可以平分到每张显卡上。以13B模型和4096序列长度为例,模型和优化器的显存占用在Megatron框架下是13B x 18 = 234GB。这需要至少4张80GB的显卡才能装下。

在正向传播中间变量的显存占用上,可以用40 x SHL来近似计算,即40 x 4096 (序列长度) x 5120 (隐层维度) x 40 (模型层数) = 34GB。

Zero并行

在Zero并行时,半精度模型参数和单精度梯度每张卡都有,而单精度模型参数副本、一阶动量和二阶动量则平分到每张卡上。因此,显存占用的系数中只有后面的12可以除以Zero并行数,前面的6不能。

假设使用13B模型和4096序列长度,在Megatron框架下,模型和优化器显存占用为234GB。这至少需要4张80GB的显卡来装下。

2.3 进一步优化显存利用

在使用Pipeline并行时,显存占用系数为18除以Pipeline并行数,正向传播的中间变量也平均分配到每张显卡上。因此,可以列出公式:

$$ (13 \times \frac{18}{\text{Pipeline并行数}} + \frac{34}{\text{Pipeline并行数}}) < 80 $$

得到Pipeline并行数至少为4,即需要4张显卡。这时,每张显卡的显存占用为67GB,其中模型和优化器占58.5GB,正向传播占8.5GB。

然而,由于Pipeline并行中的显卡空泡问题,实际显存占用会更高。解决方案是增大显卡数量,例如使用8张显卡,其中每4张显卡组成一个Pipeline并行组,两组之间使用Zero并行。

Tensor并行

除了Pipeline并行,还可以使用Tensor并行(TP)。但TP有两点问题:一是在Transformer结构下,每两次矩阵乘法需要进行一次TP间通信,通信量较大;二是Norm层的参数在每个TP上都必须是完整的,不能切分,会导致部分显存浪费。

尽管如此,TP在模型更大时依然有优势,特别是在单层无法装下的情况下。此外,TP不存在Pipeline并行中的显存不均衡问题,可以将TP开到适合的数量以优化显存利用。

三、总结

LLM模型的规模设计成6B、7B、13B和130B等档次,主要是为了匹配显存和硬件限制,优化训练和推理效率。通过合理选择模型规模和并行策略,可以最大化利用现有硬件资源,提高计算效率。未来,随着硬件技术的不断进步,LLM模型的规模和计算方法也将不断演进,进一步推动NLP技术的发展。