vLLM AFD Plugin:为 MoE 推理实现 Attention 与 FFN 解耦

vLLM AFD Plugin:为 MoE 推理实现 Attention 与 FFN 解耦

vLLM 发布了 vLLM AFD Plugin,这是一个实验性的外部插件,为混合专家模型 (MoE) 实现了 Attention-FFN 解耦 (Attention-FFN Disaggregation, AFD)。该架构将 Attention 和 Feed-Forward Network (FFN) 组件分离为独立部署的服务,使它们能够根据各自的资源需求进行扩展,而无需更改 vLLM 的请求生命周期或 OpenAI 兼容的推理接口。

Attention-FFN 解耦的原理

在 MoE 推理中,Attention 和 FFN 路径具有根本不同的运行需求。Attention 是有状态的,与请求调度和 KV cache 管理紧密相关;而 FFN (专家) 路径则由路由计算和 all-to-all 通信主导。

AFD 解决了四个主要的系统设计挑战:

  • 独立扩展: Attention 容量取决于序列长度和 KV-cache 压力,而专家容量取决于 token 路由和负载。AFD 允许这些路径使用不同的 rank 拓扑结构。
  • 运行时职责: 通过拆分服务,FFN 端可以作为一个轻量级的连接器驱动守护进程运行,从而消除了专家端对调度和 KV-cache 协调的需求。
  • 后端特定通信: 通用的连接器契约允许不同的硬件后端(例如 CUDA 和 Ascend)实现其各自优化的数据路径和集合通信库。
  • 计算与通信重叠: 异步分发和 MoE ubatching 可以使独立阶段重叠,防止 Attention 路径被所有的专家工作序列化。

系统架构

vLLM AFD Plugin 通过 vllm.general_plugins 入口点和 --additional-config 渠道进行集成,无需修改 vLLM 源码树。运行时由三个核心组件组成:

1. Attention Service

保留 vLLM 的调度器、KV cache、批处理、模型生命周期和采样路径。插件拥有的 model runner 会将 AFD 元数据安装到 forward context 中,并将状态(data-parallel, ubatch, layer, and graph)发布到 FFN service。

2. FFN Service

在没有请求流量、调度器或 KV caches 的情况下运行。它运行一个后台循环,接收元数据和 activations,通过插件拥有的 model wrapper 执行 compute_ffn_output(),并将结果返回给 Attention service。

3. Connector Layer

作为每个拆分层的桥梁,将隐藏状态 (hidden states) 和执行元数据从 Attention 传输到 FFN,并返回计算后的输出。

Connector 与后端支持矩阵

Connector Backend Execution Recommended Stage Graph Support
P2pNcclAFDConnector GPU Synchronous P2P Decode FULL_DECODE_ONLY CUDA graph
CAMP2pAFDConnector NPU Synchronous CAMP2P/HCCL Decode FULL_DECODE_ONLY ACL graph
CAMAsyncAFDConnector NPU Asynchronous CAM Prefill Not supported

性能基准测试

同步 Decode 吞吐量 (Ascend 910C 上的 DeepSeek-V3.2 W8A8)

基准测试将传统的 EP64 部署与使用 CAMP2pAFDConnector 的 AFD 部署进行了比较。结果显示,Attention 与 FFN ranks 的比例会显著影响归一化吞吐量 (tokens/s/die)。

  • 16K 固定输入: 64A16F 配置(64 Attention, 16 FFN ranks)实现了 258.9 tokens/s/die,比 EP64 基准 (232.6 tokens/s/die) 提升了 11.3%。48A16F 配置的表现较差,为 220.3 tokens/s/die (-5.3%)。
  • 32K 固定输入: 64A16F 配置实现了 183.3 tokens/s/die,比 EP64 基准 (168.2 tokens/s/die) 提升了 9.0%。48A16F 配置比基准低 10.0%。

这些结果表明,单靠解耦并不能保证收益;Attention 和 FFN 之间具体的 rank 分配至关重要。

异步 Prefill 性能 (Ascend 910C 上的 DeepSeek V3.2 W8A8)

使用 CAMAsyncAFDConnector 在一个 10 层缩减模型上进行的早期实验,将 DP4PCP8 TP1 基准与 AFD 布局(Attention DP3PCP8 TP1 + FFN EP8)进行了比较。

在每秒 12 个请求的请求率下,中值首字延迟 (TTFT) 从 15.1 秒降低到 8.0 秒,降幅约为 47%

实现与路线图

当前支持

  • 模型: DeepSeek V2/V3 系列(包括 DeepSeek V3.2)和 GLM MoE DSA 的封装。
  • 硬件: NVIDIA GPUs 和 Ascend NPUs。
  • 执行路径: 支持 eager、graph 和 dual-batch 执行;同步连接器支持 decode-only graph capture。
  • 要求: Python 3.10–3.13 和 vLLM 0.19.1

未来发展

  • 上游对齐: 跟进最新的 vLLM 版本并评估 model runner v2。
  • 执行灵活性: 扩展 graph 模式、ubatch 数量和异步阶段。
  • 生产验证: 在全量模型和真实工作负载上发布稳定性、准确性和延迟结果。
  • 扩大覆盖范围: 增加更多 MoE 架构和后端传输方式。
  • 多模态集成: 探索 AFD 在 vLLM-Omni 中自回归 (AR) 和 Diffusion Transformer (DiT) 阶段的应用。
  • 异构硬件: 研究在不同加速器类型上部署 Attention 和 FFN 角色,以降低 TTFT 和 token 间延迟。

Sources