
今天Meta正式发布了Llama 3,整个AI社区瞬间沸腾起来。作为长期跟踪AI系统发展的观察者,有几个核心判断值得先拿出来聊聊:
Llama 3的发布,将数据工程的重要性提升到了全新高度——模型架构几乎未变,但数据规模与质量的显著提升直接带来了肉眼可见的效果跃升。
数据量越大,算力需求随之水涨船高。开源大模型玩家的入门门槛再次被抬高,万卡H100级别已成为基本配置。说实话,看到如此庞大的算力消耗,不焦虑是不可能的。
在集群系统层面,Meta同时布局RoCE与InfiniBand两条技术路线,而万卡级系统的容错与故障恢复,已经演变为无法回避的核心挑战。
有趣的是,Llama 3的算法改动少得惊人——长序列处理、多模态等大家都在追逐的能力它都没上。官方表示8B和80B只是开始,模型尚未训练完成,后续会逐步补齐这些功能。这是否意味着Meta感受到了某些压力,急于先放出一个版本?
1. Llama 3与Llama 2的模型结构(计算)区别
先说结论:Llama 3和Llama 2的模型架构完全一致,仅在配置参数(主要是维度)上有所调整。这意味着Llama 2的推理工程几乎可以无缝迁移到Llama 3上。在Meta官方的代码库中,模型计算部分的代码完全一样——主干依旧是decoder-only,继续沿用了RoPE、SwiGLU、GQA这些熟悉的组件。
Llama 3-8B与Llama 2-7B的具体差别
对比Huggingface模型中的config.json,一切都清晰可见:模型类都是`LlamaForCausalLM`,结构不变。具体的差异在于:
① vocab_size:32000 → 128256。词汇表的扩大直接导致embedding参数增大——(128256-32000)*4096*2 Byte = 752MB。最后一层lm_head的输出维度同样变为vocab_size,也增加了752MB。两项合计,模型增大1504MB。
② max_position_embeddings:4096 → 8192。Context window扩大了,训练时输入的序列长度以及推理能支持的序列长度也随之增加,但实际计算方式并未变化。
③ num_key_value_heads:32 → 8。这直接实现了GQA——由于num_attention_heads依然为32,计算时key、value需要复制4份。参数量显著下降:K_proj、V_proj的参数矩阵降至Llama 2-7B的1/4,共计减少32*4096*4096*2*2/4*3 Byte(1536MB)。
④ intermediate_size:11008 → 14336。FFN的中间维度变了,运算模式未变。参数量增大:32*4096*(14336-11008)*3*2/1024/1024 Byte = 2496MB。
综合以上几项调整,模型总体增大了2464M,这也是7B变为8B的直接原因。但说到底,计算模式没有任何本质改变。
PS:还有一个细节——权重数据格式从torch.float16变为torch.bfloat16。实际上Llama 2和Llama 3都是用bf16训练的,只是Huggingface在导入Llama 2时转成了float16进行推理,结果出现了NaN问题(相关issue有记录)。这次Llama 3直接使用了bfloat16,与官方发布的权重保持了一致。
2. 效果提升主要靠数据工程
① 数据量:预训练阶段,Llama 3使用了超过15T token(全部来自公开可获取的数据源),是Llama 2的7倍多。其中代码相关数据是Llama 2的4倍多。在微调阶段,除了公开的指令数据集,还自行制作了超过1千万条人工标注的示例。
② 数据质量:预训练阶段,Meta开发了一套完整的数据过滤流水线——包括启发式过滤器、NSFW过滤器、语义去重方法以及用于预测数据质量的文本分类器,目标是确保模型在最高质量的数据上训练。指令微调阶段的数据质量同样关键,Meta表示:“模型质量的最大提升来自于对这些数据的精心整理,以及对人工标注结果进行多轮质量审查。”
③ 数据混合比例的探索:Meta进行了大量实验,以评估在最终预训练数据集中如何混合不同来源的数据——这也是数据工程中常被忽视但极其重要的一环。
3. 模型训练的基础设施
3.1 集群细节
Meta这次构建了两个定制的24K GPU集群。根据model card中的“H100-80GB (TDP of 700W)”,可以确认采用的是SXM形态的H100,fp16算力为990 TFLOPS。他们实现了同时在16K个GPU上进行训练时,每个GPU超过400 TFLOPS的计算利用率——即利用率超过40%,这个数字相当可观。
关于这两个集群,Meta在另一篇AI基础设施博客中做了详细介绍。两个集群的核心区别在于:
Cluster 1:采用RoCE方案,基于Arista 7800的RoCE网络架构,配备Wedge400和Minipack2 OCP机架式交换机。
Cluster 2:采用InfiniBand方案,基于英伟达Quantum2 InfiniBand Fabric。两种方案都能实现400 Gbps端点互联。
之所以同时运行两套方案,目的是评估不同类型互连对大规模训练的适用性与可扩展性,为未来更大规模的集群设计积累经验。说白了,Meta在同时探索RoCE和InfiniBand两条路径,并且他们声称通过网络、软件、模型架构的协同设计,大模型训练的workload没有出现网络瓶颈。
实际上在Llama 2的技术报告中,Meta就已经采用过类似的配置——一个RoCE、一个InfiniBand,相同的互联带宽,两个A100集群。原文提到:“RoCE(一种更便宜、更商业化的互连网络)在2000个GPU的规模下几乎可以像昂贵的InfiniBand一样扩展,这让预训练变得更加大众化。”核心问题还是IB太贵了,天下苦秦久矣。
3.2 容错和故障恢复
这次Meta特别强调了一个点:为了最大限度地延长GPU的正常运行时间,他们开发了先进的新训练堆栈,可以自动检测、处理并维护错误。同时还大幅改进了硬件可靠性和无声数据损坏检测机制(silent data corruption),并研发了新的可扩展存储系统,减少了检查点和回滚的开销。这些改进使总体有效训练时间缩短了95%以上。与Llama 2相比,Llama 3的训练效率提高了大约三倍。
万卡级别的集群训练,容错已经成为无法回避的问题。这一点在Grok、Google Gemini等技术报告中都有强调,尤其是Google Gemini的报告中专门提到了大规模系统中一个棘手的现象——SDC(Silent Data Corruption)。另外,Google在NDSI 2024上还发表了一篇关于大规模集群训练容错设计的论文,后面有机会可以详细解读。
