hao-ai-lab/FastAFD
GitHub: hao-ai-lab/FastAFD
一个面向大规模 MoE 模型推理的 Attention-FFN 分离服务系统,通过跨节点拆分注意力与专家网络来显著提升单 GPU 解码吞吐量。
Stars: 3 | Forks: 0
面向 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 将 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 将每个解码 batch 拆分为多个 micro-batch,使得 N2M 分发、专家
计算、M2N 回传以及 attention 端的任务在不同层之间实现重叠执行,避免了在每个 AFD 边界处发生串行化。
### 零开销集群调度
FastAFD 会在 GPU 执行当前解码计划的同时,提前准备下一个解码计划。
协调器会提前一步发布 micro-batch 顺序、缓冲区槽位、请求归属以及
节点的元数据,从而确保调度工作完全置身于解码的关键路径之外。
## 测试结果
在 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绕过, 逆向工具, 高性能计算