欢迎 Llama 4 Maverick 和 Scout 加入 Hugging Face

发布于 2025 年 4 月 5 日
在 GitHub 上更新

我们非常激动地欢迎 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 团队的其他成员,感谢你们出色的协同作用!

参考

社区

这个脚本对我不起作用。我收到以下错误

ValueError: Unrecognized image processor in meta-llama/Llama-4-Maverick-17B-128E-Instruct. Should have a `image_processor_type` key in its preprocessor_config.json of config.json, or one of the following `model_type` keys in its config.json: align, aria, beit, bit, blip, blip-2, bridgetower, chameleon, chinese_clip, clip, clipseg, conditional_detr, convnext, convnextv2, cvt, data2vec-vision, deformable_detr, deit, depth_anything, depth_pro, deta, detr, dinat, dinov2, donut-swin, dpt, efficientformer, efficientnet, flava, focalnet, fuyu, gemma3, git, glpn, got_ocr2, grounding-dino, groupvit, hiera, idefics, idefics2, idefics3, ijepa, imagegpt, instructblip, instructblipvideo, kosmos-2, layoutlmv2, layoutlmv3, levit, llama4, llava, llava_next, llava_next_video, llava_onevision, mask2former, maskformer, mgp-str, mistral3, mllama, mobilenet_v1, mobilenet_v2, mobilevit, mobilevitv2, nat, nougat, oneformer, owlv2, owlvit, paligemma, perceiver, phi4_multimodal, pix2struct, pixtral, poolformer, prompt_depth_anything, pvt, pvt_v2, qwen2_5_vl, qwen2_vl, regnet, resnet, rt_detr, sam, segformer, seggpt, shieldgemma2, siglip, siglip2, superglue, swiftformer, swin, swin2sr, swinv2, table-transformer, timesformer, timm_wrapper, tvlt, tvp, udop, upernet, van, videomae, vilt, vipllava, vit, vit_hybrid, vit_mae, vit_msn, vitmatte, xclip, yolos, zoedepth

fly-int4-quantization 的代码在哪里?我有 2 块 H100 NVL 94Gb 400W GPU。我可以加载 llama-4-scout-instruct 吗?

注册登录发表评论