Skip to content
cccskills
FreePublished on GitHub

fusion-scope-analyze

融合单元的范围判定与收益前置评估:判定「哪些计算该被融进同一个融合单元、边界画在哪、 融了值不值」。

结构侧按融合单元构造规则切边界——函数边界即候选组;FA(含 BSA 等变种)为 禁融锚点;以 norm / rope / FA 为分界分区,全 Vec 区域优先试融;区域内有 Cube 时以 Cube 为 首算子向后包裹 Vec(Σvec 小于 cube 或遇下一 Cube 封口);一轮之后纯 Vector 单元之间再迭代; MLP / MoE 以矩阵乘族(MatMul / BatchMatMul / GroupedMatmul)为界;若该段计算已由单个 融合算子承载,按规则 6 先确认载体是否已生效(不重复建单元)。

收益侧按计算单元利用率判型(memory_bound、*_vec|mac|mte2|mte3_ratio、cube_utilization), 叠加带宽下限 / 区域占比 / 天花板法 / 地板先行 / Amdahl 传导校验给出 go/no-go。

Read more (about 460 more characters)

当用户问「这几个算子能不能融成一个」「融合边界画在哪」「融多大范围」「融了值不值得」, 或 profiling-analyze 给出融合机会候选需要定范围与收益时使用;即使用户只说「这条链要不要 合成一个 kernel」「这里能不能省一次读写」也应触发。

**已经做完、实测收益却打平或为负时同样触发**——此时的任务不是接受"融合无收益", 而是按事后复核做**等功忙计数对照**归因,并在缺陷落在融合核自身时**升级 operator-dev**。边界:只出「融合单元草案 + 收益判定 + 否决理由」。

不做采纳与选点(dit-perf-opt 依收益选 top 并派活)、不做采集与瓶颈定位(profiling-collect / profiling-analyze)、不写 kernel、不写 pattern、 不做使能与并行选型、不定义验收标准(引 accuracy-gate / perf-gate)。

由 profiling-analyze(融合机会候选)与 operator-dev(实现前的收益评估)调用。

The English summary is being prepared. Showing the original description.

See how to install

Files included (8)

  • SKILL.md14.0 KB
  • evals/evals.json4.2 KB
  • references/fusion-benefit-method.md19.6 KB
  • references/fusion-candidate-identification.md14.0 KB
  • references/fusion-unit-method.md9.4 KB
  • scripts/check_fusion_scope.py8.2 KB
  • scripts/perf_probe.py14.2 KB
  • scripts/theory_columns.py10.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

融合范围与收益分析

判定融合单元:哪些计算该被融进同一个 kernel、边界画在哪、这样融值不值。本技能只出判定与建议, 不动实现——实现侧(写 pattern / 写 kernel)与选点派活分别由上游调度与实现技能承接。

输入

输入内容用途
模型代码forward / 模块定义(含被封装成同一函数的算子)规则 1:函数边界即候选组
算子执行序kernel_details.csv:Name、Start Time(us)、Duration(us)、Task Type邻接链、区域切分、Σ 耗时核算
计算单元利用率同目录含 PipeUtilization 列的文件(op_summary_*.csv 为权威来源):*_vec_ratio、*_mac_ratio、*_mte2_ratio、*_mte3_ratio、cube_utilization(%)(判型所需的四族 ratio 缺列或全 N/A 即判采集不合格,先补采:先用 ../profiling-collect/scripts/check_output.py 判该次采集不合格,再按其提示带 --task-time=l1 --aic-mode=task-based --aic-metrics=PipeUtilization 重采);memory_bound 是可算字段(按下方公式现算),不是必备列——真实 CANN 导出常不含该列判型:这条链的收益来自哪一类

判定链

1 切边界:按融合单元构造规则(函数边界 → 锚点分区 → Cube 首算子包裹 → 迭代)
2 判型  :用单元利用率判「收益来自哪一类」——向量饱和 / MTE 饱和 / 向量约束单 pass
3 估收益:带宽下限 → 区域占比 → 天花板法 → 与本地板比 → Amdahl 传导校验
4 出结论:融合机会点清单(含否决理由)+ 收益量级 + 交付输入

