Skip to content
cccskills
FreePublished on GitHub

aclgraph-dev

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.

See how to install

Files included (2)

  • SKILL.md5.9 KB
  • evals/evals.json1.8 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

ACLGraph 批量下发

边界:与 pattern-dev 的分工

pattern-dev(pattern matcher + Inductor)      aclgraph-dev(批量下发)
├─ PatternBase / register_replacement              ├─ torch.npu.NPUGraph 静态 capture
├─ 三段注册 / 单测 / mismatch 调试                 ├─ graph pool / lazy capture / replay
├─ default 后端: aot_autograd + Inductor codegen   ├─ 专用 copy stream + event 管线
├─ functionalization → _to_copy → InplaceCopy      └─ shape/dtype 校验 + max_entries 驱逐
└─ Copy 消减(default 路径)

两者通过 CompilationConfig 的 aclgraph_only / aclgraph_with_compile 开关联动 (见 mindiesd/compilation/mindie_sd_backend.py 的选路逻辑)。

机制(事实源: mindiesd/compilation/aclgraph_backend.py)

NPUGraph 批量下发的本质:把一次推理的算子序列静态捕获成图,之后仅需 replay, 省去每步的 host 端算子 launch(Python enqueue / AclExec 调用)。适用条件是输入 shape/dtype 稳定(变化会触发重新 capture 或校验失败)。

核心对象:

  • torch.npu.NPUGraph() + torch.npu.graph(npu_graph=aclgraph, pool=pool):捕获执行体
  • torch.npu.graph_pool_handle():全局 graph 内存池,避免每次 capture 重新分配
  • capture 期间 patch gc.collect / torch.npu.empty_cache 为空操作,防止捕获中内存被回收
  • _ACLGraphEntry 按 input_shape 缓存(entries: dict[shape, entry]),同 shape 复用图

配置开关(事实源: mindiesd/compilation/compiliation_config.py)

开关默认含义
aclgraph_onlyFalse跳过编译(不跑 pattern/Inductor),直接对原始图做 NPUGraph capture
aclgraph_with_compileFalse先走 MindieSDBackend.compile()(pattern 融合等)再 capture
aclgraph_lazy_captureFalse首次调用时才 capture(capture 用 detach() 共享存储);False 时用 detach().clone() 稳定缓冲
aclgraph_max_entries0缓存的图条目上限,>0 时按 FIFO 驱逐最旧条目
safe_output_modeTruereplay 输出 clone 一份再返回(防输出被调用方原地修改污染图内 buffer)

npu_graph_available 自动检测:torch.npu.NPUGraph 与 torch.npu.graph 均存在才为 True; 不可用时 aclgraph 开关自动失效回退 default。

使用流程

from mindiesd.compilation import MindieSDBackend, CompilationConfig

# 场景 A: 纯批量下发(不做 pattern 编译)
CompilationConfig.aclgraph_only = True

# 场景 B: pattern 编译 + 批量下发(推荐,pattern 收益与 launch 收益叠加)
CompilationConfig.aclgraph_with_compile = True

torch.compile(model, backend=MindieSDBackend())

选路逻辑(mindie_sd_backend.py):

aclgraph_with_compile && npu_graph_available → compile() 后 aclgraph
aclgraph_only && npu_graph_available        → 直接 aclgraph(跳过 compile)
else                                       → default(aot_autograd + Inductor)

关键行为与坑(代码实证)

  1. 输入校验(D1):replay 时逐个对比 static_buf 与 new_inp 的 shape/dtype, 不一致直接 RuntimeError: ACLGraph input mismatch at position i。 动态 shape 模型必须关掉 aclgraph 或保证 shape 稳定。
  2. data_ptr 跳过(C1):static_buf.data_ptr() == new_inp.data_ptr() 时跳过 copy (同一存储直接复用,零拷贝)。
  3. 异步 copy(C3):需要拷贝的输入走专用 copy stream(torch.npu.Stream)批量 copy_,再 record_event + 默认流 wait_event,与 capture 内计算重叠。 copy 前(A1)默认流先 synchronize() 保证输入就绪。
  4. 地址漂移告警(D2):DEBUG 级别日志会对 input_addresses 与本次输入 data_ptr() 不一致打 warning——调用方用不同存储复用图时提示先拷入 static buffer。
  5. safe_output_mode:默认 True 返回 clone;输出被外部原地修改时不污染图内 buffer。
  6. 静态 shape 要求:shape 变化 → 触发新 capture(首次开销大)或校验失败。大 batch / 固定分辨率推理收益最大;动态 seq/分辨率场景慎用。

与 torch_npu 生态的对应

aclgraph / aclgraph_ex 是 torch_npu / torchair 生态中的图批量下发后端家族 (名称随版本变化)。MindIE-SD 的接入点是上述 aclgraph_* 开关 + create_aclgraph_backend(), 本 skill 只描述本仓已实现的能力;torch_npu 侧新后端名称以远端环境实测为准。

维护与更新

当 aclgraph_backend.py / compiliation_config.py 的 capture 行为、开关或校验逻辑变化, 或 torch_npu NPUGraph API 升级时,按 dev-workflow 的复盘流程更新本 skill。

绑定提示:本 skill 内容与 mindiesd 代码(aclgraph_backend 等)与 torch_npu 生态强绑定, 代码行为/API 变化后须同步本文,避免与远端实测不一致。

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

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

DiT 计算模块(L3):把**已定位的 DiT 计算瓶颈**落成特性级选档与实施—— 量化档(W8A16 / W4A16 / W8A8 系列 / W4A4 / MXFP8 / FA 量化)、稀疏(rf_v2 / ada_bsa)、 缓存(DiTCache / AttentionCache / 时间步优化)、编译启用(MindieSDBackend / Pattern 融合 / ACLGraph) 的**开不开、开哪一档、怎么开、怎么复验**;依据是 `docs/zh/features/*`(特性真源)+ framework-integration/references/framework-support-matrix.md(支持状态)。 即使用户只说"这个模型怎么加速""量化/稀疏/Cache 怎么选怎么开""要不要开量化、开哪一档""这个档位开了有没有效果" 而未提 profiling,也应触发。 **入口条件**:瓶颈点已明确(用户带一句实测锚点,或编排层交付标签)时由域入口 `performance-optimization` 按标签分发到本技能;**瓶颈未明("怎么加速 / 跑通 / 采 profile")先走 `model-auto-optimization` 定位**,不在本技能内做占比分析。 near-miss:多卡并行形态 / 通信掩盖 / TP·offload 选型 → `dit-parallel-opt`;VAE 解码段与 host 固定开销 → 各自模块(VAE / host);单算子实现级实测选型(mindie_bench)→ `benchmark-dev`; 需要新增 pattern / 算子才能落地本档 → `pattern-dev` / `operator-dev`;框架侧开关与使能验证 → `framework-integration`;量化器位级契约与精度对齐(编码公式 / 舍入 / scale 粒度)→ `quantization-dev`;精度验收判据 → `accuracy-gate`;数字入库口径 → `perf-gate`。

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