【LLM】Llama 3 论文精读
导言
-
Llama 3.5系列模型的发布:
- Llama 3.5系列模型是开源的,最大模型参数为405B([[稠密Transformer架构]],而不是MOE 架构),上下文窗口长度为128K。
- 模型支持多语言和工具使用,并且在某些评估中已经接近或超过GPT-4的水平。
-
模型架构与训练:
- Llama 3.5采用了传统的稠密Transformer架构,而不是MOE(Mixture of Experts)架构。
- 训练过程分为预训练和后训练两个阶段,后训练阶段使用了简单的SFT(Supervised Fine-Tuning)和DPO(Direct Preference Optimization)算法,没有使用复杂的RLHF(Reinforcement Learning from Human Feedback)。
-
性能评估:
- Llama 3.5在多个评估基准上表现出色,尤其是在知识面(MMLU)、代码生成(HumanEval)和数学推理(GSM8K)等任务上。
- 模型越大,性能提升越明显,但70B模型已经表现出较强的性能,405B模型在某些任务上提升不大。
-
模型的应用场景:
- Llama 3.5展示了在工具使用、多语言翻译、复杂推理和代码生成等方面的能力。
- 模型在多语言任务上表现良好,能够将故事翻译成西班牙语等语言。
-
模型的开源与使用限制:
- Llama 3.5 是开源的,但Llama团队更新了用户协议,要求使用其模型进行训练或微调的开发者必须在模型名称中包含“Llama 3”。
-
未来展望:
- Llama 3.5系列模型在开源模型中的地位稳固,预计在一段时间内将继续保持领先地位。
- 尽管模型性能强大,但在实际应用中,70B模型已经能够满足大部分需求,405B模型的训练和推理成本较高。
总结来说,Llama 3.5系列模型在性能、架构和应用场景上都有显著的优势,尤其是在开源模型领域,但其训练和推理成本较高,且与竞争对手Mistral之间存在激烈的竞争。
预训练数据
1. 预训练的四个关键步骤:
- 数据集构建:从互联网上抓取大量数据,涵盖多种来源(如 Common Crawl、GitHub、YouTube等),并进行去重和清洗。
- 模型架构与Scaling Law:确定模型大小和训练数据量,通常需要根据数据和架构进行调整。
- 训练过程:大规模训练需要几个月时间,涉及数千张GPU卡,训练过程中需要容灾处理。
- 多阶段训练:训练分为多个阶段,每个阶段的目标和数据处理方式可能不同。
2. 预训练数据的来源与处理:
- 数据来源:
- 互联网抓取(如Common Crawl、GitHub、YouTube等)。
- 垂直网站(如Meta可能使用Facebook数据)。
- 书籍、代码库(如GitHub)、视频字幕等。
- 数据清洗:
- 去除重复数据(URL去重、文档去重、行级别去重)。
- 使用MinHash等算法处理大规模文本去重。
- 过滤低质量数据(如广告、导航栏、脏词、PII信息等)。
- 使用分类器(如FastText、Roberta)对数据进行质量打分和分类。
- 特殊数据处理:
- 代码和数学推理数据的抽取与保留,提升模型的推理能力。
- 多语言数据的处理,包括语言分类和去重。
3. 数据混合与采样:
- 数据混合比例:
- 高质量数据(如数学、代码、Wikipedia)需要[[上采样]],低质量数据(如娱乐、成人内容)需要下采样。
- 最终数据混合比例为:50%通用知识、25%数学和推理、17%代码、8%多语言。
- 多语言数据处理:
- 多语言数据在互联网中占比较高,但在训练中被下采样,导致Llama 3的多语言能力较弱。
4. 退火技术(Annealing):
- 退火的作用:
- 在训练后期,使用少量高质量数据(如数学、代码)进行退火训练,提升模型在特定任务(如数学推理)上的表现。
- 类似于“考前突击”,通过重新调整学习率,在小规模高质量数据上微调模型。
- 退火的效果:
- 在GSM8K等数学评测集上,退火技术显著提升了模型的表现。
- 数据质量评估:
- 通过退火技术,可以评估新数据源的质量,确定其对模型性能的提升效果。
5. 技术细节与挑战:
- 数据清洗的复杂性:
- 数据清洗是一个耗时且资源密集的过程,涉及大量人工和计算资源。
- 需要根据具体任务和数据特点,定制化处理(如代码、数学公式的抽取)。
- 模型训练的容灾与稳定性:
- 大规模训练需要处理硬件故障和数据分布变化。
- 数据混合的实验性:
- 数据混合比例需要通过多次实验确定,没有统一的最佳答案。
6. 与竞争对手的对比:
- Llama 3.5在数据质量和训练技术上进行了大量优化,尤其是在代码和数学推理任务上表现突出。
- 与Mistral等竞争对手相比,Llama 3.5更注重数据多样性和高质量数据的利用。
7. 未来改进方向:
- 多语言能力的提升:当前Llama 3的多语言能力较弱,未来可能需要增加多语言数据的比例和质量。
- 数据清洗和处理的进一步优化:通过更精细的数据处理技术,提升模型在特定任务上的表现。
总结来说,Llama 3.5 的预训练阶段注重数据质量、多样性和高效利用,通过数据清洗、混合和退火技术,显著提升了模型在代码、数学推理等任务上的性能。然而,多语言能力仍是其短板,未来可能需要进一步优化。
模型
1. 模型架构概述
- 基础架构:Llama 3 使用了标准的稠密Transformer架构,与之前的版本相比没有本质变化。
- 性能提升来源:
- 数据质量和多样性。
- 模型规模更大(参数更多)。
- 数据清洗和处理的优化。
2. 主要改进点
-
Grouped Query Attention (GQA):
- 背景:在多头注意力机制(Multi-Head Attention)中,每个头都有自己的Key(K)、Value(V)和Query(Q)。在推理时,K和V需要缓存(KVCache),导致内存占用高。
- GQA的核心思想:将多个头的K和V分组共享,减少内存占用和计算量。
- 例如,将8个头的K和V分成4组,每组共享相同的K和V。
- 优点:
- 显著减少KVCache的内存占用。
- 减少权重存储和计算带宽。
- 适用场景:特别适合大模型(如70B、405B)的推理优化。
-
长序列训练中的掩码优化:
- 问题:在长序列训练中,一个样本可能包含多个文档,计算Attention时,不同文档之间的Token不应相互影响。
- 解决方案:在Self-Attention中加入掩码,确保每个Token只与同一文档内的Token计算Attention分数。
- 适用场景:支持更长的上下文窗口(如128K)。
-
Tokenizer改进:
- 词典大小:从Llama 2的32K扩展到128K。
- 100K来自GPT-4的Tokenizer(tiktoken),28K为新增的非英语Token。
- 优点:
- 提升多语言支持能力。
- 减少Token数量,提升计算效率(例如,一个英文单词从2个Token减少到1.5个Token)。
- 词典大小:从Llama 2的32K扩展到128K。
-
RoPE位置编码优化:
- 改进:使用更大的超参数(Theta),支持更长的上下文窗口(如32K)。
- 优点:提升模型对长文本的处理能力。
3. 模型规模与参数
- 模型规模:
- 8B:32层,4096宽度。
- 70B:80层,8192宽度。
- 405B:126层,16384宽度。
- 参数增长规律:
- 模型大小与层数成正比,与宽度成平方关系。
- 例如,8B到70B:层数×2.5,宽度×2,总参数增长约10倍。
4. Scaling Law(缩放定律)
- 核心思想:通过小模型的实验结果预测大模型的性能。
- 传统Scaling Law:预测下一个Token的损失(Loss)。
- Llama 3的改进:预测下游任务(如数学推理)的损失和精度。
- 应用场景:
- 确定最佳模型规模和训练数据量。
- 例如,给定计算资源(如GPU卡数和训练时间),预测最优模型大小(如405B)。
- 实验结果:
- 在小模型上拟合的Scaling Law能够较准确地预测大模型的性能。
- 不同任务(如数学推理、代码生成)的Scaling Law曲线不同,需要分别拟合。
5. 训练与推理优化
- 训练挑战:
- 大规模训练(如405B模型)需要数万张GPU卡,训练时间长达数月。
- 需要处理硬件故障和数据分布变化。
- 推理优化:
- 通过GQA减少内存占用和计算量。
- 支持更长的上下文窗口(如128K)。
6. 与Llama 2的对比
- 主要改进:
- 引入GQA,优化推理性能。
- 扩展Tokenizer,支持多语言和更高效的Token表示。
- 优化位置编码,支持更长上下文。
- 使用Scaling Law更精准地预测模型性能。
- 性能提升:
- 在多语言、长上下文和推理任务上表现更好。
- 但仍需进一步优化多语言能力。
7. 未来改进方向
- 多语言支持:当前多语言能力仍较弱,需进一步优化Tokenizer和训练数据。
- 长上下文优化:支持更长的上下文窗口(如100万Token)。
- 训练效率:进一步优化大规模训练的稳定性和效率。
总结
Llama 3 在模型架构上的改进主要集中在推理优化(如GQA)、多语言支持(Tokenizer扩展)和长上下文处理(RoPE优化)。通过Scaling Law,Llama 3 能够更精准地预测大模型的性能,从而优化模型规模和训练数据量。尽管在多语言能力上仍有提升空间,Llama 3 在推理、代码生成和数学任务上表现显著提升,进一步巩固了其在开源大模型领域的领先地位。
Llama 3 训练基础设施与技术细节
1. 硬件架构
- GPU集群:
- 规模:最大使用 16,000张H100 GPU,每台机器配备8块GPU和2个CPU。
- 网络:
- 小模型:使用NVIDIA的Infiniband,延迟低但稳定性较差。
- 大模型:使用RDMA over Ethernet,稳定性更高,但需要大量底层优化。
- 带宽:每根光纤支持400Gb/s,网络架构为三层结构,上层交换机带宽为下层的1/7。
- 存储:
- 容量:240PB SSD,支持高吞吐量(峰值7TB/s,持续2TB/s)。
- Checkpoint:每个GPU的状态(1MB到4GB)需要快速写入存储系统,支持容灾和快速恢复。
2. 训练任务切分
- 并行策略:
- Tensor Parallelism (TP):
- 将模型的每一层切分到多个GPU上,每个GPU负责一部分计算。
- Pipeline Parallelism (PP):
- 将模型的不同层分配到不同的GPU上,数据按顺序流过各层。
- 问题:存在“气泡”(Bubble),即GPU空闲等待数据的时间。
- Data Parallelism (DP):
- 将数据切分到多个GPU上,每个GPU计算一部分数据,最后汇总结果。
- Context Parallelism (CP):
- 将长序列(如128K Token)切分到多个GPU上,减少内存占用。
- Tensor Parallelism (TP):
- 切分策略:
- 405B模型:使用4D切分(TP、PP、DP、CP),充分利用16,000张GPU。
- 70B模型:仅需TP、PP、DP,无需CP。
3. 训练效率与优化
- GPU利用率:
- 理论值:H100的峰值算力为989 TFLOPS。
- 实际值:达到43%利用率(约400 TFLOPS),在16,000张GPU上表现良好。
- 优化点:
- 网络优化:针对以太网进行底层优化,提升All-Reduce和All-Gather操作的效率。
- 数值稳定性:使用FP16进行计算,但在累加时切换为FP32,避免浮点溢出。
- 容灾与恢复:
- 每2小时保存一次Checkpoint,支持快速恢复。
- 训练过程中平均每天中断10次,主要原因是GPU和内存故障。
4. 容灾与稳定性
- 故障统计:
- GPU故障:148次(占31.8%)。
- 内存故障:85次(占18.2%)。
- 其他故障:包括交换机、光纤、SSD、CPU等问题。
- 恢复策略:
- 快速隔离故障节点,迁移任务到其他GPU。
- 利用高速存储系统快速恢复Checkpoint,确保有效训练时间达到90%。
5. 挑战与未来方向
- 挑战:
- 硬件稳定性:H100早期批次故障率较高,GPU和内存问题频发。
- 网络复杂性:大规模集群的网络架构设计和优化难度大。
- 容灾与恢复:需要高效的Checkpoint机制和快速故障排查能力。
- 未来方向:
- 异步训练:减少同步等待时间,提升大规模训练的效率和稳定性。
- 硬件升级:采用下一代GPU(如B100)进一步提升算力和能效。
总结
Llama 3 的训练基础设施展示了大规模AI模型训练的复杂性和挑战。通过16,000张H100 GPU、240PB SSD存储和优化的网络架构,Meta成功训练了405B参数的模型。尽管在硬件稳定性、网络优化和容灾恢复方面面临诸多挑战,Llama 3 的训练效率(43% GPU利用率)和容灾能力(90%有效训练时间)仍然达到了业界领先水平。未来,随着硬件升级和异步训练算法的引入,大规模模型训练的效率和稳定性有望进一步提升。
模型训练过程
1. 预训练阶段
(1)基本学习率调整
- 初始学习率 8E-05,使用 8000步线性warm-up 到最大值。
- 之后 使用cosine decay 下降 100倍,最终到 8E-07。
(2)批量大小和序列长度变化
- 初始阶段:batch size 为 400万个token,序列长度 4096。
- 中间阶段(252M token):batch size 增加到 800万,序列长度 8192。
- 后期阶段(2.87T token):batch size 增加到 1600万。
(3)训练稳定性
- 训练过程中 小的 batch size 更稳定,随着训练进行,逐步增大 batch size。
- 选择 batch size 是实验的结果,并非固定最佳方案。
(4)数据采样调整
- 非英语数据的比例提高,提升多语言能力。
- 数学数据采样增加,提升数学推理能力。
- 新网页数据加入,增强最新信息的理解能力。
- 低质量数据下采样,优化整体数据质量。
2. 长上下文预训练
(1)目标
- 训练阶段使用 8K 上下文,但最终要支持 128K 长上下文。
- 需要逐步扩展,以避免计算资源浪费和模型不稳定。
(2)方法
- 逐步从 8K → 128K,一共 6次扩展,确保模型能稳定处理长上下文。
- 采用 大海捞针测试 来评估模型的长文本理解能力。
(3)算力挑战
- Self-Attention 计算复杂度是 O(n²),使得 128K 训练成本巨大。
- 分布式计算策略 需要调整,以适应更长的上下文长度。
3. 退火(Fine-tuning 收尾阶段)
(1)学习率衰减
- 在 最后4000万个token 上 线性降到 0。
- 128K 上下文长度 继续保持。
(2)高质量数据采样
- 退火阶段更关注高质量数据,以优化最终性能。
(3)模型权重平均
- 采用多个 final step 的 checkpoint 进行模型权重平均,提升稳定性。
- 该方法在 CNN 时代用于刷榜(如 ImageNet 竞赛)。
4. 其他未详细说明的部分
- 数据采样的具体比例和来源未透露(可能涉及版权)。
- 数据清洗和处理方式未完全公开,但可以通过实验优化。
总结
- 模型训练是一个实验驱动的过程,需要不断调整参数,类似“炼丹”。
- 批量大小、上下文长度、数据质量 逐步优化,以适应最终任务需求。
- 退火阶段 主要用于收尾,确保模型稳定并具备高质量输出能力。
这套方法不仅适用于 Llama 3,也符合当前主流大语言模型的预训练范式。