融合单元构造规则(结构侧)

#规则终止 / 否决
1函数边界即候选组:模型代码里定义在同一函数内的算子一般可融(norm、rope)跨函数默认不同组,除非执行序证明邻接
2注意力族禁融:注意力算子族及其全部变体(稀疏 / 量化 / 分块…,如 FA 及其变种)既不能被吸收,也不能被跨越硬锚点
2b通信不是硬锚点:先按 Task Type == COMMUNICATION 认出通信算子,再按通信与计算的重叠率、launch 前后依赖判「是否真把计算序切断」;并发则不构成边界(Stream ID 为 N/A 时该判据不适用,不得据此下结论)串行依赖(重叠≈0 且有依赖)才是边界
3锚点分区:以 norm / rope / FA 为分界把执行序切区;区域内全为 Vec 时优先试融区内出现 Cube ⇒ 转规则 4
4a隐藏型:Vec 总量 < Cube 时,Cube 作首算子向后包裹 Vec① Σvec ≥ Cube ② 遇到下一个 Cube
4b搬运消除型:小 Cube + 大 Vec(Σvec ≥ Cube)仍可融——只要代码或 profiling 证明输入输出关联(shape+dtype 接得上),收益即来自减少中间态 GM 往返;不得用"cube 小"一票否决无邻接证据(I/O 接不上)才是否决理由
4c不做跨双 Cube 的复杂融合:cube+vec+vec+cube 且中间 Vec 段 < 两侧 Cube 时,按 4a/4b 分别处理两侧或不动结构复杂度判据
5迭代融合:一轮之后,纯 vector 的融合单元之间再走一次规则 3/4收敛接收益侧(地板先行 / 0.5% 阈值 / 与图开销对抵)
MLP / MoE以矩阵乘族(MatMul / BatchMatMul / GroupedMatmul)为界分区,Cube 作首算子该段已由单个融合算子承载时,按规则 6 先确认其是否生效

规则 4 的判读口径:事前用执行序各算子 Duration 求和判定,事后用 *_mac_ratio vs *_vec_ratio 复核。 详细判据、失效信号与已证伪对照见 references/fusion-unit-method.md。

判型与收益(收益侧)

判型主指标是官方公式定义的 memory_bound = mte2_ratio / max(mac_ratio, vec_ratio)(可算字段, 真实导出常不含该列,按四族 ratio 现算即可;<1 无内存瓶颈;>1 内存受限):

判型观测量融合是否值得
MTE 饱和memory_bound > 1、*_mte2/mte3_ratio 高、vec_ratio ≈ 0值得——融合的价值就是减少/合并搬运
向量饱和vec_ratio 高、mte2_ratio ≈ 0、memory_bound < 1不值得——"喂更少数据 / 融更多东西"不会移动它
向量约束的单 passvec_ratio 高但内存余量充足值得,但收益上限在向量侧

方法单点在 references/fusion-benefit-method.md(两级口径:L0 搬运消除上界(初筛)/ L1 理论锚定(下结论)); L1 的理论列由本技能自产的 scripts/theory_columns.py 计算(逐算子「字节 ÷ 实测有效带宽、FLOPs ÷ 实测峰值算力」, 峰值参数由使用者给出、缺参数拒算;峰值可用 scripts/perf_probe.py 实测,其口径自检不通过即 fail-closed 拒出), 只在关键流(critical stream)上核算,且 duration_over_theoretical ≈ 1 的成员不计入可回收量。 阈值与噪声地板只引用 ../perf-gate/SKILL.md,本技能不另立一套。

事后复核(实测收益打平或为负):本技能的另一半职责,方法在 references/fusion-benefit-method.md §10(关键流核对 → 等功忙计数对照 → 判决 → 升级)。 总纪律:在完成等功对照之前,"融合打平/为负"不是结论,不得据此关闭该项。 判决落在"缺陷在融合核自身"(等功下核芯忙计数高于被替换算子)或"epilogue 写法缺陷"时, 必须升级 ../operator-dev/SKILL.md 深入分析,并一并给出重算后的可操作上界。

与相邻技能的关系

