vLLM 对 Muse Spark Open 的 Day 0 支持:816B-A42B MoE、DSpark 投机解码和 LoRA RL

vLLM 和 Meta Superintelligence Labs 发布了针对 Muse Spark Open 的 Day 0 支持,这是一个开放权重的稀疏专家混合模型,总参数为 816B,每个 token 激活 42B,专为长期代理式编码工作流而构建。这一发布意义重大,因为它将迄今为止最有能力的美国开放权重模型——Muse Glimmer 30B 就是从中蒸馏而来的——在权重发布的同一天,放在了 Nvidia、AMD 和 TPU 硬件上的生产级服务栈中。

Muse Spark Open 是什么

Muse Spark Open 是一个开放权重的稀疏专家混合(MoE)模型,专为长期代理式编码工作流而设计。vLLM 将其描述为迄今为止最有能力的美国开放权重模型,并指出 Muse Glimmer 30B 是从它蒸馏而来的。

主要规格如下:

  • 架构: 总参数 816B,每个 token 激活 42B,上下文窗口为 1M。
  • 量化: Meta 以 BF16 和 NVFP4 两种格式发布了模型。MXFP4 权重由 AMD 发布。
  • 多模态: 通过 Muse Glimmer 使用的相同感知编码器实现原生图像和视频感知,并额外支持音频。
  • 并行性: 在 Nvidia 和 AMD 上支持张量并行和流水线并行。在 Nvidia 上支持专家并行(EP)、TEP、DEP 和 PD 分离。TPU 上也有初步支持。
  • 投机解码: vLLM 团队训练的 DSpark 草稿模型,支持 CUDA 和 ROCm,并在 SPEED 基准上进行了测试。

如何运行

两个厂商都有预构建镜像:

  • Nvidia:vllm/vllm-openai:muse-spark-open
  • AMD:vllm/vllm-openai-rocm:muse-spark-open

该模型只有在 PR #61879 中的代码经过审查并合并后,才会出现在 nightly PyPI wheel 中,vLLM 表示这通常需要大约一周时间。

推荐的服务命令使用 Rust 前端,并启用专家并行、最大 1M token 的模型长度、Muse 推理和工具调用解析器,以及 DSpark 投机解码:

# 推荐使用 Rust 前端
export VLLM_USE_RUST_FRONTEND=1

vllm serve meta-models/Muse-Spark-Open-816B-A42B-NVFP4 \
    --tensor-parallel-size 8 \
    --enable-expert-parallel \
    --max-model-len 1048576 \
    --reasoning-parser muse \
    --tool-call-parser muse \
    --enable-auto-tool-choice \
    --speculative-config '{"method":"dspark","model": "Inferact/Muse-Spark-Open-DSpark","num_speculative_tokens":7,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'

纯文本请求可以将 reasoning_effort 设置为 xhigh:

curl http://localhost:8000/v1/chat/completions \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "meta-models/Muse-Spark-Open-816B-A42B-NVFP4",
      "messages": [{"role": "user", "content": "Refactor this module."}],
      "reasoning_effort": "xhigh"
    }'

多模态请求在单条消息中接受图像、视频和音频内容部分:

curl http://localhost:8000/v1/chat/completions \
   -H 'Content-Type: application/json' \
   -d '{
     "model": "meta-models/Muse-Spark-Open-816B-A42B",
     "messages": [{"role": "user", "content": [
       {"type": "image_url", "image_url": {"url": "https://example.com/screenshot.png"}},
       {"type": "video_url", "video_url": {"url": "https://example.com/demo.mp4"}},
       {"type": "audio_url", "audio_url": {"url": "https://example.com/clip.wav"}},
       {"type": "text",      "text": "What is happening here, and when?"}
     ]}]
   }'

模型架构:816B 参数分布在哪里

Muse Spark Open 是一个专家混合模型,总参数为 816B,包括文本解码器,外加一个 2B 的视觉编码器和一个小的音频编码器。解码器有 62 层,每一层都是专家混合层。

权重预算细分如下:

部分 大小
每层 256 个专家 799 B
注意力 13.5 B
MoE 潜空间投影 4.2 B
嵌入和输出层 3.3 B
视觉塔(独立) 1.9 B

该架构与 Muse Glimmer 类似,有三个值得理解的设计选择。

三明治归一化

大多数解码器在每个块之前放置一个归一化层,得到 x + F(norm(x))。Muse Spark Open 与 Muse Glimmer 一样,在块之前和之后各放置一个归一化层——“就像两片面包夹着块”——得到 x + post_norm(F(norm(x)))。

潜空间 MoE

每个 MoE 层都带有两个额外的矩阵,由该层的所有 256 个专家共享。代码称它们为池化器和反池化器,尽管两者都不是通常意义上的池化;它们都是学习到的投影,用于压缩和扩展维度。池化器是一个 8192 × 4096 的矩阵,在 token 到达专家之前将每个 token 的宽度减半,反池化器随后恢复完整宽度。因此,专家完全在 4096 维度而不是 8192 维度上工作,这实际上将两个专家投影层所需的参数数量减半。

混合滑动窗口和全注意力

