Merge v1.4.0 release candidate into main
状态(2026-10-17):v1.4.0 C500 发布候选版本。 已完成 C500 上的算子、真实 vLLM 0.17.0 生成、dispatch、回退和近 16K 长上下文回归; 生产加速范围仍限定为 M1 Split-KV Decode,不宣称 Prefill 生产加速。 项目边界:这是面向 MXMACA/MetaX C500 的专项适配与 decode 优化工程, 不是跨硬件 FlashAttention 替代品,也不是 MXAttention(MXFP4)复现。
状态(2026-10-17):v1.4.0 C500 发布候选版本。 已完成 C500 上的算子、真实 vLLM 0.17.0 生成、dispatch、回退和近 16K 长上下文回归; 生产加速范围仍限定为 M1 Split-KV Decode,不宣称 Prefill 生产加速。
项目边界:这是面向 MXMACA/MetaX C500 的专项适配与 decode 优化工程, 不是跨硬件 FlashAttention 替代品,也不是 MXAttention(MXFP4)复现。
中文说明 · English
MXFlashAttn 是面向 MXMACA / MetaX C500 的 FlashAttention 兼容前向算子与推理适配项目。 v1.3.0 起包含自研 device kernel(csrc_native/m1_kernel.cpp,split-KV paged decode)。 v1.4.0 在 v1.3.0 基础上完成了 C500 验证和长上下文回归。2026-10-17 的复测中, Qwen3-4B 在 batch=32、max_tokens=1024 的长上下文 decode 场景相对本项目 v7 路径达到约 3.66× 吞吐;Qwen3-8B 在 batch=16、max_tokens=256 时约 1.37×。跨模型结果表明收益依赖模型、 batch 和 KV 长度,短序列或低并发不保证加速。
csrc_native/m1_kernel.cpp
环境:MetaX C500 64G、MACA 3.5.3.20、驱动 3.8.30、PyTorch 2.8.0+metax3.5.3.9、vLLM 0.17.0。所有 M1 结果均由 dispatch 日志确认进入 m1_split_decode。
2.8.0+metax3.5.3.9
m1_split_decode
本轮最新复测为 Qwen3-4B v7=357.76、M1-UM2=1309.15 tok/s(约 3.66×), Qwen3-8B v7=508.48、M1-UM2=695.45 tok/s(约 1.37×)。 这些数字只描述表中 C500 配置,不外推为所有模型或所有请求形态的固定倍率。 另已完成 Qwen3-4B 真实 15,000 token prompt、max_model_len=16384 的 vendor prefill + M1 decode 回归,生成 32 token 成功且 M1 dispatch 命中。 流式 TTFT/P95 采集链路已验证,但 candidate 记录没有 M1 dispatch 事件, 因此不把它写成 M1 TTFT 性能提升。
v7=357.76
M1-UM2=1309.15 tok/s
v7=508.48
M1-UM2=695.45 tok/s
max_model_len=16384
2026-10-13 的复测表仍作为申报主口径和历史对照保留在 docs/results/c500-2026-10-13.md。
docs/results/c500-2026-10-13.md
2026-10-07 Gate 4 的更大场景矩阵(包括 3.67×、6.48× 等数字)保留在历史报告中, 用于说明研发过程与形状覆盖,不与本轮复测混成同一组结果: docs/gate4/Gate4_收官报告.md。
docs/gate4/Gate4_收官报告.md
支持形状 {GQ in {2,4,8} x HD in {64,128}} 的全部6 个格子均有真实模型 E2E 证据; M1 不支持的形状不得直接调用 binding。vLLM official-split 路径会把这些形状交还原始 MetaX/vendor KV-cache 实现。2026-10-13 已用 Qwen3.5-9B(head_dim=256)验证: 真实生成成功、M1 dispatch=0、M1-UM/M1-UM2 均为 4/4 文本匹配。
{GQ in {2,4,8} x HD in {64,128}}
新一轮原始证据和报告位于申报工作空间的本地目录 02_evidence/c500_20261013/; 公开仓库内的历史 Gate 4 证据见 docs/gate4/E2E_大模型与守卫验证.md。
02_evidence/c500_20261013/
docs/gate4/E2E_大模型与守卫验证.md
export MACA_PATH=/opt/maca # 缺这一行 triton import 会报NoneType bash csrc_native/build_m1.sh # mxcc 编译 M1,产出 csrc_native/mxmmain.so python csrc_native/patch_plugin.py # 把 M1 接线打进 vLLM 插件(幂等) python csrc_native/test_m1.py # 稳健性矩阵:s1~s8192 / GQA 2,4,8 / bf16 / ovf
端到端基准(注意四个环境变量,缺任一项会静默全走 vendor 直连,三路对比退化为同一路径跑三遍):
export MXFLASHATTN_GRAPH_OFFICIAL_SPLIT=1 MXFA_NATIVE_DECODE=1 export VLLM_ENABLE_V1_MULTIPROCESSING=0 # EngineCore 是子进程,否则 env 热切换无效 python csrc_native/bench_e2e.py --model /path/to/Qwen3-4B --batches 128 64 --max-tokens 256 --output artifacts/bench-q4b.json
判据:先查 dispatch.jsonl 里 m1_split_decode 的事件计数,再信吞吐数字。 计数为 0 说明内核根本没被派发,数据无意义。
dispatch.jsonl
ValueError
native_decode
vendor_direct
reference
MXFLASHATTN_ALLOW_FALLBACK=1
详细边界见 docs/support-matrix.md。
docs/support-matrix.md
mxflashattn/ Python API、校验、reference 与 dispatch csrc/mxmac/ C++/ATen bring-up 扩展(朴素 O(n^2) 实现,正确性对照路径) csrc_native/ 自研 M1 split-KV decode 内核 + v7 内核 + 基准/测试/构建脚本 integrations/vllm/ vLLM 0.17.0 适配桥接、decoder adapter 与 preflight benchmarks/ 固定配置、公平矩阵运行器和报告工具 scripts/ C500 实例运维与 E2E 复现脚本(模型暂存、形状扫描、各模型 E2E 编排) docs/gate4/ Gate 4 技术报告(原始实例日志保留在本地工作空间) docs/results/ C500 原始结果、报告和图表 tests/ CPU/reference 与 C500 条件测试
csrc/mxmac/ 是 PyTorch ATen bring-up / 正确性对照路径,由 at::matmul + softmax 组装的朴素实现,不是融合 kernel。自研 device kernel 在 csrc_native/。
csrc/mxmac/
at::matmul
softmax
csrc_native/
Gate 4 各档E2E 的实例侧复现脚本在 scripts/(对应文档各节): run_e2e_q4b.sh / run_e2e_q8b.sh(GQ=4 主场景)、 run_e2e_gq7.sh(GQ=7 守卫拒绝)、run_e2e_gq8.sh(GQ=8 PaddleOCR-VL)、 run_e2e_hd256.sh(HD=256 回退验证)、run_queue.sh(单卡串行编排)、 scan_shapes.sh(共享模型库形状扫描)和 probe_paddle_vllm.sh(架构探测)。 这些公开脚本面向有 C500 的实例;模型下载与数据盘暂存脚本属于本地申报工作区, 不随公开仓库发布。项目根目录支持通过 MXFLASHATTN_ROOT 覆盖,模型路径由各脚本中的 MODEL 变量或命令行 --model 提供。
scripts/
run_e2e_q4b.sh
run_e2e_q8b.sh
run_e2e_gq7.sh
run_e2e_gq8.sh
run_e2e_hd256.sh
run_queue.sh
scan_shapes.sh
probe_paddle_vllm.sh
MXFLASHATTN_ROOT
MODEL
--model
公开接口:
flash_attn_func
flash_attn_varlen_func
flash_attn_with_kvcache
import torch from mxflashattn import flash_attn_func, get_last_dispatch_info q = torch.randn(1, 32, 8, 64, dtype=torch.float16, device="cuda") k = torch.randn(1, 128, 2, 64, dtype=q.dtype, device=q.device) v = torch.randn_like(k) out = flash_attn_func(q, k, v, causal=True) print(get_last_dispatch_info())
在没有 MetaX provider 或编译扩展时,调用默认报错。只有主动设置 MXFLASHATTN_ALLOW_FALLBACK=1 才启用 PyTorch reference fallback(会发RuntimeWarning)。 dropout、局部窗口、AliBi、soft-capping、rotary embeddings、backward 和 softmax-LSE 返回会明确报错,不会静默产生错误结果。
RuntimeWarning
v0.9 用固定 seed 覆盖 36 组 batch/seq/head_dim/GQA 比例/layout/dtype/causal 组合, 在 C500 上做reference、Torch SDPA、MetaX vendor、MXFlashAttn API 四路公平对比:
必须同时说清的口径:算子级基线是同输入同设备的四路公平矩阵,不是拿自写 reference 单独对比得出的加速比;模型级 vendor 与 candidate 分栏列示,不混入算子级 median。 仓库早期那组 384 用例 benchmark基线是本项目 PyTorch reference,已被 v0.9 公平矩阵取代, 仅作历史数据保留在 docs/results/。
docs/results/
公开仓库提供脱敏结果摘要:docs/results/c500-2026-10-05.md 和 docs/results/c500-2026-10-13.md。完整原始 JSON、 dispatch 流和实例环境记录保留在本地申报工作空间,不随公开仓库发布。下面命令的 --output 是重新生成时的本地输出目标。
docs/results/c500-2026-10-05.md
--output
# 评测输出默认写入被忽略的 artifacts/,只作为本地复现缓存。 python -m benchmarks.fair_matrix --device cuda --count 36 --repeats 5 \ --output artifacts/fair-matrix-c500.json python benchmarks/fair_report.py artifacts/fair-matrix-c500.json \ --vendor-model artifacts/vllm-vendor-36.json \ --candidate-model artifacts/vllm-candidate-36.json \ --output artifacts/fair-matrix-c500.md
integrations/vllm/vllm_plugin.py 注册 MXFlashAttn backend。v1.3.0 起该插件在 MXFA_M1_DECODE=1 时把 paged decode 派发给 M1 内核,不支持的形状自动落回 v7, 再不支持则落回 MetaX vendor 直连。接线细节见 docs/gate4/M3_VLLM_WIRING.md。
integrations/vllm/vllm_plugin.py
MXFA_M1_DECODE=1
docs/gate4/M3_VLLM_WIRING.md
python integrations/vllm/smoke_generate.py --model /mnt/moark-models/Qwen3-0.6B \ --prompt-count 36 --max-tokens 16 --baseline-only \ --output artifacts/vllm-vendor-36.json
llvm.mxc.expadd.f32.i32
exp2
csrc_native/diag_guard_text_match.py
(path, operation, fallback)
后续优化与风险收敛路线见 docs/V1.5_OPTIMIZATION_PLAN.md。 其中包括 M1 硬件 intrinsic 评估、C500 Prefill kernel、可复现 TTFT 口径、 自适应调度、vLLM 新版本兼容性以及 FP8/多卡/SGLang 评估;这些不属于 v1.4.0 已完成能力。
docs/V1.5_OPTIMIZATION_PLAN.md
本项目采用 Apache License 2.0。MXMACA runtime、vendor PyTorch、MetaX wheel、 vLLM、模型权重和数据集分别遵循各自许可证。
欢迎通过 CONTRIBUTING.md 提交问题和改进。
CONTRIBUTING.md
面向 MXMACA / MetaX C500 的 FlashAttention 兼容算子与推理适配项目,支持 FP16/BF16、GQA/MQA、varlen、paged KV cache,并提供可复现的 C500 benchmark 和 vLLM 适配桥接。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MXFlashAttn
中文说明 · English
MXFlashAttn 是面向 MXMACA / MetaX C500 的 FlashAttention 兼容前向算子与推理适配项目。 v1.3.0 起包含自研 device kernel(
csrc_native/m1_kernel.cpp,split-KV paged decode)。 v1.4.0 在 v1.3.0 基础上完成了 C500 验证和长上下文回归。2026-10-17 的复测中, Qwen3-4B 在 batch=32、max_tokens=1024 的长上下文 decode 场景相对本项目 v7 路径达到约 3.66× 吞吐;Qwen3-8B 在 batch=16、max_tokens=256 时约 1.37×。跨模型结果表明收益依赖模型、 batch 和 KV 长度,短序列或低并发不保证加速。2026-10-13 C500 复测结果(申报主口径/历史对照)
环境:MetaX C500 64G、MACA 3.5.3.20、驱动 3.8.30、PyTorch
2.8.0+metax3.5.3.9、vLLM 0.17.0。所有 M1 结果均由 dispatch 日志确认进入m1_split_decode。本轮最新复测为 Qwen3-4B
v7=357.76、M1-UM2=1309.15 tok/s(约 3.66×), Qwen3-8Bv7=508.48、M1-UM2=695.45 tok/s(约 1.37×)。 这些数字只描述表中 C500 配置,不外推为所有模型或所有请求形态的固定倍率。 另已完成 Qwen3-4B 真实 15,000 token prompt、max_model_len=16384的 vendor prefill + M1 decode 回归,生成 32 token 成功且 M1 dispatch 命中。 流式 TTFT/P95 采集链路已验证,但 candidate 记录没有 M1 dispatch 事件, 因此不把它写成 M1 TTFT 性能提升。2026-10-13 的复测表仍作为申报主口径和历史对照保留在
docs/results/c500-2026-10-13.md。2026-10-07 Gate 4 的更大场景矩阵(包括 3.67×、6.48× 等数字)保留在历史报告中, 用于说明研发过程与形状覆盖,不与本轮复测混成同一组结果:
docs/gate4/Gate4_收官报告.md。支持形状
{GQ in {2,4,8} x HD in {64,128}}的全部6 个格子均有真实模型 E2E 证据; M1 不支持的形状不得直接调用 binding。vLLM official-split 路径会把这些形状交还原始 MetaX/vendor KV-cache 实现。2026-10-13 已用 Qwen3.5-9B(head_dim=256)验证: 真实生成成功、M1 dispatch=0、M1-UM/M1-UM2 均为 4/4 文本匹配。新一轮原始证据和报告位于申报工作空间的本地目录
02_evidence/c500_20261013/; 公开仓库内的历史 Gate 4 证据见docs/gate4/E2E_大模型与守卫验证.md。快速复现(需要 C500)
端到端基准(注意四个环境变量,缺任一项会静默全走 vendor 直连,三路对比退化为同一路径跑三遍):
判据:先查
dispatch.jsonl里m1_split_decode的事件计数,再信吞吐数字。 计数为 0 说明内核根本没被派发,数据无意义。能力矩阵
ValueError,不静默计算m1_split_decode(M1)→native_decode(v7)→vendor_direct→referenceMXFLASHATTN_ALLOW_FALLBACK=1,不会静默切换详细边界见
docs/support-matrix.md。项目结构
csrc/mxmac/是 PyTorch ATen bring-up / 正确性对照路径,由at::matmul+softmax组装的朴素实现,不是融合 kernel。自研 device kernel 在csrc_native/。Gate 4 各档E2E 的实例侧复现脚本在
scripts/(对应文档各节):run_e2e_q4b.sh/run_e2e_q8b.sh(GQ=4 主场景)、run_e2e_gq7.sh(GQ=7 守卫拒绝)、run_e2e_gq8.sh(GQ=8 PaddleOCR-VL)、run_e2e_hd256.sh(HD=256 回退验证)、run_queue.sh(单卡串行编排)、scan_shapes.sh(共享模型库形状扫描)和probe_paddle_vllm.sh(架构探测)。 这些公开脚本面向有 C500 的实例;模型下载与数据盘暂存脚本属于本地申报工作区, 不随公开仓库发布。项目根目录支持通过MXFLASHATTN_ROOT覆盖,模型路径由各脚本中的MODEL变量或命令行--model提供。前向算子 API
公开接口:
flash_attn_funcflash_attn_varlen_funcflash_attn_with_kvcache在没有 MetaX provider 或编译扩展时,调用默认报错。只有主动设置
MXFLASHATTN_ALLOW_FALLBACK=1才启用 PyTorch reference fallback(会发RuntimeWarning)。 dropout、局部窗口、AliBi、soft-capping、rotary embeddings、backward 和 softmax-LSE 返回会明确报错,不会静默产生错误结果。历史基准(v0.9公平矩阵)
v0.9 用固定 seed 覆盖 36 组 batch/seq/head_dim/GQA 比例/layout/dtype/causal 组合, 在 C500 上做reference、Torch SDPA、MetaX vendor、MXFlashAttn API 四路公平对比:
必须同时说清的口径:算子级基线是同输入同设备的四路公平矩阵,不是拿自写 reference 单独对比得出的加速比;模型级 vendor 与 candidate 分栏列示,不混入算子级 median。 仓库早期那组 384 用例 benchmark基线是本项目 PyTorch reference,已被 v0.9 公平矩阵取代, 仅作历史数据保留在
docs/results/。公开仓库提供脱敏结果摘要:
docs/results/c500-2026-10-05.md和docs/results/c500-2026-10-13.md。完整原始 JSON、 dispatch 流和实例环境记录保留在本地申报工作空间,不随公开仓库发布。下面命令的--output是重新生成时的本地输出目标。vLLM 集成
integrations/vllm/vllm_plugin.py注册 MXFlashAttn backend。v1.3.0 起该插件在MXFA_M1_DECODE=1时把 paged decode 派发给 M1 内核,不支持的形状自动落回 v7, 再不支持则落回 MetaX vendor 直连。接线细节见docs/gate4/M3_VLLM_WIRING.md。已知限制
llvm.mxc.expadd.f32.i32做 softmax 重缩放,而 M1 走软件 shuffle 归约 +exp2模拟。替换为硬件 intrinsic 是下一步方向,尚未实施。csrc_native/diag_guard_text_match.py)。(path, operation, fallback)三元组,只按 path取 top-N 会在 M1 从未成功时误判为”没派发”。路线图
后续优化与风险收敛路线见
docs/V1.5_OPTIMIZATION_PLAN.md。 其中包括 M1 硬件 intrinsic 评估、C500 Prefill kernel、可复现 TTFT 口径、 自适应调度、vLLM 新版本兼容性以及 FP8/多卡/SGLang 评估;这些不属于 v1.4.0 已完成能力。许可证
本项目采用 Apache License 2.0。MXMACA runtime、vendor PyTorch、MetaX wheel、 vLLM、模型权重和数据集分别遵循各自许可证。
欢迎通过
CONTRIBUTING.md提交问题和改进。