vLLM AFD Plugin:針對 MoE 推論實現 Attention 與 FFN 解耦
vLLM AFD Plugin:針對 MoE 推論實現 Attention 與 FFN 解耦
vLLM 已發佈 vLLM AFD Plugin,這是一個實驗性的外部插件,為混合專家模型 (MoE) 實現了 Attention-FFN Disaggregation (AFD)。此架構將 Attention 與 Feed-Forward Network (FFN) 組件分離為獨立部署的服務,使其能夠根據各自的資源需求進行擴展,而無需更改 vLLM 的請求生命週期或 OpenAI 相容的服務介面。
Attention-FFN 解耦的原理
在 MoE 推論中,Attention 與 FFN 路徑具有根本不同的運作需求。Attention 是有狀態的,與請求調度及 KV cache 管理緊密相關;而 FFN (專家) 路徑則以路由計算和 all-to-all 通訊為主。
AFD 解決了四個主要的系統設計挑戰:
- 獨立擴展 (Independent Scaling): Attention 容量取決於序列長度和 KV-cache 壓力,而專家容量則取決於 token 路由與負載。AFD 允許這些路徑使用不同的 rank 拓撲結構。
- 執行期職責 (Runtime Responsibilities): 透過拆分服務,FFN 端可以作為輕量級的 connector 驅動守護進程運行,從而消除專家端對調度和 KV-cache 協調的需求。
- 後端特定通訊 (Backend-Specific Communication): 通用的 connector 協定允許不同的硬體後端(例如 CUDA 與 Ascend)實現各自優化的數據路徑與集合通訊庫 (collective libraries)。
- 計算與通訊重疊 (Computation-Communication Overlap): 非同步派遣 (asynchronous dispatch) 與 MoE ubatching 可以讓獨立階段重疊進行,防止 Attention 路徑將所有專家工作序列化。
系統架構
vLLM AFD Plugin 透過 vllm.general_plugins 入口點與 --additional-config 頻道進行整合,無需修改 vLLM 源碼樹。執行期由三個核心組件組成:
1. Attention Service
保留 vLLM 的調度器 (scheduler)、KV cache、批處理 (batching)、模型生命週期與採樣路徑。由插件擁有的 model runner 會將 AFD 元數據安裝到 forward context 中,並將狀態(data-parallel, ubatch, layer, and graph)發布給 FFN 服務。
2. FFN Service
在沒有請求流量、調度器或 KV caches 的情況下運行。它運行一個後台迴圈,接收元數據與 activations,透過插件擁有的 model wrapper 執行 compute_ffn_output(),並將結果返回給 Attention 服務。
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 吞吐量 (DeepSeek-V3.2 W8A8 於 Ascend 910C)
基準測試將傳統的 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 效能 (DeepSeek V3.2 W8A8 於 Ascend 910C)
一項使用 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 的封裝 (wrappers)。
- 硬體: NVIDIA GPUs 與 Ascend NPUs。
- 執行路徑: 支援 eager、graph 與 dual-batch 執行;同步 connector 支援 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 間延遲。