层在全注意力和滑动窗口注意力(SWA)之间交替,以 4 为周期重复:三层关注 2048 个 token 的窗口,第四层关注整个上下文。该周期锚定在堆栈的末尾,因此最后一层始终是全注意力层。在 62 层中,这产生了 46 个窄层和 16 个宽层,其中窄层仅保留最近的 KV。在 1M 个 token 下,这将缓存减少到全注意力所需缓存量的四分之一以上——这就是让 1M 上下文长度变得可行的原因。

视觉和音频编码器

Muse Spark Open 使用与 Muse Glimmer 相同的感知编码器,这是一个 2B 参数的塔,以原生分辨率读取图像,而不是将其缩放到正方形。视频通过相同的编码器处理:帧在加载时作为一系列采样视频帧进行采样,时间戳被标记在提示中。

音频以 24 kHz 的原始波形读取,每 1920 个样本(80 毫秒)通过一系列变换变成一个 token。整个音频编码器只有 118M 参数。视频的音轨不会被处理:为了同时给模型提供剪辑的图片和声音,请将视频和提取的音频作为同一请求中的两个独立内容部分发送。

DSpark 投机解码

为了加速 vLLM 上的 Muse Spark Open 推理,团队使用 DSpark 训练了一个投机器,DSpark 是一种投机解码算法,使用块扩散在单次传递中提出最多七个草稿 token。基于置信度的调度有助于在批量大小较大时维持显著的加速,而传统的投机解码在这种情况下通常收益递减。

投机器还使用 Muse Spark Open 的滑动窗口注意力,即使在 1M token 的上下文中也能保持轻量级的草稿生成。这些选择共同使其适用于涵盖各种批量大小和上下文长度的生产工作负载。

DSpark 在服务器启动时启用,命令如下:

--speculative-config '{"method":"dspark","model": "Inferact/Muse-Spark-Open-DSpark","num_speculative_tokens":7,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'

硬件后端:Nvidia、AMD 和 TPU

Nvidia

Nvidia 团队通过融合归一化、门控和残差内核改进了 FlashInfer 和 vLLM 上的 Muse Spark Open 推理;融合的 MoE 终结与张量并行通信和 RMSNorm;新的低延迟 BF16 GEMM 实现和减少的编译开销;使用融合的 MNNVL 集合进行 TEP 池化器/反池化器分片;由范数的 FP32 输出驱动的 TF32 路由器 GEMM;以及数据移动、硬件支持和运行时可靠性的改进。

AMD

在 AMD 团队的支持下,Muse Spark Open 在 AMD Instinct MI355X GPU 上以 FP8 和 MXFP4 量化格式运行,提供了改进的推理性能和部署效率。ROCm 目前支持张量并行和流水线并行。

TPU

vLLM 在 TorchTPU 之上添加了对 TPU 上的 Muse Spark Open 的支持;代码访问需要联系 vLLM 或 Google。团队还为 Muse Spark Open 构建了 megakernels。使用 DSpark 投机解码,接受长度为 6 时,在 4 个 TPU v7 芯片上达到每秒超过 650 个 token,在 8 个芯片上超过每秒 960 个 token。没有投机解码时,它们仍然分别提供超过 270 和 350 个 token/秒。

vLLM 中的强化学习

vLLM 从 Day 0 开始支持 Muse Spark Open 上的 LoRA RL,作为 rollout 引擎,使用 Verl FSDP2 作为训练器。vLLM 提供原始的 NVFP4 检查点,并在其上应用 LoRA 适配器。训练器在相同权重的 BF16 反量化上运行,并且只更新适配器(秩 32,alpha 64),涵盖注意力、MoE 潜空间投影和所有路由专家。它还重放 rollout 的 MoE 路由(R3),并且每步后仅将适配器同步回 vLLM。

团队在 16 个 GB300 GPU 上使用 GRPO 在 DAPO-Math-17K 上训练了 150 步,每步为 32 个提示采样 8 个响应,每个响应最多 4K 个 token。AIME-2024(mean@8)的准确率从训练前的 0.56 提高到运行结束时的 0.85。在整个运行过程中,训练器和 vLLM 的对数概率之间的 k3 KL 保持在大约 2×10⁻⁴。更多细节可在 Verl PR #8257 中找到。在 vLLM 生态系统中,Titan RL 也使用 vLLM 作为其 rollout 引擎,提供 Day-0 RL 支持。

谁构建了它

vLLM 感谢 Meta Superintelligence Labs 和 vLLM 社区提供的 Day 0 支持,Inferact 训练了 DSpark 投机器并进行了 TPU 集成,NVIDIA 和 AMD 提供了硬件优化。

公告中列出的贡献者:

  • Inferact: Jie Li、Zifeng Mo、Zixi Qi、Jeff Ma、Ziqi Zhao、Dakai An、Ao Shen
  • Meta: Beto de Paola、Sidhartha Reddy Potu
  • Nvidia: Cyrus Chang、Duncan Moss、Marek Pikulski、Seong Hee Lee
  • AMD: Andy Luo、Hongxia Yang、Haichen Zhang

为什么这一发布很重要

Day 0 支持意味着服务路径、量化格式、并行策略、投机解码和 RL rollout 集成在权重发布的时刻就已存在,而不是数周之后。对于具有 1M token 上下文窗口的 816B 参数 MoE,混合注意力、潜空间 MoE 压缩和 DSpark 草稿生成的组合使模型实际上可部署,而不仅仅是可用。同时覆盖 Nvidia、AMD 和 TPU 也意味着模型不局限于单个加速器供应商。

Sources