本文へ移動
cccskills
無料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。

続きを読む(あと約 460 字)

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

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

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

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

インストール方法を見る

含まれるファイル(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(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

融合范围与收益分析

判定融合单元:哪些计算该被融进同一个 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,也不内置任何设备代际的绝对阈值。

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

**精度验收标准**:凡是"改动不应改变结果"的场合(等价替换、算子/子模块融合、并行切分、 编译与图下发、拷贝消减),都按本标准判"合格 / 不合格"——等价分层(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`;本技能只判"结果是否被改变", 不负责选档与选型。

日本語の概要は準備中です。原文の説明を表示しています。

Ascend/MindIE-SD152026年10月12日 更新

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 的 图下发场景指引加载。

日本語の概要は準備中です。原文の説明を表示しています。

Ascend/MindIE-SD152026年10月12日 更新

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 在基准开发时指引加载。

日本語の概要は準備中です。原文の説明を表示しています。

Ascend/MindIE-SD152026年10月12日 更新

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

日本語の概要は準備中です。原文の説明を表示しています。

Ascend/MindIE-SD152026年10月12日 更新

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

日本語の概要は準備中です。原文の説明を表示しています。

Ascend/MindIE-SD152026年10月12日 更新

分布式并行策略选型与实测(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 阶段触发。

日本語の概要は準備中です。原文の説明を表示しています。

Ascend/MindIE-SD152026年10月12日 更新

Ascend のスキルをすべて見る

このスキルの問題を報告する