当前位置: 首页 > article >正文

【LLM】Llama 3 论文精读

导言

  1. Llama 3.5系列模型的发布

    • Llama 3.5系列模型是开源的,最大模型参数为405B([[稠密Transformer架构]],而不是MOE 架构),上下文窗口长度为128K。
    • 模型支持多语言和工具使用,并且在某些评估中已经接近或超过GPT-4的水平。
  2. 模型架构与训练

    • Llama 3.5采用了传统的稠密Transformer架构,而不是MOE(Mixture of Experts)架构。
    • 训练过程分为预训练和后训练两个阶段,后训练阶段使用了简单的SFT(Supervised Fine-Tuning)和DPO(Direct Preference Optimization)算法,没有使用复杂的RLHF(Reinforcement Learning from Human Feedback)。
  3. 性能评估

    • Llama 3.5在多个评估基准上表现出色,尤其是在知识面(MMLU)、代码生成(HumanEval)和数学推理(GSM8K)等任务上。
    • 模型越大,性能提升越明显,但70B模型已经表现出较强的性能,405B模型在某些任务上提升不大。
  4. 模型的应用场景

    • Llama 3.5展示了在工具使用、多语言翻译、复杂推理和代码生成等方面的能力。
    • 模型在多语言任务上表现良好,能够将故事翻译成西班牙语等语言。
  5. 模型的开源与使用限制

    • Llama 3.5 是开源的,但Llama团队更新了用户协议,要求使用其模型进行训练或微调的开发者必须在模型名称中包含“Llama 3”
  6. 未来展望

    • 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. 主要改进点
  1. 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)的推理优化。
  2. 长序列训练中的掩码优化

    • 问题:在长序列训练中,一个样本可能包含多个文档,计算Attention时,不同文档之间的Token不应相互影响。
    • 解决方案:在Self-Attention中加入掩码,确保每个Token只与同一文档内的Token计算Attention分数。
    • 适用场景:支持更长的上下文窗口(如128K)。
  3. Tokenizer改进

    • 词典大小:从Llama 2的32K扩展到128K。
      • 100K来自GPT-4的Tokenizer(tiktoken),28K为新增的非英语Token。
    • 优点
      • 提升多语言支持能力。
      • 减少Token数量,提升计算效率(例如,一个英文单词从2个Token减少到1.5个Token)。
  4. 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. 训练任务切分
  • 并行策略
    1. Tensor Parallelism (TP)
      • 将模型的每一层切分到多个GPU上,每个GPU负责一部分计算。
    2. Pipeline Parallelism (PP)
      • 模型的不同层分配到不同的GPU上,数据按顺序流过各层。
      • 问题:存在“气泡”(Bubble),即GPU空闲等待数据的时间。
    3. Data Parallelism (DP)
      • 数据切分到多个GPU上,每个GPU计算一部分数据,最后汇总结果。
    4. Context Parallelism (CP)
      • 将长序列(如128K Token)切分到多个GPU上,减少内存占用。
  • 切分策略
    • 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 GPU240PB 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,也符合当前主流大语言模型的预训练范式。


http://www.kler.cn/a/553449.html

相关文章:

  • 使用DeepSeek编写VTK读取PLY的Demo
  • 网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
  • frameworks 之 Activity添加View
  • NLP指标全解
  • SpringBoot中使用 ThreadLocal 进行多线程上下文管理及其注意事项
  • Spring Scheduling Tasks+Redis实现分布式定时任务
  • CRMEB JAVA多商户外贸版演示地址
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter17-事件
  • fpga助教面试题
  • 【论文学习】RVS-FDSC:一种基于四方向条带卷积的视网膜血管分割方法以增强特征提取
  • 开源之夏经验分享|Koupleless 社区魏照华:开源精神是场永不停歇的接力
  • C++ Primer 构造函数再探
  • 【学习笔记】Cadence电子设计全流程(一)Cadence 生态及相关概念
  • 碳化硅(SiC)功率器件:新能源汽车的“心脏”革命与技术突围
  • Spotify AI 技术(1)使用 TensorFlow 和 TF-Agents
  • top命令输出内容详解
  • C++蓝桥杯基础篇(四)
  • 使用 Qt 插件和 SQLCipher 实现 SQLite 数据库加密与解密
  • Vue2和Vue3的Hooks有什么区别
  • nginx ngx_http_module(8) 指令详解