已关闭
[RFC]: 自动融合: 扩展统一 Pattern Matcher 覆盖量化融合与 GMM/MM+激活 #298
blian创建于  8月9日关闭于  8月20日
blian
blian成员
8月9日 创建

RFC:自动融合: 扩展统一 Pattern Matcher 覆盖量化融合与 GMM/MM+激活

  • 状态(Status):Draft
  • 作者(Authors):@blian
  • 创建日期(Created):2026-08-09
  • 更新日期(Updated):2026-08-11
  • 相关 Issue/PR:#待补充(关联 Issue/PR 以便追踪背景)

1. 概述

1.1 简介

"自动融合"的目标是扩展 MindIE-SD 统一 Pattern Matcher,支持常见融合算子的自动替换,提升开箱即用的加速覆盖度。重点覆盖三类目标:

  1. 量化融合算子:量化 MatMul 与激活函数的组合融合(如 npu_quant_matmul_gelu)。
  2. GMM / MM+激活 组合融合:Grouped MatMul 与激活(如 npu_grouped_matmul_swiglu_quant(_v2))、Linear 与激活的组合融合。
  3. 非 MM 融合算子:Norm+RoPE、GELU×Mul、独立 SwiGLU 等非矩阵乘类的组合融合。

本 RFC 的融合算子候选来源已明确纳入以下三个昇腾算子仓并完成算子盘点与筛选:

来源仓库 提供算子形态 本 RFC 覆盖内容
cann/ops-nn(https://gitcode.com/cann/ops-nn) CANN 神经网络类计算算子库,含 torch.ops.cann_ops_nn.* 单算子接入 P0/P1/P2 融合目标的可用算子源(见 §3.2、§6)
cann/ops-transformer(https://gitcode.com/cann/ops-transformer) CANN transformer 类大模型算子库 GMM、kv_rms_norm_rope_cache 等 P1/P2 融合目标(见 §3.2、§6)
Ascend/op-plugin(https://github.com/Ascend/op-plugin,即 torch_npu 自定义 API 插件) torch_npu 自定义 API(npu_swiglu / npu_quant_matmul_gelu / npu_linear 等) P0/P1/P2 融合目标的替换算子本体(见 §3.2、§6)

三者与 torch_npu 原生算子共同构成全部融合算子候选来源,见 §3.2 完整清单。所有候选融合算子必须能在 DiT 系扩散模型(文本到图像 / 文本到视频的 Transformer 主干)的计算图中被实际使用。模型侧使用情况以上游框架 vLLM Omni 的扩散模型注册表(vllm_omni/diffusion/registry.py)与各模型实现为准,本文 3.3 与第 8 节的匹配清单均来自对 E:\tmp\vllm-omni\vllm_omni\diffusion\models\ 的逐模型结构扫描(标注为结构分析 + 源码定位,非实机验证)。

1.2 动机

当前 MindIE-SD 的 Pattern Matcher 仅覆盖 elementwise / norm 类融合算子:

  • 已有 5 组 pattern:RMSNorm、RoPE、AdaLayerNorm、GELU(tanh → npu_fast_gelu)、MulAdd(→ muls_add),注册于 mindiesd/compilation/patterns/,三段注册(patterns/__init__.py + passes/__init__.py + compiliation_config.py)。
  • 无 MM / 量化类 pattern:量化 Linear、MoE GMM、Linear+激活等扩散模型高频组合未被 Pattern Matcher 覆盖。
  • 量化路径与 Pattern 分离:量化在 nn.Module 层由 quantize() 改图完成(mindiesd/quantization/),层实现直接调用 npu_quant_matmul / npu_dynamic_quant 等算子,不经 Pattern Matcher;量化后的层图内 npu_quant_matmul 后接激活的组合仍可被进一步融合。

DiT 系扩散模型(FLUX / Wan / Qwen-Image / HunyuanImage-3.0 / HunyuanVideo / SD3 / Cosmos3 / MiniMax H3 等)的 Transformer 主干中,FFN(Linear → GELU/SiLU → Linear)、MoE(GroupedMatMul → SwiGLU)、Q/K 投影后(RMSNorm → RoPE)都是高频出现的公共子结构,具备显著的融合收益。

1.3 目标

  • 目标一(扩展 Pattern Matcher):沿现有 register_replacement 路径,新增覆盖量化融合与 GMM/MM+激活的 pattern,保持三段注册机制不变。
  • 目标二(量化融合算子):将量化 MatMul 与激活的组合替换为 npu_quant_matmul_gelu(A8W8/A4W4)。
  • 目标三(GMM / MM+激活):将 GMM+Swiglu、Linear+激活组合替换为 npu_grouped_matmul_swiglu_quant(_v2)、npu_linear 等融合算子。
  • 目标四(非 MM 融合):覆盖 Norm+RoPE、GELU×Mul、独立 SwiGLU、erf GELU 等非 MM 组合。
  • 目标五(覆盖 DiT 系扩散模型):所有候选融合算子须在 DiT 系扩散模型的公共子结构中出现;覆盖范围以 vLLM Omni 注册的扩散模型清单为参考,不限于 MindIE-SD 当前支持矩阵。模型命中情况以第 8 节任务清单为准。

非目标(本 RFC 不包含):

  • 不覆盖 UNet 系结构(SD1.5 / SD2.1 / SDXL 经典 UNet 等)——本 RFC 只关注 DiT 系。
  • 不实现融合算子的 kernel 本体(算子来自 torch_npu / op-plugin / ops-transformer / ops-nn,本仓只做 pattern 替换)。
  • 不改变现有 5 组 pattern 的默认行为与注册机制。
  • 不做融合算子与量化叠加的端到端质量验证(量化叠加验证属于量化模块职责,本 RFC 聚焦 Pattern 替换)。

2. 用例分析

2.1 用例一:量化 MatMul + GELU 自动融合

  • 场景描述:DiT 系模型(Qwen-Image / FLUX.1 / Wan / HunyuanVideo / SD3 等)的 FFN 为 Linear → GELU(approx=tanh) → Linear。经 quantize() 改图后,图中出现 npu_quant_matmul(或 npu_dynamic_quant + npu_quant_matmul)后接 npu_fast_gelu 的组合;未量化图中为 matmul + add + gelu 组合。
  • 功能点:pattern 将量化 MatMul + GELU 替换为 npu_quant_matmul_gelu(gelu_type 支持 tanh/erf),减少 kernel 启动与中间张量读写。
  • 关键性能指标:FFN 融合后 kernel 数量下降;与 npu_quant_matmul + npu_fast_gelu 分开执行相比耗时下降。
  • DFX:enable_quant_mm_gelu 默认开启;不匹配的 GELU(非 tanh/erf)自动跳过。

2.2 用例二:MoE GMM + SwiGLU 自动融合

  • 场景描述:含 MoE 的 DiT(HunyuanImage-3.0 / LingBot-Video 等)专家侧为 npu_grouped_matmul(W13 融合)→ npu_swiglu → npu_grouped_matmul(W2)。mindiesd/layers/moe/moe_mlp.py:48-157 已手工编排该组合。
  • 功能点:pattern 将 npu_grouped_matmul + npu_swiglu 组合替换为 npu_grouped_matmul_swiglu_quant(未量化)或 _v2(量化),将同一组合在编译层自动收敛。
  • 关键性能指标:MoE 专家侧 kernel 数量下降;与手工编排相比无需改动模型代码。
  • DFX:enable_gmm_swiglu 默认开启;group_list / 分组语义不匹配时自动跳过。

2.3 用例三:通用 Linear + 激活自动融合

  • 场景描述:SiLU 系 DiT(HunyuanImage-3.0 / FLUX.2 / Z-Image / Krea2 / Cosmos3 / Boogu / Ovis)的 FFN 为 Linear → SiLU/GELU 或 gated 形式(silu(x)*x)。
  • 功能点:pattern 将 Linear+激活替换为 npu_linear(带激活)或 npu_swiglu(gated 形式)。
  • 关键性能指标:FFN 融合后 kernel 数量下降。
  • DFX:未匹配的 Linear 形态自动跳过;与 2.1 的量化融合 pattern 做优先级裁定,避免重复匹配。

2.4 用例四:非 MM 融合

  • 场景描述:DiT / 视频 DiT 的 Q/K 投影后常出现 RMSNorm → RoPE 连续子结构;部分 FFN 出现 gelu(x) * gate(npu_gelu_mul);非 tanh 近似的 F.gelu(erf 精确版)。
  • 功能点:pattern 将 RMSNorm+RoPE 替换为 kv_rms_norm_rope_cache(若语义匹配)、gelu(x)*y 替换为 npu_gelu_mul、silu(x)*x 替换为 npu_swiglu、erf GELU 替换为 npu_gelu。
  • 关键性能指标:非 MM 组合融合后 kernel 数量下降。
  • DFX:kv_rms_norm_rope_cache 的输入/输出语义需 NPU 实机确认,未确认前标注实验性并默认关闭。

3. 方案设计

3.1 总体方案

设计思路:沿现有 register_replacement 路径扩展 Pattern Matcher。所有新增 pattern 遵守 PatternBase 接口约定(name() / inputs() / pattern() / replacement()),通过三段注册接入(patterns/__init__.py + passes/__init__.py 的 pattern_registry + compiliation_config.py 的 FusionPatterns)。

双路径覆盖:

  • 路径 A(未量化模型图):Dynamo 分解后的图中为 matmul + add + gelu 等 torch 原生算子组合,pattern 以 placeholder 输入表达,replacement 调用 torch_npu 融合算子。
  • 路径 B(量化后层图):quantize() 改图后的图中为 npu_quant_matmul / npu_dynamic_quant + 激活的组合,pattern 匹配 torch_npu 算子序列,replacement 调用更高阶融合算子。

优先级划分:

优先级 融合目标 覆盖子结构
P0 量化 MM + GELU npu_quant_matmul_gelu
P1 GMM/MM + 激活 npu_grouped_matmul_swiglu_quant(_v2)、npu_linear
P2 非 MM 融合 kv_rms_norm_rope_cache、npu_gelu_mul、npu_swiglu、npu_gelu

约束与前置条件:

  • 仅昇腾 NPU 环境生效;非 NPU 环境 pattern 不注册(沿用现有 npu_available 判断)。
  • 融合算子依赖 torch_npu / op-plugin / ops-transformer / ops-nn 提供的算子,版本兼容性在实现阶段核实。
  • 量化类 pattern 依赖量化层图的实际算子形态,需以 NPU 实机 kernel diff 为最终验收(RFC 阶段标注未验证)。
  • 模型侧命中位置以第 8 节 vllm-omni 扫描结果为准;实现阶段以对应模型源码为最终事实源。

3.2 融合算子来源与筛选

候选来源:

来源 说明 相关融合算子
cann/ops-transformer CANN transformer 类大模型算子库 gmm/grouped_matmul_swiglu_quant_v2、moe/moe_init_routing_quant_v2、posembedding/kv_rms_norm_rope_cache、attention/fused_infer_attention_score、attention/quant_flash_attn
Ascend/op-plugin TorchNPU 算子插件,提供 torch_npu 自定义 API npu_swiglu、npu_quant_matmul_gelu、npu_linear、npu_gelu_mul、npu_gelu
torch_npu 原生自定义算子 npu_fast_gelu(已有)、npu_quant_matmul、npu_dynamic_quant、npu_grouped_matmul
cann/ops-nn CANN 神经网络类计算算子库,含 torch_extension(torch.ops.cann_ops_nn.*)单算子接入 P0 量化融合:matmul/quant_matmul_activation_quant(量化 MM+激活+量化,匹配 npu_quant_matmul_gelu 目标)、matmul/quant_matmul_dequant、quant/dequant_swiglu_quant、activation/gelu_quant;P1 GMM/MM+激活:matmul/fused_mat_mul、activation/swi_glu、activation/swiglu_group、activation/swiglu_group_quant;P2 非 MM:norm/group_norm_silu(_quant)、norm/ada_layer_norm_v2、activation/gelu_mul、vfusion/modulate、vfusion/scaled_masked_softmax_v2
cann/ops-nn(experimental) 同仓 experimental/ 目录,实验性算子 matmul/fused_patch_mlp(Linear+GELU×N 融合 MLP)、quant/turbo_quant_compress_latent(MLA KV latent 4bit 压缩,vllm-omni 现役 DiT 无 MLA,不命中)

筛选准则:

  1. 全量遍历算子:对 cann/ops-nn(quant/、matmul/、norm/、vfusion/、activation/、experimental/ 等目录)、cann/ops-transformer(gmm/、moe/、posembedding/、attention/ 等目录)、Ascend/op-plugin(torch_npu 自定义 API)三个仓库的算子逐目录、逐算子盘点,列出全部候选融合算子(见上表;ops-nn 的子目录算子清单在实现阶段可对照仓内 op_api/README 复核)。
  2. 全量匹配模型结构:将第 1 步盘点出的每个候选算子与 vLLM Omni 注册表全部扩散模型(_DIFFUSION_MODELS,共 60+ pipeline 入口)的 Transformer 主干公共子结构逐一匹配。匹配结论已完整呈现于本文:
    • 命中:对应融合目标、命中模型与具体使用位置(file:line),见 §3.3 覆盖矩阵与 §8 任务清单。
    • 未命中/不适用:同样以显式说明列出(见 §3.3 表内"不适用"标注、§8 各节"不适用"小节、§3.2 来源缺口、§8.6 Magi-Human SWIGLU7 等自定义激活不兼容说明),确保"遍历过即呈现过,不匹配即注明"。
  3. 匹配 DiT 系扩散模型公共子结构:只要该算子族对应 DiT 系(文本到图像 / 文本到视频 Transformer 主干)中的公共子结构即可入选,不依赖 MindIE-SD 支持矩阵,也不依赖具体模型。
  4. 结构分析以扩散模型公开架构(vLLM Omni 模型实现)为准,模型命中与使用位置标注源码文件行号(见第 8 节)。
  5. 产出 P0/P1/P2 清单(§3.1 优先级表)与模型×算子匹配任务清单(§8)。

来源缺口:cann/ops-nn 仓内无 grouped_matmul/GMM 专用算子(MoE 专家侧 GMM 依赖 ops-transformer),也无 kv_rms_norm_rope_cache 类算子(Norm+RoPE 依赖 ops-transformer)。两类目标不受 ops-nn 补充影响。

3.3 DiT 模型覆盖矩阵

以下矩阵以 vLLM Omni 注册表(vllm_omni/diffusion/registry.py 的 _DIFFUSION_MODELS)为参考,覆盖 DiT 系扩散模型及其公共子结构。模型侧事实来自对 E:\tmp\vllm-omni\vllm_omni\diffusion\models\ 的全量逐模型源码扫描(覆盖全部 60+ pipeline 入口对应的 Transformer/去噪器实现),并将 §3.2 盘点出的全部候选融合算子逐一与之匹配;命中与未命中结论均完整呈现,具体命中位置见第 8 节。标注为结构分析推断,非实机验证。

遍历与匹配范围声明:

  • 算子侧:cann/ops-nn(quant/matmul/norm/vfusion/activation/experimental 全目录)、cann/ops-transformer(gmm/moe/posembedding/attention 等)、Ascend/op-plugin(torch_npu 自定义 API)全部候选融合算子已盘点(§3.2)。
  • 模型侧:vLLM Omni 注册表全部扩散模型已逐一扫描(§8 各小节按融合算子组织命中/未命中清单)。
  • 匹配结果呈现:§3.3 覆盖矩阵给出模型维度汇总,§8 任务清单给出算子维度明细(含 file:line);未命中项(如 AudioX Conv1d FFN、Cosmos3-Edge ReLU²、Magi-Human SWIGLU7、SD3 无 RoPE、GR00T 无 RoPE、StableAudio/CosyVoice3 无 QK norm、ops-nn 无 GMM/kv_rms_norm_rope_cache、turbo_quant_compress_latent 不命中现役 DiT)均已显式注明。

修正说明(相对初稿):

  • Wan2.1/2.2 的"级联 MoE"实为 pipeline 级 transformer/transformer_2 双模型切换(pipeline_wan2_2.py:317-344),transformer 内无专家路由,不命中 GMM 融合。
  • MiniMax H3 的 MLP 为稠密 SwiGLU(merged fc1 → silu(gate)*up → fc2,minimax_h3_transformer.py:517-542),无 MoE。
  • 真正的稀疏专家 GroupedMatMul 仅 LingBot-Video(torch._grouped_mm)与 HunyuanImage-3.0(FusedMoE)。
模型家族 架构类型 FFN 激活 是否 gated RoPE MoE 命中融合算子
HunyuanImage-3.0 MMDiT 解码器 SiLU (SwiGLU) 是 2D/3D 是(FusedMoE) npu_grouped_matmul_swiglu_quant_v2、npu_swiglu、npu_gelu_mul(无)
Qwen-Image MMDiT 双流 GELU (tanh) 否 3D 否 npu_quant_matmul_gelu、npu_linear
Wan2.1 / 2.2 DiT 视频 GELU (tanh) 否 3D 否(pipeline 级双模型) npu_quant_matmul_gelu、npu_linear
MiniMax H3 H3-DiT SwiGLU 是 是 否(稠密 SwiGLU) npu_swiglu(merged fc1)
HunyuanVideo-1.5 FLUX 式双流 MMDiT GELU (tanh) 否 3D 否 npu_quant_matmul_gelu、npu_linear
FLUX.1 (dev/schnell/Kontext) MMDiT 19+38 GELU (tanh) 否 3D 否 npu_quant_matmul_gelu、npu_linear
FLUX.2 / klein MMDiT-XL-2 风格 SwiGLU 是 4D 否 npu_swiglu
Cosmos3 (Nano/Super/Edge) UND+GEN DiT SwiGLU (gated) / Edge: ReLU² 是/否 3D mRoPE 无 npu_swiglu(主模型);Edge 为 ReLU² 不适用
SD3 / SD3.5 MMDiT GELU (tanh) 否 无(PatchEmbed) 否 npu_quant_matmul_gelu、npu_linear(无 RoPE)
Z-Image 双流 DiT SwiGLU (SiluAndMul) 是 是 否 npu_swiglu(已 fused)
Krea 2 单流 MMDiT SwiGLU 是 是 否 npu_swiglu(gate/up 分离,需合并)
LTX-2 DiT 视频 GELU (tanh) 否 是 否 npu_quant_matmul_gelu、npu_linear
LingBot-Video DiT 视频 SiLU (SwiGLU) 是 是 是(torch._grouped_mm) npu_grouped_matmul_swiglu_quant(未量化)、npu_swiglu
Helios 双流 DiT GELU (tanh) 否 3D 否 npu_quant_matmul_gelu、npu_linear
Ernie-Image DiT gated GELU (erf) 是 是 否 npu_gelu_mul(唯一命中)、npu_quant_matmul_gelu(erf)
GLM-Image MMDiT 双流 GELU (tanh) / SiLU 否 是 否 npu_quant_matmul_gelu、npu_linear
OVIS-Image DiT 双流 SwiGLU 是 是 否 npu_swiglu
LongCat-Image DiT 双流 GELU (tanh) 否 是 否 npu_quant_matmul_gelu、npu_linear
Boogu-Image DiT 双流 SwiGLU 是 是 否 npu_swiglu(分离)
HiDream-Image DiT SwiGLU 是 是 是(逐专家循环,待改 grouped GEMM) npu_swiglu;改造后 npu_grouped_matmul_swiglu_quant
OmniGen2 DiT SwiGLU (SiluAndMul) 是 是 否 npu_swiglu(已 fused)
Bagel / Lance Qwen2-MoT LLM 去噪器 SwiGLU (SiluAndMul) 是 是 MoT(token 路由,非稀疏专家) npu_swiglu
NextStep-1.1 Llama 主干 SwiGLU 是 是 否 npu_swiglu(merged)
SenseNova-U1 Qwen3 式主干 SwiGLU 是 是 MoT npu_swiglu(merged);已自带 Triton QK-Norm+RoPE 融合
DreamZero CausalWan GELU (tanh) 否 是 否 npu_quant_matmul_gelu、npu_linear
Magi-Human DiT SWIGLU7/GELU7(自定义) 是 是 per-modality(非 top-k) 自定义激活,标准 npu_swiglu/npu_gelu 不适用
AudioX 连续 MMDiT SwiGLU(Conv1d) 是 是 否 Conv1d FFN,npu_swiglu 不适用
StableAudio DiT 音频 SwiGLU 是 是(仅 RoPE) 否 npu_swiglu
CosyVoice3 DiT 音频 GELU (tanh) 否 是 否 npu_quant_matmul_gelu、npu_linear
GR00T DiT(diffusers FeedForward) GELU (tanh) 否 无 否 npu_quant_matmul_gelu、npu_linear(无 RoPE)
MammothModa2 DiT SwiGLU 是 是 否 npu_swiglu(分离)
SoulX-Singer DiffLlama SwiGLU(HF lib 内) 是 是 否 npu_swiglu(需改写 HF MLP);条件 MLP 为 npu_linear
SDXL / UNet 系 UNet — — — — 不在本 RFC 范围
MiniMax H3 H3-DiT(用户指定) SwiGLU 是 是 否(无 MoE) npu_swiglu

3.4 P0:量化融合 pattern

目标:npu_quant_matmul_gelu(A8W8/A4W4,gelu_type 支持 tanh/erf),覆盖量化 MatMul + GELU 组合。

匹配形态(两条来源路径):

  • 路径 A(未量化模型图):matmul + add(bias) + gelu 组合,经量化描述符语境替换为 npu_quant_matmul_gelu。
  • 路径 B(量化后层图):npu_quant_matmul(...)(或 npu_dynamic_quant + npu_quant_matmul)+ npu_fast_gelu → npu_quant_matmul_gelu。

关键约束:

  • 量化算子需可 trace(meta/fake 支持),register_replacement 的 pattern 用 torch 原生算子表达,replacement 用 torch_npu 调用。
  • npu_quant_matmul_gelu 的 scale 参数(x1Scale / x2Scale)需从图中提取,输出 dtype 规则按算子文档处理。
  • gelu_type 由原 GELU 的 approximate 参数决定:tanh → gelu_tanh,否则 → gelu_erf。
  • vllm-omni 侧量化路径已产出 npu_dynamic_quant + npu_quant_matmul 形态(quantization/int8_config.py:442-451、mxfp8_config.py:400-403、mxfp4_config.py:284),路径 B 的匹配形态成立。

三段注册:

  • patterns/quant_mm_gelu_pattern.py:QuantMMGeluPatternGroup
  • passes/__init__.py:pattern_registry["enable_quant_mm_gelu"] = ("QuantMMGeluPatternGroup", "..patterns")
  • compiliation_config.py:FusionPatterns.enable_quant_mm_gelu: bool = True

3.5 P1:GMM / MM+激活 pattern

目标 1:npu_grouped_matmul_swiglu_quant(未量化)/ _v2(量化),覆盖 npu_grouped_matmul + npu_swiglu 组合(MoE 专家侧 W13)。

  • 匹配形态:npu_grouped_matmul(x, w13, split_item=2, ...) + npu_swiglu(...)。
  • 参考实现:mindiesd/layers/moe/moe_mlp.py:48-157 已手工编排该组合。
  • 命中模型:LingBot-Video(lingbot_video_transformer.py:368-380/:502-526,未量化)、HunyuanImage-3.0(hunyuan_image3_transformer.py:1624,量化穿透,走 _v2)。HiDream-Image(hidream_image_transformer.py:415-480)为逐专家循环,需先改 grouped GEMM 才可命中。
  • 三段注册:patterns/gmm_swiglu_pattern.py → enable_gmm_swiglu。

目标 2:npu_linear(带激活),覆盖 Linear + SiLU/GELU 组合(非 gated 形式)。

  • 匹配形态:matmul + add(bias) + activation。
  • 与 3.4 的量化融合 pattern 做优先级裁定:量化语义存在时走 npu_quant_matmul_gelu,否则走 npu_linear。
  • 三段注册:patterns/linear_bias_gelu_pattern.py → enable_linear_activation。

3.6 P2:非 MM 融合 pattern

目标 1:kv_rms_norm_rope_cache(RMSNorm + RoPE,可选 KV cache)。

  • 匹配形态:RMSNorm + apply_rotary_emb 连续子结构(Q/K 投影后)。
  • 输入/输出语义需 NPU 实机确认:是否要求 KV 缓存路径、是否与现有 rms_norm_pattern + rope_pattern 两个独立 pattern 冲突(重复匹配风险确认存在:vllm-omni 通过 apply_rope_to_qk 对 Q/K 连续调用 RoPE,Norm 独立于 :436-437 等位置调用)。未确认前标注实验性并默认关闭(enable_norm_rope_cache: bool = False)。
  • vllm-omni 中 RMSNorm→RoPE 为普适结构(见第 8 节 P2 命中表),但带 KV cache 路径的模型仅 GLM-Image、Bagel/Lance、NextStep-1.1、SenseNova-U1、Helios(cross-attn)、DreamZero(AR 解码)、HunyuanImage-3.0;其余为一次性扩散注意力,cache 版算子需评估无 cache 形态。
  • 三段注册:patterns/norm_rope_cache_pattern.py → enable_norm_rope_cache。

目标 2:npu_gelu_mul(GELU × Mul),覆盖 gelu(x) * gate 组合。

  • 全仓唯一命中:Ernie-Image ernie_image_transformer.py:396(up_out * F.gelu(gate_out))。其余 GELU 模型均为非 gated 独立 GELU。
  • 三段注册:patterns/gelu_mul_pattern.py → enable_gelu_mul。

目标 3:npu_swiglu(独立 SiLU 门控),覆盖 silu(x) * x gated FFN 组合。

  • 命中面最广,分两类:已用 vLLM SiluAndMul(可直接映射:Z-Image、OmniGen2、Bagel/Lance、HunyuanImage-3.0)与显式 silu(x)*x(需合并 gate:Krea2、LingBot、MiniMax H3、Cosmos3、StableAudio、MammothModa2、OVIS、Boogu、HiDream、FLUX2/klein、NextStep、SenseNova-U1)。
  • 三段注册:patterns/swiglu_pattern.py → enable_swiglu。

目标 4:npu_gelu(erf 精确版),覆盖非 tanh 近似的 F.gelu。

  • 与现有 GELUPattern(tanh → npu_fast_gelu)按 approximate 参数分流。
  • 命中:Ernie-Image gated GELU(erf,ernie_image_transformer.py:396)、GLM-Image glyph_projector("gelu" erf,glm_image_transformer.py:1032)。
  • 三段注册:patterns/gelu_erf_pattern.py → enable_gelu_erf。

3.7 与 quantize() 路径的关系、配置项与 DFX

与 quantize() 的关系:

  • 量化改图(mindiesd/quantization/quantize.py)在 nn.Module 层完成,先于 torch.compile;Pattern Matcher 在编译期作用于量化后的层图(路径 B)。
  • 两路径不冲突:模块层已融合的不再被 pattern 重复替换(pattern 以未匹配即跳过兜底)。

新增配置项:

配置项 默认值 说明
enable_quant_mm_gelu True 量化 MM + GELU → npu_quant_matmul_gelu(P0)
enable_gmm_swiglu True GMM + SwiGLU → npu_grouped_matmul_swiglu_quant(_v2)(P1)
enable_linear_activation True Linear + 激活 → npu_linear(P1)
enable_norm_rope_cache False RMSNorm + RoPE → kv_rms_norm_rope_cache(P2,实验性,需 NPU 确认)
enable_gelu_mul True GELU × Mul → npu_gelu_mul(P2)
enable_swiglu True silu(x)*x → npu_swiglu(P2)
enable_gelu_erf True erf GELU → npu_gelu(P2)

安全隐私与 DFX:

  • 安全隐私:仅消费 torch_npu / op-plugin / ops-transformer / ops-nn 提供的算子,不引入外部依赖;沿用仓库对算子调用与文件的规范。
  • 兼容性:新增配置默认开启(除实验性 enable_norm_rope_cache);pattern 不匹配时自动跳过,不改变既有图行为。
  • 可维护性:每个融合目标一个 pattern 文件,命名遵循 enable_<op> 规范;三段注册不变。
  • 可测试性:CPU 模拟路径可单测(mock torch_npu);NPU 实机按各用例进行 kernel diff 验证。
  • 可靠性:pattern 匹配失败回退原始图;gelu_type / scale 参数不匹配时跳过并给出日志。

4. 测试设计

用例 测试项 验证方式
P0 量化融合 npu_quant_matmul_gelu pattern 命中与输出一致性 CPU 单测(mock torch_npu):cosine_similarity > 2^-7;NPU 实机:kernel diff 确认 npu_quant_matmul_gelu 出现、原始 kernel 消失
P1 GMM 融合 npu_grouped_matmul_swiglu_quant(_v2) pattern CPU 单测:group_list / 分组语义;NPU 实机:MoE 前向比对
P1 Linear+激活 npu_linear pattern CPU 单测:与量化融合的优先级裁定
P2 Norm+RoPE kv_rms_norm_rope_cache(实验性) CPU 单测:输入输出语义;NPU 实机确认后再开启
P2 激活融合 npu_gelu_mul / npu_swiglu / npu_gelu(erf) CPU 单测:各 pattern 命中与输出一致性
三段注册 新增配置字段默认值 / 开关行为 tests/compilation/test_pattern_registration.py 扩展
回归 现有 5 组 pattern 不破坏 全量 UT 回归(tests/compilation/patterns/*)

回归约束:新增测试不得破坏既有 tests/compilation/、tests/quantization/ 用例;沿用仓库既有测试框架与 CI 门禁。

5. 缺点和风险

  • DiT 覆盖矩阵为结构推断:3.3 矩阵基于 vLLM Omni 注册表与全量逐模型源码扫描(第 8 节含 file:line,命中与未命中均呈现),未实机验证;个别模型(GLM-Image 等)FFN/注意力细节需实现阶段以源码为准。
  • 量化算子 trace 能力:npu_quant_matmul / npu_dynamic_quant 的 meta/fake 支持需核实;若不支持 register_replacement,回退到自定义 Graph Pass。
  • kv_rms_norm_rope_cache 语义不确定:输入/输出语义、与现有两 pattern 的重复匹配风险需 NPU 实机确认,默认关闭。
  • 优先级冲突:npu_quant_matmul_gelu 与 npu_linear、npu_swiglu 与 npu_gelu_mul 在部分图中可能同时可匹配,需明确的优先级裁定。
  • 版本兼容:op-plugin / ops-transformer / ops-nn 算子随 torch_npu 版本(26.0.0 / 26.1.0 等)变化,需在实现阶段锁定版本配套。
  • 模型覆盖修正:初稿中 Wan 级联 MoE 与 MiniMax H3 MoE 经源码扫描确认不存在(详见 3.3 修正说明),GMM 融合的实机验证目标收敛为 LingBot-Video 与 HunyuanImage-3.0。
  • npu_swiglu 命中面宽但形态不一:部分模型已用 SiluAndMul(已 fused,无需 pattern),部分为 gate/up 分离 nn.Linear(需先改写为 merged column 布局),pattern 需分别处理。

6. 现有技术

技术 来源 与本 RFC 的关系
npu_quant_matmul_gelu Ascend op-plugin 自定义 API P0 量化 MM + GELU 融合目标
npu_grouped_matmul_swiglu_quant(_v2) cann ops-transformer gmm/ P1 GMM + SwiGLU 融合目标
npu_linear / npu_swiglu / npu_gelu_mul / npu_gelu Ascend op-plugin 自定义 API P1/P2 MM+激活 / 非 MM 融合目标
kv_rms_norm_rope_cache cann ops-transformer posembedding/ P2 Norm + RoPE 融合目标(实验性)
quant_matmul_activation_quant / dequant_swiglu_quant / group_norm_silu / swi_glu 等 cann ops-nn(matmul/、quant/、norm/、activation/) P0/P1/P2 融合目标的可选算子源
vLLM Omni 扩散模型注册表 vllm_omni/diffusion/registry.py DiT 系扩散模型覆盖矩阵参考
vLLM Omni 模型实现 vllm_omni/diffusion/models/ 模型×融合算子匹配与使用位置的事实源(第 8 节)
MindIE-SD Pattern Matcher mindiesd/compilation/patterns/、passes/ 三段注册机制与现有 pattern
MindIE-SD 量化路径 mindiesd/quantization/quantize.py、layer.py 路径 B 的量化层图来源

7. 未解决问题

  • npu_quant_matmul / npu_dynamic_quant 等量化算子的 meta/fake 支持与 trace 能力。
  • kv_rms_norm_rope_cache 的输入/输出语义及与现有 rms_norm_pattern + rope_pattern 的重复匹配风险。
  • P0/P1/P2 各 pattern 在真实 DiT 模型图中的命中率与 kernel 级收益(需 NPU 实机验证)。
  • op-plugin / ops-transformer / ops-nn 融合算子与仓库版本配套(TorchNPU 26.0.0 / 26.1.0)的兼容性。
  • npu_swiglu 对 gate/up 分离布局模型的改写成本与命中率(LingBot / Cosmos3 / MammothModa2 / OVIS / Boogu / HiDream / FLUX2 / StableAudio 等)。
  • HiDream-Image 逐专家循环改造为 grouped GEMM 后接入 npu_grouped_matmul_swiglu_quant 的可行性。
  • 多卡并行(Ulysses/Ring)下 GMM 融合 pattern 与并行通信的交互。

8. 模型×融合算子匹配任务清单

本节为明确任务内容:将 §3.2 全量盘点出的候选融合算子与 vLLM Omni 全量扩散模型逐模型扫描匹配的结果固化为各融合算子的命中模型与具体使用位置。位置引用格式为 文件路径:行号(文件路径相对 E:\tmp\vllm-omni\vllm_omni\diffusion\)。每个融合算子均给出命中清单与显式"不适用/未命中"说明;实现阶段以对应模型源码为最终事实源。

8.1 P0:npu_quant_matmul_gelu(量化 MM + GELU)

匹配形态:npu_dynamic_quant + npu_quant_matmul + F.gelu(tanh/erf)。vllm-omni NPU 量化路径已产出该形态:quantization/int8_config.py:442-451(NPUInt8LinearMethod.apply)、mxfp8_config.py:400-403、mxfp4_config.py:284。

命中模型(GELU-tanh FFN,quant_config 已接线):

模型 FFN 位置 GELU 位置 量化
Qwen-Image models/qwen_image/qwen_image_transformer.py:473 FeedForward :445 ColumnParallelApproxGELU → F.gelu :468-470 mlp :759-787
GLM-Image models/glm_image/glm_image_transformer.py:700 ColumnParallelGELU F.gelu :725 全层 quant_config
FLUX models/flux/flux_transformer.py:76 FeedForward :48 ColumnParallelApproxGELU → :71-73 :60-73
SD3 models/sd3/sd3_transformer.py:41 FeedForward :29 GELU → F.gelu :35-38 未接量化
Helios models/helios/helios_transformer.py:138 HeliosFeedForward :110 ColumnParallelGELU → :133-135 quant_config
Wan2.2 / VACE models/wan2_2/wan2_2_transformer.py:114 WanFeedForward :84 ColumnParallelGELU → :109-111 :94(cross-attn KV 量化关闭 :587)
Wan2.2-S2V 复用 WanFeedForward :246 同 无量化 :104
HunyuanVideo-1.5 复用 flux FeedForward :535-546 同 flux quant_config(FP8 注释 :419)
LTX-2 models/ltx2/ltx2_transformer.py:236 LTX2FeedForward :208 ColumnParallelApproxGELU → :231-233 :611-694
DreamZero models/dreamzero/causal_wan_model.py:667-671 nn.GELU(tanh) :668-669 未量化
CosyVoice3 models/cosyvoice3_audio/cosyvoice3_dit.py:55-68 FeedForward nn.GELU(tanh) :63-64 未量化
GR00T diffusers FeedForward(models/gr00t/modeling/modules/dit.py:91-98,activation_fn="gelu-approximate") diffusers 内部 未量化

erf 分支命中:Ernie-Image models/ernie_image/ernie_image_transformer.py:396(gated GELU,gelu_type=erf)。

任务:实现 QuantMMGeluPatternGroup;为上述模型构造 FFN 片段单测;NPU 实机 kernel diff 验证。

8.2 P1:npu_grouped_matmul_swiglu_quant(_v2)(GMM + SwiGLU)

匹配形态:grouped_matmul(W13) → silu(x)*x → grouped_matmul(W2)。仅 2 个真实命中:

模型 MoE 结构 位置 版本
LingBot-Video 稀疏专家,torch._grouped_mm 显式 W13→silu→W2,bf16 未量化 models/lingbot_video/lingbot_video_transformer.py:368-380(GroupedExperts w1/w2/w3)、:502-504(for-loop 路径)、:510-532(_run_grouped_experts grouped_mm 路径) npu_grouped_matmul_swiglu_quant(未量化)
HunyuanImage-3.0 FusedMoE + SiluAndMul,量化穿透 models/hunyuan_image3/hunyuan_image3_transformer.py:1556-1648 HunYuanSparseMoeBlock、:1624 FusedMoE、:1547 SiluAndMul、get_expert_mapping :2100-2116 npu_grouped_matmul_swiglu_quant_v2(量化)

次生候选(非稀疏专家,需另行评估):

  • HiDream-Image:models/hidream_image/hidream_image_transformer.py:415-480 逐专家循环,moe_infer :457-480,已留 TODO 待改 grouped GEMM(:464-466)→ 改造后为目标。
  • Bagel/Lance(MoT,models/bagel/bagel_transformer.py:458-477)与 SenseNova-U1(MoT,models/sensenova_u1/sensenova_u1_transformer.py:251-270)为 token 路由双权重集,非 top-k 专家,GMM 融合不适用。

任务:实现 GMMSwigluPatternGroup;以 LingBot 的 _grouped_mm 图与 HunyuanImage-3.0 的 FusedMoE 图分别构造单测;group_list / 分组语义在 NPU 实机验证。

8.3 P1:npu_linear(Linear + 激活)

匹配形态:非 gated matmul + bias + activation。命中模型与位置同 8.1 表(未量化时走 npu_linear)。

优先级裁定:quant_config 存在 → npu_quant_matmul_gelu;否则 → npu_linear。此裁定需在 LinearBiasActivationPatternGroup 与 QuantMMGeluPatternGroup 之间建立显式优先级(P0 优先)。

任务:实现 LinearBiasActivationPatternGroup;与 P0 构建裁定单测。

8.4 P2:kv_rms_norm_rope_cache(RMSNorm + RoPE)

匹配形态:RMSNorm → apply_rotary_emb(Q/K 投影后)。RMSNorm→RoPE 是 vllm-omni 普适结构,几乎所有带 RoPE 的模型命中;带 KV cache 路径(cache 版前提)仅以下模型。

全量命中(RMSNorm→RoPE 于 Q 和 K):

模型 QK Norm 位置 RoPE 位置 KV cache
Qwen-Image models/qwen_image/qwen_image_transformer.py:557-558 :650-653 无
GLM-Image models/glm_image/glm_image_transformer.py:526-527 :621-622/:660-661 有(GlmImageLayerKVCache :348/:404,666-673)
Z-Image models/z_image/z_image_transformer.py:291-292 :340 无
OVIS-Image models/ovis_image/ovis_image_transformer.py:70-71 :145-146 无
Ernie-Image models/ernie_image/ernie_image_transformer.py:294-295 :343-344 无
LongCat-Image models/longcat_image/longcat_image_transformer.py:81-82 :146-150 无
Boogu-Image models/boogu_image/boogu_image_transformer.py:397-398 :432-433 无
HiDream-Image models/hidream_image/hidream_image_transformer.py:233-237/:256-261 :319-327 无
OmniGen2 models/omnigen2/omnigen2_transformer.py:161-162 :228-229 无
Bagel / Lance MoTRMSNorm models/bagel/bagel_transformer.py:476-477 :550-551 有(NaiveCache :326,649-653)
FLUX models/flux/flux_transformer.py:150-151 :251 无
FLUX2 / Klein models/flux2/flux2_transformer.py:138-139 :267 / models/flux2_klein/flux2_klein_transformer.py:283-284 无
Helios DistributedRMSNorm models/helios/helios_transformer.py:306-307 :360-361 有(cross-attn LRU :757)
Krea2 Krea2RMSNorm models/krea2/krea2_transformer.py:117-118 :147-148 无
NextStep-1.1 无 QK norm models/nextstep_1_1/modeling_nextstep_llama.py:191 有(DynamicCache :193-199)
SenseNova-U1 models/sensenova_u1/sensenova_u1_transformer.py:295-304(4 norm) :369-429 有(DynamicCache + flash :444-499)
Wan2.2 / VACE DistributedRMSNorm models/wan2_2/wan2_2_transformer.py:391-396 :447-448 无
Wan2.2-S2V models/wan2_2/wan2_2_s2v_transformer.py:112-113 :154-155 无
HunyuanVideo-1.5 models/hunyuan_video/hunyuan_video_15_transformer.py:352-353 :437-438 无
LTX-2 models/ltx2/ltx2_transformer.py:661-683 :515-526 无
LingBot-Video LingBotVideoRMSNorm models/lingbot_video/lingbot_video_transformer.py:188-189 :211-212 无
MiniMax-H3 models/minimax_h3/minimax_h3_transformer.py:346-347 :485-486 无
Magi-Human MultiModalityRMSNorm models/magi_human/magi_human_dit.py:769-770 :827-828 无
DreamZero models/dreamzero/causal_wan_model.py:510-511 + fused_qk_rms_norm :227-267 :551-570 有(AR 解码 KV :584-602、:604-609)
Cosmos3 models/cosmos3/transformer_cosmos3.py:533-534 :565 无
AudioX AudioXRMSNorm models/audiox/audiox_transformer.py:175-176 :211-212 无
MammothModa2 Qwen2RMSNorm models/mammoth_moda2/mammothmoda2_dit_model.py:442-443 :322-323 无
HunyuanImage-3.0 models/hunyuan_image3/hunyuan_image3_transformer.py:1757-1758 :1785-1790 有(ImageKVCache :1742-1749)
SoulX-Singer LlamaAdaptiveRMSNorm models/soulx_singer/modules/llama.py:30-48 llama.py:355 有(HF)

不命中(无 RoPE / 无 QK norm):SD3(PatchEmbed)、StableAudio(仅 RoPE 无 QK norm)、CosyVoice3(仅 RoPE)、GR00T(无 RoPE)。

特例:SenseNova-U1 已自带 Triton 融合版 QK-RMSNorm+RoPE(models/sensenova_u1/fused_rmsnorm_rope.py:9-198,qk_norm_rope_kernel),是 kv_rms_norm_rope_cache 的模型侧同构参考;但其头维分半(t/hw)的 3D 结构不匹配标准 1D 版。

重复匹配风险确认:vllm-omni 通过 layers/rope.py:306-329 apply_rope_to_qk 对 Q/K 连续调用 RoPE,且 Norm 独立于注意层前调用——与现有 rms_norm_pattern + rope_pattern 存在重复匹配,需冲突裁定。

任务:实现 NormRopeCachePatternGroup(默认关闭);先以 GLM-Image / Bagel / DreamZero(带 KV cache)为语义验证目标,NPU 实机确认输入/输出语义后开启。

8.5 P2:npu_gelu_mul(GELU × Mul)

全仓唯一命中:Ernie-Image models/ernie_image/ernie_image_transformer.py:396 —— up_out * F.gelu(gate_out)(gated GELU FFN,erf 版)。无其他模型存在 gelu(x)*y 组合。

任务:实现 GeluMulPatternGroup;以 Ernie-Image 片段构造单测。

8.6 P2:npu_swiglu(silu(x)*x)

命中面最广。两类形态:

已用 vLLM SiluAndMul(已 fused,pattern 可直接映射):

模型 位置
Z-Image / Ming models/z_image/z_image_transformer.py:385/:399
OmniGen2 models/omnigen2/omnigen2_transformer.py:472/:485
Bagel / Lance models/bagel/bagel_transformer.py:251/:258
HunyuanImage-3.0 models/hunyuan_image3/hunyuan_image3_transformer.py:1547

显式 silu(x)*x(gate/up 分离或已 merged,需按形态处理):

模型 位置 形态
FLUX2 / Klein models/flux2/flux2_transformer.py:53-55 / models/flux2_klein/flux2_klein_transformer.py:69-71 Flux2SwiGLU(silu(x1)*x2)
Krea2 models/krea2/krea2_transformer.py:171 F.silu(gate)*up(gate/up 分离,需合并)
NextStep-1.1 models/nextstep_1_1/modeling_nextstep_llama.py:260 act(gate)*up(merged,可直接映射)
SenseNova-U1 models/sensenova_u1/sensenova_u1_transformer.py:217 act(gate)*up(merged)
MiniMax-H3 models/minimax_h3/minimax_h3_transformer.py:541 silu(gate)*up(merged fc1)
LingBot-Video models/lingbot_video/lingbot_video_transformer.py:295-296 silu(gate)*up(分离,需合并)
Cosmos3 models/cosmos3/transformer_cosmos3.py:462 F.silu(gate)*up(分离)
StableAudio models/stable_audio/stable_audio_transformer.py:352 x*silu(gate)(nn.Linear 分离)
MammothModa2 models/mammoth_moda2/mammothmoda2_dit_model.py:99 F.silu(h1)*h2(分离)
OVIS-Image models/ovis_image/ovis_image_transformer.py:205 silu(gate)*x(单流);双流用 diffusers SwiGLU
Boogu-Image models/boogu_image/boogu_image_transformer.py:54-55/:135 silu(x)*y(分离)
HiDream-Image models/hidream_image/hidream_image_transformer.py:57 silu(w1)*w3(分离)

不适用:AudioX(Conv1d FFN,models/audiox/audiox_transformer.py:144)、Cosmos3-Edge(ReLU²,models/cosmos3/transformer_cosmos3_edge.py:75-76)、Magi-Human(SWIGLU7 自定义 clamp/+1,models/magi_human/magi_human_dit.py:97-112)、SoulX-Singer(HF LlamaMLP 在 lib 内)。

任务:实现 SwiGLUPatternGroup;merged 布局(NextStep / SenseNova-U1 / MiniMax-H3)可直接映射,分离布局(Krea2 / LingBot / Cosmos3 / MammothModa2 / OVIS / Boogu / HiDream / FLUX2)需先合并 gate/up 列,评估改写成本后分批接入。

8.7 P2:npu_gelu(erf 精确版)

命中:Ernie-Image gated GELU(erf,models/ernie_image/ernie_image_transformer.py:396)、GLM-Image glyph_projector("gelu" erf,models/glm_image/glm_image_transformer.py:1032)。

任务:实现 GeluErfPatternGroup;与现有 GELUPattern(tanh → npu_fast_gelu)按 approximate 分流。

8.8 模型侧已接入的 NPU 算子(pattern 上游现状)

torch_npu 原生算子已被 vllm-omni 直接使用,是 pattern 的天然上游:

  • torch_npu.npu_rms_norm:layers/norm.py:130/:198-200(RMSNorm/RMSNormVAE 的 NPU forward)。
  • torch_npu.npu_dynamic_quant + torch_npu.npu_quant_matmul:quantization/int8_config.py:442-451、mxfp8_config.py:400-403、mxfp4_config.py:284。
  • MindIE-SD 已集成:mindiesd.fast_layernorm(layers/norm.py:45)、mindiesd.layernorm_scale_shift(layers/adalayernorm.py:57)、mindiesd.rotary_position_embedding(layers/rope.py:62-68)。

附录

参考资料

术语表

术语 说明
Pattern Matcher 基于 torch._inductor.pattern_matcher.register_replacement 的自动融合机制
register_replacement 将算子组合 pattern 替换为融合算子的注册机制
DiT Diffusion Transformer,扩散模型 Transformer 主干
GMM Grouped MatMul,分组矩阵乘(MoE 专家侧)
SwiGLU Swish-Gated Linear Unit 激活
A8W8 / A4W4 量化精度组合(激活 8/4 bit,权重 8/4 bit)
MoT Mixture-of-Tokens(Bagel/Lance、SenseNova-U1 的 token 路由双权重集,非稀疏专家)

文档更新计划

阶段 动作
本 RFC 仅新增根目录 RFC 文档,不动 docs/
实现阶段 同步更新 docs/zh/features/compilation.md(新增融合清单章节,含第 8 节模型命中表)及英文版;更新 docs/zh/release_note.md

文档站点验证

本 RFC 不涉及 docs/ 内容与 Sphinx 构建;实现阶段若更新文档,需执行以下最小验证路径(本次未执行,仅给出建议命令):

python -m pip install -r docs/requirements-docs.txt
python -m sphinx -b html docs docs/_build/html
likedislike
blianblian成员
8月9日 添加了label:rfc
blianblian成员
8月9日 修改了issue 的描述
blianblian成员
8月9日 修改标题为 “[RFC]: 自动融合: 扩展统一 Pattern Matcher 覆盖量化融合与 GMM/MM+激活”,原标题为“[RFC]: 自动融合——扩展统一 Pattern Matcher 覆盖量化融合与 GMM/MM+激活”
blianblian成员
8月9日 修改了issue 的描述
blianblian成员
8月11日 修改了issue 的描述
ascend-robotascend-robot成员
8月20日 关闭了 issue
ascend-robotascend-robot成员
8月20日 添加了label:resolved
Zzqxu
8月20日 关联了pull request:[Docs][docs] tie FLUX.1-dev cache-dit example into feature docs
blianblian成员
8月22日 关联了pull request:[Feature][compilation] Wan2.2 编译融合增强:Pattern 覆盖 5 类算子 + 双精度支持 + 模型级 bf16
blianblian成员
8月22日 关联了pull request:[Feature][compilation] MiniMax-H3 编译融合:bf16 推理 + RMSNorm/RoPE pattern + dummy run 验证
blianblian成员
8月23日 删除了label:resolved
blianblian成员
8月23日 关联了pull request:[Feature][Compile] MiniMax-H3: bf16 dummy run with compile-time RMSNorm/RoPE fusion
blianblian成员
8月23日 关联了pull request:[Feature][Fusion] Add MiniMax-H3 AdaLN/SwiGLU/gate triton fusion patterns
blianblian成员
8月23日 关联了pull request:[Feature][quant] Unify --quant {fp32,bf16,w8a8} with device-aware w8a8 and fix quant-layer guard stability
blianblian成员
8月23日 关联了pull request:[Feature][compilation] Add Qwen-Image RoPE and norm_out AdaLN fusion patterns (register + BF16/FP32 tests)
lijinxilijinxi成员
8月31日 关联了看板:MindIE-SD
blianblian成员
9月7日 关联了pull request:[Feature][ops] Add catlass MXFP8 FFN fusion: mm_swiglu_mxquant / mm_gelu_mxquant with real-graph compile enablement
blianblian成员
9月21日 关联了pull request:[Feature][ops] Add the MXFP8 FFN fusion kernels and the fused attention prologue kernels