方向技能接口
上游(候选与数据)../profiling-analyze/SKILL.md它在 Layer 3c 出融合机会候选,本技能接候选做结构侧边界与收益判定(辅助关系)
可选调用方(实现前评估,非门禁)../operator-dev/SKILL.md它可在用户输入下直接实现算子;需要收益评估时可选调用本技能(不强制、不设编号门槛)
阶段编排(L2)../model-auto-optimization/workflows/optimization-flow.md其 S1 在「识别机会点」后、「收益分析」前调用本技能;未登记进交付件的机会点不得进入收益分析与迭代表
可行性快验(上游)../dummy-run/SKILL.md它把「融合可行性结论(可行/不可行 + 原因)」交本技能做范围与收益判定
选点与派活../dit-perf-opt/SKILL.md本技能只给机会点与收益结论;是否纳入、排 top、派给谁由它决定
下发削减的分工../dit-perf-opt/SKILL.md融合 kernel 是减少下发次数的手段之一,归本技能(规则 5 迭代融合即此意);非融合的下发削减(减少 program 数、上提重复 host 准备、消除动态形状回读)归它,见其 references/host-dispatch-dimension.md

不做什么

  • 不做采纳与选点(不排序、不裁决、不派活);
  • 不做采集与瓶颈定位(这两步属 profiling 采集与分析管道);
  • 不写 kernel、不写 pattern、不做使能与并行选型;
  • 不定义验收标准(等价性引 ../accuracy-gate/SKILL.md,性能入库引 ../perf-gate/SKILL.md)。

交付件(强制)

本技能必须交付一张表,且交付前必须过门禁;未交付 = 本环节未完成。

  • 路径:{run_results_dir}/fusion_scope.md(会话产物,不入库)
  • 结构:口径声明(数据 / 规则版本 / 收益模型 / [探索] 或验收态)→ 汇总(每个 block 融合前后算子数、降幅、块内收益合计)→ 表 1 融合单元与收益 → 表 2 递进融合建议
  • 列(顺序固定,两表一致):序号 | 融合kernel名 | 融合kernel明细 | 次数 | 收益预期 | 是否建议融合 | 说明
    • 明细 = 成员算子名(取列表中的 _ 尾段)以 k1+k2+… 连接,每 5 个换行;
    • 次数 = 该形态在块内出现次数;收益预期 = 块内总收益(表 2 为增量),形如 a%-b% 或 0%;
    • 列内容只放该列内容:括号说明、"须按…确认"、规则名、成员数等一律写进「说明」列;
    • 建议列只表达是否建议融合;递进/迭代融合放表 2,不塞进表 1。
  • 只列「建议融合」行(不建议项不展示,避免噪声);超长单元(>5 成员)在说明列标「建议分阶段融合」。
  • 门禁:python scripts/check_fusion_scope.py --file {run_results_dir}/fusion_scope.md (逐列校验列内容洁净;退出码 0/1/2;自带 --selftest 负样本回归,pre-commit 已挂钩)
  • 调用方检测(只落在编排与选点链):profiling-analyze 交棒须带候选清单;dit-perf-opt 未在交付表登记的机会点不得选点; 实现类技能(如 operator-dev)在用户输入下可直接实现算子,不受本交付件门禁约束——本技能对它们只是可选的收益评估来源。

Reference Files

  • references/fusion-unit-method.md — 加载时机: 要判定融合单元的边界(候选分组、锚点、Cube 首算子、迭代再融、MLP/MoE 分区)时
  • references/fusion-benefit-method.md — 加载时机: 要判定某条链或某个融合单元值不值得做(判型、收益上界、地板先行、传导校验)时
  • references/fusion-candidate-identification.md — 加载时机: 开始找融合点之前(候选来源、两个候选是否争同一 seam、profile 三类误判的排除、候选的预注册与 L1/L2 分级、绕行的可删除性)与 profile 归因出现「看不到的成本」时(逐算子视图里为零、wall 却明显)读它

路由判据(何时读候选识别文件):① 在动手找融合点、或接收上游候选清单之前——先用它筛掉"争同一处 seam"的候选(竞争者的收益不可相加),再进 fusion-unit-method.md 定边界; ② profile 归因出现"看不到的成本"或"名字还在但不像被调用"时——先按它的三类误判排除法判真假,再决定是否立单元; ③ 给候选排收益 / 写交付表之前——按其判定法做站点重叠分析,并把旁路型闸门"是否静默丢功能"用 OFF/ON 逐位对比收口。

