本文へ移動
cccskills
無料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 的 图下发场景指引加载。

インストール方法を見る

含まれるファイル(2)

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

SKILL.md(原文)

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

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 变化后须同步本文,避免与远端实测不一致。

レビュー

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

同じリポジトリのスキル

概要と使いどころ

**精度验收标准**:凡是"改动不应改变结果"的场合(等价替换、算子/子模块融合、并行切分、 编译与图下发、拷贝消减),都按本标准判"合格 / 不合格"——等价分层(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月10日 更新

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月10日 更新

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月10日 更新

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

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

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

分布式并行策略选型与实测(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月10日 更新

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`。

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

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

Ascend のスキルをすべて見る

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