Skip to content
cccskills
FreePublished on GitHub

benchmark-dev

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.

See how to install

Files included (4)

  • SKILL.md13.5 KB
  • evals/evals.json4.9 KB
  • references/benchmark-guide.md4.5 KB
  • references/troubleshooting-benchmark.md7.0 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Benchmark 工具链开发与算子选型(MindIE-SD 核心算子)

benchmarks/ 下的算子性能基准工具链(FA / BSA / GMM / MM 微基准、报告与 drift 门禁)。 本 skill 覆盖两个方向:

  1. 开发 benchmark(本上下文主体):修改/扩展工具链代码本身——CLI、口径、schema、报告、数据异常排查
  2. 使用 benchmark:mindie_bench CLI 的应用——模型调优中对单算子做性能分析,选出性能最优的 FA/BSA 实现(命令行的约束与使用也是应用该工具的过程)

1. 定位:开发 + 使用

1.1 开发(面向工具链代码)

架构三层(common 口径单点 / xpu-perf-plugin 运行时 / scripts 报告)、test-first、schema 数据驱动、数据守卫。见 §2-§7。

1.2 使用:模型调优中的算子选型(面向推理模型)

在模型调优/性能优化流程中,用 benchmark 对单个算子做实测对比,为模型选择最优算子配置:

  • 对比不同 dtype/量化档(真实内核分发):内核按 dtype/quant_algo 自动选择(fa bf16→torch_npu.npu_fusion_attention、mxfp4→torch.ops.mindiesd.quant_flash_attn;mm NO_QUANT→matmul、W8A8→npu_dynamic_quant...),用 --config {dtype: [...]} 一次对比不同实现;func 键只是报告系列标签(fn=),不切换内核。如

    python benchmarks/scripts/mindie_bench.py run --op "{fa: {}}" \
        --config "{seqlen: [4096, 8192], dtype: [bf16, fp8, mxfp4], timeout: 300, peak_flops: <设备实测峰值>}"
    # report --report-dir {父目录} 合并不同 run,对比曲线
    
  • 对比不同参数形态:heads / head_dim / 量化档(dtype)/ 稀疏度(BSA sparsity)对性能的影响

    # 同 dtype 下扫 heads,选吞吐最优的 head 配置
    python benchmarks/scripts/mindie_bench.py run --op "{fa: {num_heads: 16}}" --config "{seqlen: [8192], dtype: [bf16], peak_flops: <设备实测峰值>}"
    python benchmarks/scripts/mindie_bench.py run --op "{fa: {num_heads: 32}}" --config "{seqlen: [8192], dtype: [bf16], peak_flops: <设备实测峰值>}"
    # BSA 扫稀疏度,看 MFU/latency 随 sparsity 的收益曲线
    python benchmarks/scripts/mindie_bench.py run --op "{bsa: {}}" \
        --config "{seqlen: [8192, 16384], dtype: [bf16], sparse: [0.6, 0.8, 0.95, 0.99], timeout: 300, peak_flops: <设备实测峰值>}"
    
  • 对比多档位:一次 --config 内列表值笛卡尔积(heads × dtype),一次跑完对比

  • 多 run 合并:不同实现的 run 放同一 report 父目录下,report 合并为单 HTML 对比

选型依据:MFU(计算利用率)、latency;FA/BSA 对比时注意口径一致性(同一 peak_flops/peak_bw 输入、同 seqlen、同 dtype)。选出的最优配置再进入模型(结合 dit-perf-opt 的方案实施与复验)。

