欢迎 Llama 4 Maverick 和 Scout 加入 Hugging Face
我们非常激动地欢迎 Meta 的下一代大型语言模型加入 Hugging Face Hub:Llama 4 Maverick (~400B) 和 Llama 4 Scout (~109B)! 🤗 两者都是专家混合 (MoE) 模型,具有 17B 个活跃参数。
今天发布的这些强大的、原生多模态模型代表着一个重大的飞跃。我们与 Meta 紧密合作,确保从第一天起就无缝集成到 Hugging Face 生态系统中,包括 transformers 和 TGI。
这只是我们与 Llama 4 合作的开始。在接下来的几天里,我们将继续与社区合作,使用 Maverick 和 Scout 构建令人惊叹的模型、数据集和应用程序!🔥
Llama 4 是什么?
Llama 4 由 Meta 开发,引入了一种新的自回归专家混合 (MoE) 架构。这一代包括两个模型:
- 功能强大的 Llama 4 Maverick,总参数约 400B,其中 17B 为活跃参数,拥有 128 位专家。
- 高效的 Llama 4 Scout 也拥有 17B 活跃参数,总参数约 109B,仅使用 16 位专家。
这两个模型都利用早期融合实现原生多模态,使其能够处理文本和图像输入。Maverick 和 Scout 都经过多达 40 万亿个 token 的数据训练,数据涵盖 200 种语言(并针对包括阿拉伯语、西班牙语、德语和印地语在内的 12 种语言提供特定微调支持)。
部署方面,Llama 4 Scout 专为可访问性而设计,可通过即时 4 位或 8 位量化在单个服务器级 GPU 上运行,而 Maverick 则提供 BF16 和 FP8 格式。这些模型根据自定义的 Llama 4 社区许可协议发布,可在模型存储库中查阅。
Hugging Face 上的功能和集成
为了帮助社区立即利用这些最先进的模型,我们很高兴宣布以下集成:
- Hub 上的模型检查点:Llama 4 Maverick 和 Llama 4 Scout 的模型权重都直接在 Hugging Face Hub 的
meta-llama
组织下提供。这包括基础模型和指令微调模型。这使得访问、探索和下载变得容易。您需要先接受模型卡上的许可条款才能访问权重。 - Hugging Face
transformers
集成:立即开始构建!Llama 4 模型已完全集成到transformers
(版本v4.51.0
) 中。这允许使用熟悉的 API 轻松加载、推理和微调,包括支持其原生多模态功能以及 TRL 等下游库。 - 自动支持张量并行和 transformers 中的自动设备映射。
- 文本生成推理 (TGI) 支持:为了实现优化和可扩展的部署,这两个模型都受 TGI 支持。这允许高吞吐量文本生成,从而更容易将 Llama 4 集成到生产应用程序中。
- 量化支持:Scout 提供了即时 int4 量化代码,可在最小化性能下降的同时,实现在较小的硬件占用空间上部署。Maverick 包含 FP8 量化权重,可在兼容硬件上高效部署。
- Xet 存储:为了改进上传、下载并支持社区微调模型的更快迭代,我们使用 Xet 存储后端启动了所有 Llama 4 模型。此存储系统专为更快的上传和下载而设计,使用 Llama 4 可实现约 25% 的重复数据删除。所有派生(微调、量化等)模型应具有更高的重复数据删除率(约 40%),从而为社区节省更多时间和带宽。
上下文长度和架构选择
Llama 4 模型经过预训练,上下文长度为 256K。指令模型经过微调以支持更大的上下文长度:在大型 128 专家版本(Maverick)中为 1M,在 16 专家版本(Scout)中为 10M (!)。
模型 | 指令版 | 上下文长度 |
---|---|---|
Scout (16E) | ✅ | 10M |
Maverick (128E) | ✅ | 1M |
Scout (16E) | 256K | |
Maverick (128E) | 256K |
这些大型上下文长度伴随着一些非常有趣的架构选择。在官方技术报告发布之前,这是我们目前所了解的。
- 无 RoPE (NoPE) 层
NoPE(可爱的名字,+1 魅力点),早在 2022 年就已探索过,它只是放弃了通常应用于 transformer 模型中的传统位置编码方案,例如 RoPE。在 Llama 4 的情况下,NoPE 层每 4 层使用一次。这些层对于长上下文至关重要,因为它们使用上下文上的完整因果掩码。
对于 RoPE 层(四分之三),使用*分块注意力*。
Meta 将 NoPE 层与温度缩放(如下所述)的*交错*使用称为 iRoPE
架构。
如果您想了解更多关于位置编码的信息,我们推荐阅读 Chris 最近的博文。
- 分块注意力(在 RoPE 层中)
为了降低内存需求,Llama 4 在使用传统 RoPE 位置编码的层(4 个解码器层中的 3 个)中使用了分块注意力。可视化分块注意力工作原理的最佳方式是查看从 transformers 源代码中提取的 ASCII 表示:
'What' : 0 ■ ⬚ ⬚ ⬚ ⬚ ⬚
'▁is' : 1 ■ ■ ⬚ ⬚ ⬚ ⬚
'▁ch' : 2 ■ ■ ■ ⬚ ⬚ ⬚
'unked' : 3 ⬚ ⬚ ⬚ ■ ⬚ ⬚
'▁attention': 4 ⬚ ⬚ ⬚ ■ ■ ⬚
'?' : 5 ⬚ ⬚ ⬚ ■ ■ ■
此图显示了如果分块注意力长度为 3,将使用的注意力掩码。在 Llama 4 的情况下,分块注意力长度为 8192
。这意味着 RoPE 层只能跟踪 8K 块中的上下文,而 NoPE 层可以访问完整上下文。您可以将其视为滑动窗口注意力的更内存和计算效率更高的版本。
- 注意力温度调优
应用于长上下文的注意力块存在一个问题:随着序列长度的增加,注意力概率分数会*衰减*趋近于零。这是对非常长的序列应用 *softmax* 函数的已知结果。为了解决这个问题,Llama 4 使用了缩放 softmax,模型称之为温度调优。这应用于 NoPE 层,但不应用于 RoPE 层,因为这些层处理较短的子序列。
这种方法是提高任意上下文长度泛化能力的一种方式,并且可能是 Llama 4 Scout 实现 10M 上下文长度的关键因素之一。
- QK 归一化
Llama Scout(16 专家版本)在 RoPE 层中,在应用 RoPE 嵌入之后,对查询 (Query) 和键 (Key) 状态使用额外的 RMS 归一化,且不带可学习参数。
- MoE 交错
Llama Scout 是一个完整的 MoE,由 16 位专家组成。Llama Maverick 使用 128 位专家,但 MoE 层和密集层交替使用。因此,专家应用于一半的层。
- 协同蒸馏
Llama Maverick 是从更大的模型 Llama Behemoth 中协同蒸馏而来,使用了新的损失函数,该函数动态地加权学生和教师的 logits。
- MetaP
这些模型利用了 MetaP,这是一种可能受到 MuP 启发的 методология,旨在在不同维度(包括训练预算和模型大小)上优化超参数。
如何与 Transformers 配合使用
使用 transformers
启动 Llama 4 非常简单。请确保您已安装 transformers v4.51.0
或更高版本(pip install -U transformers huggingface_hub[hf_xet]
)。这里有一个使用指令微调的 Maverick 模型响应两张图像的快速示例,使用张量并行以获得最大速度。您需要在具有 8 个 GPU 的实例上运行此脚本,命令如下:torchrun –nproc-per-instance=8 script.py
from transformers import AutoProcessor, Llama4ForConditionalGeneration
import torch
model_id = "meta-llama/Llama-4-Maverick-17B-128E-Instruct"
processor = AutoProcessor.from_pretrained(model_id)
model = Llama4ForConditionalGeneration.from_pretrained(
model_id,
attn_implementation="flex_attention",
device_map="auto",
torch_dtype=torch.bfloat16,
)
url1 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg"
url2 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/datasets/cat_style_layout.png"
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": url1},
{"type": "image", "url": url2},
{"type": "text", "text": "Can you describe how these two images are similar, and how they differ?"},
]
},
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=256,
)
response = processor.batch_decode(outputs[:, inputs["input_ids"].shape[-1]:])[0]
print(response)
print(outputs[0])
请务必查看仓库上的模型卡(Llama 4 Maverick (~400B) 和 Llama 4 Scout (~109B)),获取详细的使用说明,包括多模态示例、特定提示格式(如系统提示)、量化细节和高级配置选项!
评估得分
评估结果证实了这些模型的强大性能,显示出显著优于 Llama 3.1 405B 等前代模型的最先进性能。例如,在推理和知识任务上,经过指令微调的 Maverick 在 MMLU Pro 上取得了 80.5% 的成绩,在 GPQA Diamond 上取得了 69.8% 的成绩,而 Scout 则分别取得了 74.3% 和 57.2% 的成绩。
点击展开评估结果
预训练模型
类别 | 基准测试 | # 样本数 | 指标 | Llama 3.1 70B | Llama 3.1 405B | Llama 4 Scout | Llama 4 Maverick |
---|---|---|---|---|---|---|---|
推理与知识 | MMLU | 5 | macro_avg/acc_char | 79.3 | 85.2 | 79.6 | 85.5 |
MMLU-Pro | 5 | macro_avg/em | 53.8 | 61.6 | 58.2 | 62.9 | |
MATH | 4 | em_maj1@1 | 41.6 | 53.5 | 50.3 | 61.2 | |
代码 | MBPP | 3 | pass@1 | 66.4 | 74.4 | 67.8 | 77.6 |
多语言 | TydiQA | 1 | average/f1 | 29.9 | 34.3 | 31.5 | 31.7 |
图像 | 图表问答 | 0 | relaxed_accuracy | 无多模态支持 | 83.4 | 85.3 | |
DocVQA | 0 | anls | 89.4 | 91.6 |
指令微调模型
类别 | 基准测试 | # 样本数 | 指标 | Llama 3.3 70B | Llama 3.1 405B | Llama 4 Scout | Llama 4 Maverick |
---|---|---|---|---|---|---|---|
图像推理 | MMMU | 0 | 准确率 | 无多模态支持 | 69.4 | 73.4 | |
MMMU Pro^ | 0 | 准确率 | 52.2 | 59.6 | |||
MathVista | 0 | 准确率 | 70.7 | 73.7 | |||
图像理解 | 图表问答 | 0 | relaxed_accuracy | 88.8 | 90.0 | ||
DocVQA(测试) | 0 | anls | 94.4 | 94.4 | |||
编程 | LiveCodeBench (2024 年 10 月 1 日 – 2025 年 2 月 1 日) | 0 | pass@1 | 33.3 | 27.7 | 32.8 | 43.4 |
推理与知识 | MMLU Pro | 0 | macro_avg/em | 68.9 | 73.4 | 74.3 | 80.5 |
GPQA Diamond | 0 | 准确率 | 50.5 | 49.0 | 57.2 | 69.8 | |
多语言 | MGSM | 0 | 平均/em | 91.1 | 91.6 | 90.6 | 92.3 |
长上下文 | MTOB(半书)英→kgv/kgv→英 | - | chrF | 上下文窗口为 128K | 42.2/36.6 | 54.0/46.4 | |
MTOB(全书)英→kgv/kgv→英 | - | chrF | 39.7/36.3 | 50.8/46.7 |
致谢
发布 Llama 4 这样的巨型模型需要团队、地理区域和大量虚拟机之间的巨大努力。我们想特别感谢 Transformers 团队的 Arthur、Lysandre、Cyril、Pablo、Marc 和 Mohammed。我们感谢 vLLM 团队在这次充满挑战的紧张集成过程中,进行了丰富的讨论、提供了深入的见解、分享了测试和调试经验。由于有更大的优化需求,我们感谢 Mohit 单枪匹马地在 TGI 中添加了对 Llama 4 的支持。这些庞大的模型需要在存储级别进行一些严肃的工程。这也耗费了 Ajit、Rajat、Jared、Di、Yucheng 和 Xet 团队其他成员的大量精力。
这项工作涉及许多人,非常感谢 Hugging Face、vLLM 和 Meta Llama 团队的其他成员,感谢你们出色的协同作用!