候选争用同一站点:禁止把单项收益相加

规则:若候选 A 的融合会"吃掉"候选 B 所优化的算子,则 B 在 A 打开后只剩残余价值——必须按组合实测, 不允许把各项的独立测量值相加。

实测(单卡、生产形状、ABBA):收益不可按各项独立值外推。

机理:某候选合并了层间边界后,直接删掉了其余候选的绝大多数目标站点 ⇒ 后者只剩独立价值的 个位数百分点(本组合观测,须本地重测;读数见会话产物归档 {run_results_dir}/archive/)。

执行:候选清单先做站点重叠分析(谁删掉谁的目标算子);重叠者必须按组合测量,并在表里写清 "该项在组合 X 下的残值",而不是并列各自的独立值。

维护与更新

判型字段与采集前置变化、出现新的锚点(新算子族/新框架结构)、或上游序列变化(量化/并行后重审)时, 更新本节与两份 references 并复核失效信号;外部事实(框架 / 版本专有的算子名与前提)须标注来源, 仓内无证据的不得写成已验证结论。本技能只承载可迁移的判据与辨识方法:设备 / 模型 / 版本的实测读数、 代际常量与个案细节留在会话产物与对应 case 记录,不写进 skill,也不内置任何设备代际的绝对阈值。

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

**精度验收标准**:凡是"改动不应改变结果"的场合(等价替换、算子/子模块融合、并行切分、 编译与图下发、拷贝消减),都按本标准判"合格 / 不合格"——等价分层(L1 逐位 / L2 数值门 / L3 有损门)+ 三级验收序(① 同配置重跑逐位 → ② 跨配置数值门 + 产物 md5 不变 → ③ 质量门)+ 判据不达标时的排障入口。当用户说"这个算子能不能换个写法/换个 kernel/等价实现/ 无损替换""替换后结果会不会变""怎么证明逐位一致""结果不对""花屏""尾部塌了" "CPU 跑对 NPU 跑不对",或发现某个 hotspot 占了大头(例如某类算子在阶段里占 90% 以上)想动手时, 都应触发;即使用户只说"这样改有没有把结果改坏""能不能判它是无损的"也应触发。 覆盖:等价分层与判据、满足本标准的实现约定(per-shape 对拍写进实现,把索引/相位/顺序类重写 错误在首次调用抓住)、per-shape 条件性等价(同一改动在不同形状下结论可能不同)、 判据不达标 → `references/silent-failure-localization.md` 排障入口、否决案例的形态学 (换写法未换 kernel / 差异极小仍非逐位 / 等价但 OOM)、以及收益口径的归属(性能数字一律交 `perf-gate`)。 **近义分流**:选量化档 / 特性选档(要不要开量化、开哪一档)→ `dit-perf-opt`; 并行选型(USP / CP / TP 怎么切)→ `dit-parallel-opt`;本技能只判"结果是否被改变", 不负责选档与选型。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

NPU 图批量下发能力(aclgraph / aclgraph_ex 家族)的开发与调优。覆盖 mindiesd 的 aclgraph_backend:NPUGraph 静态 capture、全局 graph pool、 lazy capture、专用 copy stream + event 管线、shape/dtype 校验、max_entries 驱逐。 当用户需要减少 host launch 开销、静态 shape 大 batch 场景加速、 或排查 NPUGraph replay 输入不匹配问题时使用此 skill。 即使用户只提"批量下发""graph capture""图捕获"而未说 aclgraph,也应触发; pattern/Inductor 融合(default 后端)见 pattern-dev,算子本体见 operator-dev, 本技能只覆盖图批量下发。由 dev-workflow 的编译开发阶段与 model-auto-optimization 的 图下发场景指引加载。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

