发表时间: 2026-07 · Blog post by AFD Plugin Contributors (blog.vllm.ai)
原文: https://blog.vllm.ai/blog/2026-07-23-vllm-afd-plugin
作者/机构:AFD Plugin Contributors
一句话结论
vLLM AFD Plugin 通过将混合专家模型中的注意力机制与前馈神经网络拆分为可独立扩展的服务,在保持原有服务接口不变的前提下,显著提升了长上下文解码吞吐量并降低了首字延迟。
要解决什么问题
在混合专家模型(MoE)的推理过程中,Transformer 层内的注意力机制(Attention)和前馈神经网络(FFN)具有完全不同的系统扩展需求与运行时特征,而现有的服务系统强制它们共享相同的计算节点拓扑,导致资源分配严重受限。具体而言,Attention 是有状态的,其显存和计算压力高度依赖于请求调度、序列长度以及 KV Cache 的占用;而 FFN(即专家路径)则是无状态的,其性能瓶颈主要在于路由专家的计算负载和节点间的全对全通信。当这两种机制绑定在同一组 worker 上时,系统无法为它们分别制定最优的并行策略。例如,随着上下文长度增加,Attention 需要更多的节点来分担 KV Cache 压力,但 FFN 并不需要同步扩容;反之,当专家数量增加时,FFN 需要更大的专家并行度,但这会无谓地增加 Attention 的通信开销。这种架构上的强绑定使得系统在面对不同负载时,只能做出妥协性的扩展选择,无法同时最大化两者的硬件利用率。
怎么做的
核心思路是引入注意力与前馈网络解耦架构(Attention-FFN Disaggregation,简称 AFD),将 Attention 和 FFN 剥离为两个独立部署、独立扩展的服务,并通过一个极窄的连接器接口进行通信。这种设计绕开了原有拓扑绑定的卡点,使得 Attention 节点可以根据 KV Cache 压力横向扩展,而 FFN 节点可以根据专家路由负载独立配置并行度。系统主要由三个关键部件构成。首先是 Attention 服务,它保留了 vLLM 原有的请求生命周期管理,全权负责调度器、KV Cache、批处理和采样逻辑;在执行前向传播时,插件注入的模型运行器会将激活值与 AFD 元数据打包。其次是 FFN 服务,它被设计为一个轻量级的后台守护进程,完全不处理外部请求,也没有调度器和 KV Cache,仅负责接收元数据和隐藏层状态,执行路由计算后将结果返回。最后是连接器层,它定义了两个服务之间的数据交换契约,允许不同硬件后端实现专属的通信优化。为了量化解耦后的资源效率,系统使用单芯片吞吐量作为核心评估指标:
此外,针对通信与计算的重叠问题,系统设计了同步和异步两种执行路径。在同步解码场景下,GPU 使用 P2pNcclAFDConnector,NPU 使用 CAMP2pAFDConnector,在层级别同步交换隐藏层状态;在异步预填充场景下,NPU 使用 CAMAsyncAFDConnector 结合 MoE 微批处理技术,将独立的 Attention 和 FFN 阶段重叠执行,从而消除流水线停顿。
效果如何
实验在 Ascend 910C 硬件上进行,测试模型为 DeepSeek-V3.2 W8A8。在同步解码吞吐量测试中,基线方法为传统的 EP64 部署(代表 Attention 和 FFN 共享 64 个芯片的常规路由路线)。在 16K 固定输入长度下,基线单芯片吞吐量为 232.6 tokens/s/die;当采用 64 个 Attention 节点与 16 个 FFN 节点的 AFD 部署(64A16F)时,吞吐量提升至 258.9 tokens/s/die(提升 11.3%);在 32K 输入下,64A16F 同样比基线提升了 9.0%。在异步预填充性能测试中(使用裁剪至 10 层的模型),基线为 DP4PCP8 TP1 布局,对比的 AFD 布局为 Attention DP3PCP8 TP1 加上 FFN EP8。在每秒 12 个请求的压力下,AFD 将中位数首字延迟从 15.1 秒降至 8.0 秒,降幅达 47%。作者也坦诚了该方法的代价与局限性:解耦本身不保证性能提升(例如 48A16F 配置下的吞吐量反而下降了 5.3% 到 10.0%,说明 Attention 与 FFN 的配比至关重要);当前实现处于实验阶段,强依赖 vLLM 0.19.1 版本;Attention 和 FFN 节点目前都需要加载完整的模型权重;图模式仅支持纯解码阶段;且为了在有限机器上模拟大规模部署,实验使用了强制专家负载均衡机制,这会改变模型的实际输出结果。
混合专家(Mixture-of-Experts, MoE)模型的推理在Transformer层中结合了两种截然不同的计算工作负载:Attention(注意力机制)是状态相关的,与请求调度和KV Cache紧密耦合;而FFN(前馈神经网络)或专家路径则主要由路由专家计算和全对全(all-to-all)通信主导。当这两条路径共享相同的Worker拓扑结构时,服务系统必须为具有完全不同需求的负载做出统一的扩展和执行选择,这导致了效率的妥协。
为了解决这一问题,本文推出了vLLM AFD Plugin(vLLM AFD插件),这是一个实验性的外部插件,旨在将Attention与FFN解耦(Attention-FFN Disaggregation, AFD)引入vLLM生态。该插件通过将Attention和FFN分离为可独立部署的服务,在保留vLLM现有的请求生命周期和兼容OpenAI的服务接口的同时,允许Attention和FFN路径独立进行扩展。目前该项目支持NVIDIA GPU和Ascend NPU,提供同步和异步连接器,支持DeepSeek V2/V3系列模型封装,并在明确验证的限制范围内支持Eager模式、图模式以及双批处理(dual-batch)执行路径。
实现Attention与FFN的解耦需要解决多个系统设计层面的挑战,这些挑战和观察构成了AFD的核心设计原则:
综合上述挑战,AFD确立了其核心设计目标:保持vLLM原有面向请求的Attention路径完好无损,同时将FFN的执行转移到一个狭窄的连接器接口之后,使得FFN能够独立地进行扩展、通信和执行。
vLLM AFD插件的运行时架构设计保持了极小的侵入性。插件通过vLLM的vllm.general_plugins入口点和标准的--additional-config通道进行集成,完全不需要修改vLLM的源代码树。
运行时的核心架构由以下三个主要部分组成:
compute_ffn_output()函数,随后将计算结果发送回Attention端。所有外部请求始终只发送给Attention API服务器。这种集成界面的设计被刻意保持在最小范围。vLLM继续负责其现有抽象所适用的服务控制平面,而插件则提供AFD Workers、模型运行器、连接器、元数据、模型分割点以及少量受版本范围限制的兼容性补丁的实现。
连接器与后端支持
相同的顶层数据交换逻辑(将Attention输出发送给FFN,将FFN输出返回给Attention)在所有连接器之间共享。为了防止CUDA图行为、ACL图行为、NCCL通信以及Ascend自定义算子相互泄漏,不同的后端包被严格保持独立。当前支持的连接器矩阵如下:
FULL_DECODE_ONLY的CUDA图。FULL_DECODE_ONLY的ACL图。支持的核心特性
vllm serve启动服务,向兼容OpenAI的端点发送请求,并通过--additional-config配置运行时。P2pNcclAFDConnector和CAMP2pAFDConnector同步交换Attention激活值和FFN输出,允许这两个角色在面向吞吐量的Decode部署中独立扩展。它们当前的图路径分别在CUDA和ACL上使用FULL_DECODE_ONLY语义。CAMAsyncAFDConnector利用CAM异步分发和合并算子,将Prefill阶段的Attention Ranks与专家Workers解耦。结合AFD管理的MoE微批处理,它能重叠独立的Attention和FFN阶段,从而减少流水线停顿。该路径目前主要针对Prefill/Decode解耦部署中的Prefill阶段,暂不支持图执行。CAMP2pAFDConnector)CAMP2pAFDConnector的AFD部署架构。物理拓扑包括:EP64(DP64, EP64, TP1,共64个Die)、48A16F(48个Attention Ranks, 16个FFN Ranks,共64个Die)、64A16F(64个Attention Ranks, 16个FFN Ranks,共80个Die)。由于机器数量限制,物理上的48A16F和64A16F部署用于模拟逻辑上的192A64F和256A64F规模。实验将自然的路由专家ID替换为确定性的强制平衡循环(这会改变模型输出,因此仅为性能测试),由AFDDecodeBenchConnector提供仅Decode的KV状态,并为AFD启用了DBO。16K固定输入长度结果:
EP64基线实现了232.6 tokens/s/die,48A16F实现了220.3 tokens/s/die,而64A16F实现了258.9 tokens/s/die。相对于EP64,48A16F的性能下降了-5.3%,而64A16F的性能提升了+11.3%。
32K固定输入长度结果:
EP64基线实现了168.2 tokens/s/die,48A16F实现了151.4 tokens/s/die,而64A16F实现了183.3 tokens/s/die。相对于EP64,48A16F的性能下降了-10.0%,而64A16F的性能提升了+9.0%。
结论分析:在两种输入长度下,48A16F的表现均低于EP64基线,而64A16F提供了最高的归一化吞吐量(16K时+11.3%,32K时+9.0%)。这表明Attention与FFN的分配比例至关重要,仅仅进行解耦并不能保证吞吐量的提升。观察到的趋势暗示,在测试的比例下,FFN Ranks仍然具有计算余量,并未成为计算瓶颈。因此,进一步增加Attention Ranks的比例可能会带来更多的吞吐量提升。
CAMAsyncAFDConnector)DP4PCP8 TP1与由Attention DP3PCP8 TP1加上FFN EP8组成的AFD布局。vLLM AFD插件通过解耦Attention和FFN,为MoE模型提供了更灵活的扩展和部署方式。项目目前的边界被有意限制在:精确绑定vLLM版本(0.19.1)、仅支持model runner v1、双端均加载完整权重、仅支持Decode图模式、DBO固定为两个微批处理,以及受硬件限制的端到端测试。
未来的开发路线图将聚焦于以下几个方面:
环境依赖与安装
当前实现要求使用Python 3.10–3.13环境,并明确指定针对vLLM的0.19.1版本。详细的安装步骤需要参考代码仓库中的README文件。
部署配方(Deployment Recipes)
部署命令高度依赖于后端、连接器、模型以及Rank拓扑结构。项目维护了专门的AFD插件配方目录供用户参考:
社区参与
vLLM AFD插件目前处于早期阶段,极其依赖来自模型、服务和硬件社区的反馈来塑造其发展方向。相关的代码、文档(包括GPU和Ascend的详细设计文档)、Issue追踪和功能请求均已在GitHub开源(github.com/vllm-project/afd-plugin),旨在共同构建一个更具组合性且硬件感知的MoE服务未来。