hao-ai-lab/FastAFD

GitHub: hao-ai-lab/FastAFD

一个面向大规模 MoE 模型推理的 Attention-FFN 分离服务系统,通过跨节点拆分注意力与专家网络来显著提升单 GPU 解码吞吐量。

Stars: 3 | Forks: 0

FastAFD

面向 MoE 服务的高效 Attention–FFN 分离架构

| 博客 | X |

FastAFD 是一个开源服务系统,专为 MoE 模型的**大规模 Attention–FFN 分离 (AFD)** 设计。 ## 新闻 - **[2026-07-07]** FastAFD 正式开源 — 在 Blackwell NVL72 上相比混合部署的 MoE 服务,实现了 **1.3–1.5 倍的单 GPU 解码吞吐量** ## 目录 - [FastAFD 工作原理](#how-fastafd-works) - [核心技术](#key-techniques) - [N2M/M2N MoE Megakernel](#n2mm2n-moe-megakernel) - [Micro-Batch 乒乓重叠](#micro-batch-ping-pong-overlap) - [零开销集群调度](#zero-overhead-cluster-coordination) - [测试结果](#results) - [快速上手](#getting-started) - [安装](#install) - [支持的模型](#supported-models) - [快速入门](#quickstart) - [正确性对齐](#correctness-alignment) - [大规模 AFD 实验](#large-scale-afd-experiments) - [致谢](#acknowledgements) - [引用](#citation) ## FastAFD 工作原理

FastAFD Attention-FFN disaggregation

FastAFD 将 MoE 解码拆分为 **attention 服务器**和 **MLP 服务器**。 Attention 服务器负责 KV-cache 注意力机制、路由和采样;MLP 服务器 汇聚来自多个 attention 服务器的路由隐藏状态并运行专家网络。 Micro-batch 重叠了分发、专家计算和合并操作,使得 MLP 端 在激活值传输期间依然能保持高密度计算。 ## 核心技术 ### N2M/M2N MoE Megakernel FastAFD 将 AFD 边界映射到一个非对称的 DeepEP 风格分发/合并 路径。在 N2M 阶段,attention rank 发送路由后的激活值,MLP rank 接收 专家输入;在 M2N 阶段,MLP rank 返回合并后的输出,attention rank 接收层结果。在 MLP 端,FastAFD 将反复执行的接收、分组、专家计算、合并和回传循环作为一个角色专属的 MoE 路径运行,从而减少了 kernel 启动次数和同步点。 ### Micro-Batch 乒乓重叠

FastAFD micro-batch pipeline

FastAFD 将每个解码 batch 拆分为多个 micro-batch,使得 N2M 分发、专家 计算、M2N 回传以及 attention 端的任务在不同层之间实现重叠执行,避免了在每个 AFD 边界处发生串行化。 ### 零开销集群调度

FastAFD zero-overhead coordinator
FastAFD Nsight Systems trace

FastAFD 会在 GPU 执行当前解码计划的同时,提前准备下一个解码计划。 协调器会提前一步发布 micro-batch 顺序、缓冲区槽位、请求归属以及 节点的元数据,从而确保调度工作完全置身于解码的关键路径之外。 ## 测试结果

FastAFD throughput improvement over colocated MoE serving