选型语义:本 skill 的「选型」是实现级实测(同一算子不同 dtype/形态/稀疏度选最优实现);与 dit-perf-opt 的「特性级选档」(按 docs/zh/features/* 选方案)互补——实测结论回填 dit-perf-opt Step 4 作为实施/复验证据(反向入口见其 Step 3 划界)。稀疏 FA/BSA 的稀疏度-性能曲线即 S4 有损阶段稀疏度选型的算子级证据。

2. 架构(三层,口径单点)

benchmarks/
├── common/                    # 口径单点维护(运行时 + 离线共享,禁止两处漂移)
│   ├── schema.py              # OP_SLOT_ARGS / OP_SEQ_AXIS / OP_SERIES_KEY /
│   │                          #   OP_DISPLAY_METRICS / BASELINE_METRICS / COMPARE_METRICS
│   ├── metrics.py             # util_metrics(MFU/MBU 公式 + 钳位 ≤1)——唯一公式
│   └── env_util.py            # env 工具(load_peaks 保留兼容、无调用方;峰值来源已改为 --config 输入)
├── scripts/
│   ├── mindie_bench.py        # 推荐 CLI 入口(run/report/compare),纯逻辑可单测
│   └── benchmark_report.py    # baseline 导出 / 快照 / HTML / compare(离线纯 Python)
├── xpu-perf-plugin/           # 运行时(基于 xpu-perf micro_perf,spawn 多进程)
│   ├── npu_launch.py          # 旧入口(保留兼容)
│   ├── backend_npu.py         # BackendNPU:墙钟计时、per-case 超时、异常透传、数据守卫
│   ├── op_defs/               # 基础实现:FLOPs/字节记账 + schema(vendor 未实现时抛 NotImplementedError)
│   │   └── _common.py         # tensor_bytes / quant_flops / attention_valid_parts(纯函数可测)
│   └── vendor_ops/NPU/        # NPU 实现(峰值不内置,由使用者 --config 输入)
├── example/                 # 样例脚本 + 使用说明(example/README.md)
└── tests/UT/benchmark/       # 离线单测(无 NPU 依赖)

数据流:run(vendor 执行 → jsonl 原始值,case arguments 携带 peak_flops/peak_bw)→ report(离线用 entry 携带的 peak 重算 MFU/MBU → baseline + 快照 + HTML + CSV)→ compare(drift 门禁)。 关键契约:运行时与离线通过 common/ 共享口径(schema/metrics);jsonl 行格式 {"op_name","arguments","targets"}。

3. 开发流程(test-first)

  1. 先写测试(tests/UT/benchmark/,确认 FAIL)——离线纯 Python 部分全部可本地测:
    • env 解析 / MFU/MBU 公式与钳位 / slot 键规范化 / 记账纯函数 / CLI 解析 / 报告聚合渲染
    • fixture 用合成 jsonl(格式与真实一致)
  2. 实现功能(code-standards:ruff、<100 行/行、导入排序)
  3. 远端部署验证(env-install:安装 + remote-access:SSH 执行 + 实测跑通)
  4. 涉及运行时(vendor/backend)的改动需远端 NPU 实测;纯离线改动本地单测即闭环
python -m pytest tests/UT/benchmark -q        # 本地
python -m ruff check benchmarks tests/UT/benchmark

4. 核心设计约定(改代码前必读)

4.1 CLI 参数约定(严格)

  • 不随意新增命令行参数:需要新配置时优先进 --config 键(seed、timeout、peak_flops、peak_bw 都是 config 键而非独立参数)
  • 职责分离:--op = 算子选择 + 结构参数(num_heads/head_dim/K/N/... + 保留键 func=内核来源标签,不切换内核);--config = 扫描键 + 峰值(seqlen→各 op 扫描轴 / dtype / sparse→sparsity / quant_algo / seed / timeout / peak_flops / peak_bw),列表=笛卡尔积、标量=固定
  • --op 不允许扫描键;--config 白名单在 CONFIG_ALLOWED_KEYS
  • 裸形式不带引号(shell 拆 token 由 nargs="+" + _join_nargs 合并;宽松解析用正则补引号,注意相邻裸值逗号用 lookahead 不消费)

4.2 口径单点

  • MFU/MBU 公式只在 common/metrics.py util_metrics;运行时(op_defs MfuMbuSummaryMixin)与离线(benchmark_report recompute_util)都调它,改一处即可
  • 钳位 ≤1 在公式层(量化档真实吞吐可能超 bf16 峰值口径);数据层保持小数,百分比只是展示层(_pct)
  • 峰值:不内置——peak_flops / peak_bw 必须由使用者通过 --config 输入(代码中不允许出现硬编码峰值——须注入设备实测值);随 case arguments 走 jsonl,离线 recompute_util / 报告 env 段从 entry 读;无 env.json / --env

4.3 schema 数据驱动

  • slot 键 / 序列轴 / 系列键 / 展示指标都是 schema 表——新增 op 或维度改表,报告聚合(_aggregate_cases)与渲染(build_op_html)按表驱动,避免硬编码特判蔓延
  • OP_DISPLAY_METRICS:每 op 展示哪些指标(FA/BSA/MM 仅 MFU,GMM MFU+MBU)——图与表格列都按它动态生成
  • fa/bsa slot 键含 num_heads/head_dim/func(func 缺省省略),报告系列标签 dtype h{heads} d{dim} [fn=函数名]

4.4 数据有效性守卫

  • 异常 case 不得产生数据行:collect_baseline 过滤无有效测量的 entry(崩溃/异常 case 的 targets 为空)
  • vendor 层可做输出有效性校验(如 BSA 全零输出 → 抛 RuntimeError → case 标记无效),校验只做一次(warmup 内,不进计时区)

4.5 报告

  • 每 op 一个章节:一张/多张综合图(按 OP_DISPLAY_METRICS)+ 图下 per-series 数据表
  • 「Command」段(run 写 run_command.txt)+ 「Peak config (CUBE flops / bandwidth)」段
  • 多 run 合并:load_report_entries rglob 递归 + 同 slot 取最新 mtime
  • CSV 是数据源:reports/{op}.csv 每行含 peak_flops/peak_bw;在 CSV 中更新 peak 后重跑 report,read_peaks_from_csv 读回新值 → apply_csv_peak_updates 覆盖 entry peak → 重算 MFU/MBU 与 Peak config 段(未改 CSV 时以 run 的 --config 峰值为准)

5. 扩展点

5.1 新增算子(五步)

  1. op_defs/{op}.py:base(MfuMbuSummaryMixin + BasicOp,FLOPs/字节记账 + vendor_impl_run 抛 NotImplementedError)
  2. vendor_ops/NPU/{op}.py:register_vendor_impl("{op}", "NPU") 真实 kernel(调用参数必须对齐算子自身 UT,见调试章节)
  3. common/schema.py:OP_SLOT_ARGS / OP_SEQ_AXIS / OP_SERIES_KEY / OP_DISPLAY_METRICS
  4. 主仓 benchmarks/scripts/mindie_bench.py:VALID_OPS + OP_DEFAULTS
  5. 记账纯函数加进 op_defs/_common.py 并单测

5.2 新增 config 键

  1. CONFIG_ALLOWED_KEYS 加键(peak_flops/peak_bw 已在其中:消费方在 op_defs MfuMbuSummaryMixin.summary 与离线 recompute_util 从 args_dict/entry arguments 读取)
  2. 消费方实现(case 参数 → 运行时行为,如 seed 在 op prepare_args 设 RNG、timeout 在 backend _op_timeout 读 args_dict)
  3. 不进 OP_SLOT_ARGS(不影响 slot/报告)

5.3 改展示 / 口径

  • 展示指标:OP_DISPLAY_METRICS
  • 公式/钳位:common/metrics.py(先确认是否影响 baseline/compare 兼容性)

6. 调试(benchmark 数据异常 = 代码问题)

排查方法论(完整案例见 references/troubleshooting-benchmark.md):

  1. 先跑算子自身 UT(tests/plugin/test_{op}.py)分流:UT 通过 → benchmark 调用/计时代码问题;UT 失败 → 算子/环境问题
  2. 恒定 latency = 计时区被固定开销污染(如 mask 构造每 iter 分配)或 kernel 空转——检查计时区内是否有可移到区外的构造/分配
  3. 全零输出 = kernel 未执行:对照算子 UT 调用参数(BSA inner_precise 的取值对齐算子 UT / vendor 要求,现场确认参数取值,取值不当会全零;mask 需 per-row uniform 避免全零行崩溃)
  4. 偶发污染:异常大 latency → 增量重跑该 case 确认;加数据守卫
  5. 长序列超时:--config {timeout: 300}(默认 5s),backend 按 case 读
  6. 增量合并:每次补跑独立 report_dir;mtime 决定覆盖顺序,避免坏值覆盖好值

7. 测试

  • tests/UT/benchmark/:env_util / metrics / schema / op_defs 记账 / mindie_bench 解析 / benchmark_report 聚合渲染 / 异常 entry 过滤
  • conftest:sys.path 注入(benchmarks/ + scripts/ + xpu-perf-plugin/)、tmp_path 重定向(沙箱环境)、禁 cacheprovider
  • 渲染测试用合成 report dict 验证 HTML 结构(图数量、百分比、Command 段、heads/dim/func 标签)

8. 维护与更新

出现以下情况时更新本 skill:

  • 工具链接口变化(CLI 参数、schema、报告格式、config 键)
  • 新算子/新指标加入
  • 新的数据异常模式被定位(追加 references/troubleshooting-benchmark.md)
  • 口径变更(MFU/MBU 公式、峰值来源、展示方式)
  • 按 dev-workflow §6 复盘流程同步刷新 .agents/README.md 的技能清单(§1/§2 表)

Reference Files

  • 📋 references/troubleshooting-benchmark.md — 加载时机: benchmark 数据异常(全零/恒定 latency/偶发污染/增量合并陷阱)排查时
  • 📋 references/benchmark-guide.md — 加载时机: 计时口径(warmup/torch.npu.synchronize()/编译预热排除/多场景对照/<3% 噪声)——自 pattern-dev 迁入的计时方法论单点,pattern-dev Phase 6/7 与 copy-elimination-guide.md 均指向本文件
  • 📄 ../env-install/SKILL.md — 加载时机: 远端安装/同步/运行时(SSH 工具见 ../remote-access/SKILL.md)
  • 📄 ../code-standards/SKILL.md — 加载时机: 编写 Python 代码时
  • 📄 ../dev-workflow/SKILL.md — 加载时机: 开发流程/复盘归档时

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