MindIE-SD 核心算子(FA/BSA/GMM/MM)性能基准工具链。使用:模型优化(model-auto-optimization 的 S1/S4 选型)中用 mindie_bench 对单算子做实现级实测,按 dtype/量化档/稀疏度/形态对比 选出最优配置(产物:选型证据;稀疏度-性能曲线供 S4 稀疏度选型);开发:benchmarks/ 工具链扩展与新算子接入测试(供 operator-dev / pattern-dev 调用)。 当用户需要对比算子实现选型、新增或修改 benchmark 代码、排查 benchmark 数据异常、 给基准加算子/指标时使用;即使用户只说"benchmark 数据不对""给基准加个算子" "对比下这几个 FA 实现哪个快"也应触发;特性级方案选档请走 dit-perf-opt (本 skill 只做实现级实测)。 由 model-auto-optimization 的 S1/S4 选型场景与 operator-dev 的算子接入验证场景调用, 亦由 dev-workflow 在基准开发时指引加载。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

MindIE-SD Python 代码格式与 lint 规则。当编写、格式化、lint 检查或审查 MindIE-SD 项目的 Python 代码时使用此 skill。 即使用户只提到"提个MR"或"代码好像有 lint 问题"而未明确说格式化,也应触发;Markdown 格式问题见 markdown-lint,提交/PR 规范见 mindie-sd-community-governance。 通常由 dev-workflow 在编码阶段指引加载。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

MindIE-SD 仓库开发总入口(侧轨)。当用户进行 MindIE-SD 的任何代码开发工作时使用此 skill—— 包括但不限于写 pattern、改测试、部署到昇腾、跑 benchmark、性能分析、多卡并行、复盘归档。 模型/三方框架自动优化类任务(非本仓代码改动)由 model-auto-optimization 入口承接, 本入口只在优化流程需要新增 pattern/算子/部署代码时承接其指向的开发子任务。 即使用户未明确提到"开发流程",只要涉及 MindIE-SD 代码改动都应触发。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

分布式并行策略选型与实测(USP / CP 通信掩盖 / CFG / TP/RSP/PP 概览;含拓扑相关选型 (按实测拓扑分域条件化:域内 bulk vs 跨域 head-parallel 翻转)与 AlltoAllV 缺陷绕过)。在 model-auto-optimization 中承担 S3:优先 USP、结合拓扑带宽差异选 CP,少量 step + 多 rank 验证特性开启与掩盖(产物:并行方案 + 多 rank 证据)。当用户需要多卡并行 策略选择、**序列并行形态抉择**(纯 Ulysses vs 复合 AllGather-KV×Ulysses:按 GQA / 跨域带宽 / 形态 plumbing 条件化定胜负)、**并行 × 稀疏叠加**(seam 契约:先汇聚后稀疏、 窗口偏移、块对齐、per-head 掩码;含「稀疏看似生效实则未生效」判定)、通信掩盖调优 (含**掩盖率上限**:1-1/n 何时成立、c/f 决定的真实上限、没生效的排查)、**并行方案 差异归因**(阶段 Δ 分解 / 集合通信按 communicator 归属 / 4→8 卡线性度),或排查多卡 跑不动 / 通信暴露大 / 换卡组 / 端口 bind / HCCL 带宽验证问题时使用;**并收编原并行作用域诊断**: 改了 SP/CP/Ulysses/AllGather-KV 后**不报错但结果没变/性能没变**、或小规模能跑大规模崩 (如 Ascend EE1003 coreDim 超限)时,用本技能证明"改动到底有没有生效"(判别量逐层收窄 + 两侧对照 + 日志≠生效,见 `references/scope-effectiveness-check.md`); 即使用户只说 "多卡跑不动""通信暴露大""为什么没达到 6/7 的掩盖率""CP 和 USP 该选哪个""CP 叠稀疏 怎么不生效"而未说并行,也应触发。特性档位/接口事实见 `docs/zh/features/parallelism.md` /`usp.md`(仓内真源),框架侧开启见 framework-integration; 本技能承载选型决策、monkey-patch 掩盖与多卡诊断实测。 由 dev-workflow 多卡场景触发,亦由 model-auto-optimization 的 S3 阶段触发。

The English summary is being prepared. Showing the original description.

Ascend/MindIE-SD15Updated Oct 17, 2026

See all skills by Ascend

Report a problem with this skill