在 GB200 NVL72 上,针对 Qwen3-235B-A22B-FP8 和 MiniMax-M2.5,FastAFD 相比混合部署的 MoE 服务,将单 GPU 解码吞吐量提升了 **1.35–1.45 倍**。 ## 快速上手 FastAFD 目前已在搭载 CUDA 13.0 的 `aarch64` 架构上完成验证。为了与当前的运行时脚本保持兼容,conda 环境被命名为 `minisgl-cuda130`。 ### 安装 ``` conda env create -f environment.cuda130.yml ./scripts/enter_clean.sh minisgl-cuda130 pip install -e . ``` 如果您想运行正确性对齐检查,请在同一个干净的环境中安装 vLLM: ``` python -m pip install \ "https://github.com/vllm-project/vllm/releases/download/v0.19.0/vllm-0.19.0+cu130-cp38-abi3-manylinux_2_35_aarch64.whl" \ --extra-index-url https://download.pytorch.org/whl/cu130 ``` 然后应用 AFD/DeepEP 路径所需的运行时覆盖配置: ``` python -m pip install --no-cache-dir --force-reinstall --no-deps \ "nvidia-nccl-cu13==2.30.4" \ "setuptools==80.10.2" \ "fsspec==2026.2.0" ``` 启用对齐功能时,已验证的依赖包版本为 `torch 2.10.0+cu130`、`triton 3.6.0`、`nvidia-nccl-cu13 2.30.4` 以及 `vllm 0.19.0+cu130`。 ### 支持的模型 - 快速入门与正确性验证:`Qwen/Qwen3-30B-A3B-Instruct-2507` - 已发布的扩展预设:Qwen3-235B-A22B-FP8 和 MiniMax-M2.5-FP8 ### 快速入门 ``` ./scripts/quickstart/qwen3_30b_a3b_sample.sh ``` 这将启动一个本地的 mini-sgl 服务器,采样 Qwen3-30B-A3B 的提示词集,并将生成的工件写入 `reports/` 目录下。 ### 正确性对齐 ``` ./scripts/validate/qwen3_30b_a3b_alignment.sh ./scripts/validate/qwen3_30b_a3b_fastafd_alignment.sh ``` 第一个脚本用于检查 mini-sgl 与 vLLM 的一致性(单节点,通过 `mp` 后端使用 4 个 GPU)。第二个脚本用于检查 FastAFD 服务路径与 vLLM 的一致性,需要一个至少拥有 8 个 GPU 的运行中的 Ray 集群(attention TP 4 + MLP TP 4)。 这两个对齐命令都是轻量级的 30B 预设,它们会调用一个可复用的验证脚本 `scripts/validate/fastafd_vllm_alignment.sh`。该脚本可以将 FastAFD 服务路径与 vLLM 针对任意模型或任意 AFD attention/MLP 布局进行对齐验证。如果需要验证其他模型或自定义的拆分方式,可以直接调用它(不带参数运行可查看完整的选项列表): ``` ./scripts/validate/fastafd_vllm_alignment.sh \ --env minisgl-cuda130 --model \ --prompt-file \ --attn-tp-size 4 --mlp-tp-size 4 --afd-mlp-ep-size 4 \ --afd-max-running-requests 64 --sample-concurrency 64 \ --max-new-tokens 64 ``` ### 大规模 AFD 实验 预设脚本位于 `scripts/experiments/afd/` 目录下,并假定您已经启动了一个 Ray GPU 集群,且该集群是在激活的 `minisgl-cuda130` 环境中启动的。节点会通过 `RAY_ADDRESS=auto` 自动发现(最后一个节点 = MLP,其余节点 = attention);在多节点集群中,建议使用共享的本地 `MODEL_PATH` 快照,以避免为每个 rank 单独解析 Hugging Face 缓存。 包含 512 个提示词的长上下文缓存随项目提供在 `prompts/` 目录下。仅在需要时重新生成它们(16K 缓存使用 `--target-tokens 16384` 并添加 `--min-source-tokens 20000`): ``` PYTHONPATH=python python scripts/data_gen/generate_realistic_long_prompts.py \ --model Qwen/Qwen3-235B-A22B-FP8 --target-tokens 8192 --count 512 \ --output prompts/prompts_512x8192_seed20260527.txt --seed 20260527 ``` 运行一个预设(最少的 4 节点配置,不进行 vLLM 评分或 Nsight 性能分析): ``` MODEL_PATH=/path/to/Qwen3-235B-A22B-FP8 AFD_TOTAL_NODES=4 \ RUN_VLLM_ALIGNMENT=0 NSYS=0 \ bash scripts/experiments/afd/qwen3_235b/run_afd_qwen3_235b_a22b_fp8_8k_b96_dynamicnode_mb2_nsys_alignment.sh ``` 可选的环境变量参数: | 环境变量 | 作用 | |---|---| | `MODEL_PATH` | 本地权重快照(多节点推荐使用;离线环境必须使用,例如 MiniMax-M2.5)。 | | `AFD_NODE_LIST` / `AFD_MLP_NODE` | 显式指定节点部署,而不是依赖 Ray 自动发现(例如 `node0,node1,node2,node3` / `node3`)。 | | `RUN_VLLM_ALIGNMENT=1` | 将 FastAFD 的输出与专家并行的 vLLM 基准进行交叉验证(见下文)。 | | `NSYS=1` + `MINISGL_RAY_NSYS_BIN=/path/to/nsys` | 捕获 Nsight Systems 跟踪数据。 | 可用的预设配置: | 模型 | 上下文 | 默认工作负载 | 脚本 | |---|---:|---|---| | Qwen3-235B-A22B-FP8 | 8K | 每个 attention GPU 96 个请求 | `scripts/experiments/afd/qwen3_235b/run_afd_qwen3_235b_a22b_fp8_8k_b96_dynamicnode_mb2_nsys_alignment.sh` | | Qwen3-235B-A22B-FP8 | 16K | 每个 attention GPU 48 个请求 | `scripts/experiments/afd/qwen3_235b/run_afd_qwen3_235b_a22b_fp8_16k_b48_dynamicnode_mb2_nsys_alignment.sh` | | MiniMax-M2.5-FP8 | 8K | 每个 attention GPU 72 个请求 | `scripts/experiments/afd/minimax_m25/run_afd_minimax_m25_fp8_8k_b72_dynamicnode_mb2_nsys_alignment.sh` | | MiniMax-M2.5-FP8 | 16K | 每个 attention GPU 36 个请求 | `scripts/experiments/afd/minimax_m25/run_afd_minimax_m25_fp8_16k_b36_dynamicnode_mb2_nsys_alignment.sh` | **vLLM 交叉验证 (`RUN_VLLM_ALIGNMENT=1`)。** 通过专家并行的 vLLM 基准进行评分 (`--all2all-backend deepep_low_latency --moe-backend deep_gemm`), 这需要在同一环境中安装两个可选的 kernel 包:`deep_ep` (全互连分发/合并)和 `deep_gemm`(FP8 分组 GEMM 专家网络 — vLLM 仅在 `import deep_gemm` 成功时才会启用其 `BATCHED_DEEPGEMM` MoE 后端, 否则引擎将无法启动)。可以通过 vLLM 的 [`tools/ep_kernels`](https://github.com/vllm-project/vllm/blob/main/tools/ep_kernels/README.md) 安装这两个包,或者从源码编译 `deep_gemm`(在 [DeepGEMM](https://github.com/deepseek-ai/DeepGEMM) 克隆目录中执行 `pip install --no-deps .`)。这两个包 与 FastAFD 服务路径相互独立,后者使用其自带的内置 kernel。在内存较为紧张的 节点上,可以通过 `VLLM_EXTRA_ARGS` 降低 `--gpu-memory-utilization`(例如降至 `0.85`),以避免在捕获 CUDA-graph 时发生 OOM。 每个预设脚本在启动时都会打印所选的拓扑结构和输出目录。完整的 脚本映射请参见 `scripts/README.md`。 ## 致谢 FastAFD 基于受 [SGLang](https://github.com/sgl-project/sglang) 启发的 [mini-sglang](python/minisgl) 服务代码库发展而来,并汲取了更广泛的开源 LLM 系统社区的 理念与组件,在此特别感谢 [DeepEP](https://github.com/deepseek-ai/DeepEP)、 [DeepGEMM](https://github.com/deepseek-ai/DeepGEMM)、 [vLLM](https://github.com/vllm-project/vllm)。 ## 引用 如果您觉得 FastAFD 对您有帮助,请引用: ``` @misc{fastafd2026, title = {FastAFD: Open-Source Large-Scale Attention-FFN Disaggregation on Blackwell NVL72}, author = {Fu, Yichao and Zhang, Yuxuan and Wang, Ruitian and Chen, Junda and Zhang, Hao}, year = {2026}, url = {https://github.com/hao-ai-lab/FastAFD}, note = {Technical blog and open-source release} } ```
标签:AI基础设施, DLL 劫持, MoE架构, Vectored Exception Handling, 人工智能, 凭据扫描, 大语言模型, 模型推理, 注意力机制, 用户模式Hook绕过, 逆向工具, 高性能计算