Skip to content
cccskills
FreePublished on GitHub

code-standards

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.

See how to install

Files included (3)

  • SKILL.md21.3 KB
  • evals/evals.json3.7 KB
  • references/gate-check-rules.md10.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

MindIE-SD 代码格式规范

本 skill 汇总 MindIE-SD 项目的 Python 代码格式与 lint 规则,适用于代码格式化、lint 修复和代码审查。

事实来源(取值只认 §0/§1 的记录,不要从历史描述或直觉推断):

  • pre-commit/pyproject.toml —— 门禁实际读取的那一份(.pre-commit-config.yaml 用 --config / --rcfile 指定)
  • .pre-commit-config.yaml —— 21 个钩子条目(其中 markdownlint 出现 2 次,见别名)
  • 根 pyproject.toml —— 不是 pre-commit 用的那份;IDE / 手动 ruff 可能读它,取值不同(见 §0)
  • mindiesd/compilation/ 目录下既有代码风格
  • 规则正文与示例:references/gate-check-rules.md(单点,本文件只留摘要)

0. 先确认门禁读哪一份配置(真实陷阱)

同一条规则在两份文件里取值不同,门禁按左边一列判;右边一列只在本地 IDE / 手动 ruff 时生效:

配置项门禁生效值(pre-commit/pyproject.toml)根 pyproject.toml后果
line-length120100本地按根配置跑 ruff 会在 100 列报 E501,CI 门禁不报(§3.4)
format.quote-style"preserve"(formatter 不改引号)未设置 → ruff 默认 double本地会把单引号统一成双引号 → 无关 diff(§3.6)
format.docstring-code-format未设置 → disabledtrue本地会格式化 docstring 内代码块,门禁不会
[tool.ruff.lint] select未声明 → ruff 默认规则集(E4/E7/E9 + F)+ extend-select 的 D209/SIM115(实测 enabled 共 61 条)E,F,I,N,W,UP,B,C4,SIM,GI/N/UP/B/C4/G/W/E501/E302 门禁侧均未启用(§1.1、§3.2、§3.5、§3.8)
[tool.ruff.lint] ignore未声明B007/B905/E731/F403/F405/UP009/UP032这些规则门禁侧本就没启用,差异无实际影响
[tool.ruff.lint.per-file-ignores]"tests/**/*" = ["F401","I","E402"]mindiesd/__init__.py = ["E402","I001"] 等门禁侧 tests/ 不报 F401;mindiesd/__init__.py 的例外在门禁侧不生效
exclude未声明 → ruff 内置默认排除(含 dist、.venv,不含 build)build、dist按根配置跑会跳过 build/,门禁侧不跳过(实际以改动文件为输入,影响很小)

自查口径:想复现 CI 门禁用 --config pre-commit/pyproject.toml;想解释"本地 IDE 为什么报错"再用根配置。 两侧取值不必互相迁就:超过 100 列不会让门禁失败,但评审仍按 120 显示列要求排版(§3.4)。


1. 配置取值(以门禁实际读取的 pre-commit/pyproject.toml 为准)

1.1 Ruff(ruff-check / ruff-format 都带 --config pre-commit/pyproject.toml)

配置项生效值说明
line-length120与 pylint max-line-length = 120 同值;由 ruff format 重排可折叠行
target-versionpy310实测 linter.unresolved_target_version = 3.10
format.quote-stylepreserveformatter 保持原引号,不统一
format.docstring-code-formatdisabled(未设置)不格式化 docstring 内代码块
[tool.ruff.lint] extend-selectD209、SIM115段落末尾空行 / open() 未用 with
select / ignore未声明用 ruff 默认规则集,不是根配置那份 E/F/I/N/W/UP/B/C4/SIM/G
per-file-ignores"tests/**/*" = ["F401","I","E402"]门禁侧 tests/ 不报未使用导入

实测 enabled 规则集合(61 条)= pycodestyle E4xx/E7xx/E902 + pyflakes Fxxx + D209 + SIM115: 不含 I(isort)、N(命名)、UP(pyupgrade)、B、C4、G、W,也不含 E501。

1.2 pylint(--rcfile=pre-commit/pyproject.toml)

门禁是否拦下某条消息,以 disable 列表为准:列在其中的不会导致失败。

  • enable 显式列出:E0100、E0601、E0602、E0603、E0611、E0632(原配置重复列了一次)、E1101、E1120、W0632、W1514
  • disable 含(与本 skill 相关的关键项):protected-access、raise-missing-from、 too-many-arguments、too-many-positional-arguments、too-many-branches、too-many-statements、 too-many-locals、too-many-return-statements、invalid-name、missing-docstring 系列、 line-too-long、broad-except、bare-except、duplicate-code、unused-import/unused-variable/unused-argument
  • 阈值(多数因对应消息被 disable 而不产生失败):max-line-length = 120、max-args = 15、 max-branches = 50、max-statements = 200、max-locals = 50、max-positional-arguments = 20
  • 除 disable 覆盖掉的消息外,pylint 其余默认消息中未被 disable 的仍会报(复核见 §5)

1.3 bandit(--config=pre-commit/pyproject.toml)

  • severity_level = LOW、confidence_level = LOW → 门限很低,LOW 级问题也报
  • tests 含 B110(try/except/pass)、B607(子进程不完整路径)等,两条都不在 skips 内 → 门禁项
  • exclude_dirs 含 tests/test/venv/build/dist 等

2. Pre-commit 钩子(共 21 个条目;默认 stage 跑 20 个,markdownlint-manual 为 manual 档)

来自 .pre-commit-config.yaml(default_stages: [pre-commit]):

钩子行为备注
trailing-whitespace删除行尾空白字符
end-of-file-fixer文件末尾补换行符
check-yamlYAML 检查(--allow-multiple-documents)
check-added-large-files拦截超大文件
check-merge-conflict检测未解决的合并冲突标记
detect-private-key检测硬编码密钥
check-jsonJSON 格式检查
ruff-checkruff check --config pre-commit/pyproject.toml --output-format github --fix(仅 *.py)Python lint
ruff-formatruff format --config pre-commit/pyproject.toml(仅 *.py)Python 格式化
codespell拼写检查,--skip *.toml,*.py,*.cpp,*.hpp,*.c,*.h跳过代码文件
pylint--rcfile=pre-commit/pyproject.toml(仅 *.py)见 §1.2
bandit--config=pre-commit/pyproject.toml --quiet(仅 *.py)见 §1.3
typos--force-exclude --config pre-commit/typos.toml标识符拼写
markdownlint(两个同 id 钩子,见下)-c .markdownlint.json;markdownlint-manual=exclude: ^\.agents/ + stages: [manual];markdownlint-agents=files: ^\.agents/.*\.md$ 且未覆盖 stages ⇒ 默认档会跑.agents/** 默认强制(否则改不动);其余 .md 默认不跑,需显式 --hook-stage manual(§4);详见 markdown-lint skill
clang-format--style=file --verbose -i,files: \.(c|h|cpp|hpp|cc|hh|cxx|hxx)$C++
clang-tidyrepo: local,files: ^csrc/.*\.(cpp|cc|cxx|c)$(排除 csrc/ops/)依赖宿主机已装 clang-tidy
gitleaks-offline-scanrepo: local,entry: ./gitleaks(本地离线二进制)密钥扫描

不存在 no-commit-to-branch(本仓不禁止直接提交到 main/master)。 markdownlint 有两个钩子:markdownlint-agents(.agents/**/*.md,走默认 stage,提交/CI 会跑) 与 markdownlint-manual(其余 .md,stages: [manual])。所以「本地 pre-commit run --all-files 通过 不等于 Markdown 合规」这句话只对 .agents/ 之外的 .md 成立(.agents/** 已被默认档覆盖); clang-tidy/gitleaks-offline-scan 是 local 钩子,缺少对应二进制时会失败。


3. 代码风格约定

3.1 文件头(评审约定)

所有 .py 文件包含:

#!/usr/bin/env python
# coding=utf-8
# Copyright (c) Huawei Technologies Co., Ltd. 2024-2026. All rights reserved.
# MindIE is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#          http://license.coscl.org.cn/MulanPSL2
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.

门禁侧无"文件头"钩子(detect-private-key/codespell/typos 不检查版权头),本条按评审约定执行。 注意 # coding=utf-8 被 ruff UP009 允许(且门禁侧 UP 组未启用),不要为了"现代化"删掉它。

3.2 导入顺序(评审约定)

顺序要求:标准库(如 contextlib, dataclasses, logging, typing)→ 第三方库(如 torch)→ 本地模块(如 from .compiliation_config import ...),组内按字母序。

门禁侧未启用 I(isort):ruff check --config pre-commit/pyproject.toml 不会报 I001; 根 pyproject.toml 的 select 含 I,本地按根配置跑才会报。因此两侧都不要求为对方重排既有导入块 (重排会制造无关 diff,§3.10)。

3.3 空白行

  • 模块级函数/类定义前 2 个空行、类内方法前 1 个空行:评审约定(门禁侧 E302/E303 未启用), 由 ruff format 归整
  • 过多空白行由 ruff format 处理,不要手工去改未修改行(§3.10)

3.4 行长度(门禁取值 120;不要再用 100 判门禁)

  • 门禁取值 line-length = 120(pre-commit/pyproject.toml,ruff 与 pylint max-line-length 同值)。 ruff format 会把可折叠的代码行重排到 120 以内;中文长行、长字符串 formatter 无法折行, 需要人工排版。
  • 门禁侧 E501 未启用(select 未声明,enabled 集合里没有 line-too-long)。 实测(2026-09,本地 ruff 0.15.12 + 本仓配置):同一文件含 102 显示列的中文注释行, ruff check --config pre-commit/pyproject.toml → All checks passed!。
  • 只有在根 pyproject.toml / 本地 IDE 下才会报 E501,且那里阈值是 line-length = 100、 按显示列宽计(CJK/全角按 2 列)。同一实测:注释符 # 加 1 个空格再跟 50 个汉字 = 102 列 → E501 Line too long (102 > 100);跟 49 个汉字 = 100 列 → 通过。 这就是"本地报错、CI 不报"的成因,不要把本地 100 列报错当成门禁结论。
  • 评审口径:按 120 显示列排版(中文注释约 60 个汉字即到上限,还要留出缩进与行首注释符的余量); 按"字符数"估长度会把超限行误判为合规。
  • 把中文串写成相邻字面量("…前半" "后半…")只要仍在同一行,该行列宽不减; 必须把相邻字面量分到不同行(隐式拼接)才真正降宽。
  • 读报错:E501 Line too long (102 > 100) 括号里的数字是检测值(显示列宽), file:line:col 的 col 是字符位置——中文行两者不一致,回查时按显示列算。

3.5 命名规范(评审约定)

snake_case(函数/变量)、CamelCase(类)、_ 前缀(私有成员)、UPPER_CASE(常量): 门禁侧 N(pep8-naming)未启用,pylint 的 invalid-name 也在 disable 内,不会让门禁失败。

3.6 引号(quote-style = "preserve")

formatter 不统一引号:门禁读取的 pre-commit/pyproject.toml 里 format.quote-style = "preserve", ruff format 保持文件既有引号。不要为了"统一双引号"去改未修改行——改引号风格会制造无关 diff(§3.10)。 (根 pyproject.toml 未设置该项 → 本地按根配置跑 formatter 会向双引号统一,这就是本地/门禁差异。)

3.7 类型注解(评审约定)

  • 目标 Python 3.10(target-version = "py310"),可使用 X | Y 联合语法(PEP 604)
  • 函数签名建议包含参数和返回值类型注解
  • 前向引用使用字符串注解(如 "torch.npu.NPUGraph")

3.8 日志(评审约定)

使用标准 logging 模块:

logger = logging.getLogger(__name__)
logger.debug("...")
logger.warning("...")

避免在日志字符串中使用 .format() 或 f-string,优先使用 % 风格参数(logging 延迟求值)。 门禁侧 G(flake8-logging-format)未启用,本条按评审约定执行。

3.9 门禁专项规则摘要(正文在 references/gate-check-rules.md)

条目门禁强制?说明
except …: pass是(bandit B110)见 §5 复核
子进程裸命令名是(bandit B607,仅覆盖该类场景)见 §5 复核
open() 未用 with / 段落末尾空行是(ruff SIM115 / D209)extend-select
受保护成员访问(protected-access)否(pylint 已 disable)评审约定,给出判定命令
异常转译 raise … from(raise-missing-from)否(pylint 已 disable)评审约定,给出判定命令
函数参数 ≤5否(max-args = 15 且 too-many-arguments 已 disable)评审约定,不由 pre-commit 强制
禁止 __import__(avoid-import-method)否(无对应钩子;与 UP015 无关)历史记录·未能复核,按评审约定
禁止非入口 sys.exit() / 方法排序 / 重复字符串否(无对应钩子)历史记录·未能复核,按评审约定

规则号纠正:Ruff UP015 的真实语义是 redundant-open-modes(open(f, "r") → open(f)), 不是 __import__ → importlib.import_module;本仓门禁侧 UP 组也未启用。 __import__ 相关规范属评审约定,不要引用规则号来"强制"它。

3.10 禁止格式化未修改代码行

修改现有文件时,绝对禁止对未涉及功能变更的代码行做任何格式化调整:

  • 禁止 ruff format 批量格式化整个文件
  • 禁止改变未修改行的引号风格(如 ' → ")
  • 禁止调整未修改行的空行数量
  • 禁止将单行表达式折叠为多行(如 @unittest.skipIf、raise 语句)
  • 禁止改变已有变量命名(如 B,S,N,D → b,s,n,d)
  • 禁止改变已有导入别名(如 import torch.nn.functional as F 保持不变)
  • 禁止删除已有的注释(如行尾 # FLux.1-dev)
  • 禁止保留注释掉的代码行(comment-out-code 检测)。已废弃的代码行应直接删除,不应以注释形式保留
  • 描述性注释(自然语言说明)与注释掉代码的区别:前者是 # Step 1: do X,后者是 # old_func(arg)

原因:这些无关 diff 增加 review 负担、引入合并冲突风险,且不改善功能。

仅允许:在需要新增代码的行上使用与周围代码一致的风格。

  • 仅对被改动的行运行 ruff check --fix 修复 lint 问题
  • 优先使用精确 edit 替换而非整文件 rewrite

3.11 禁止无意义的自动修复重命名

ruff check --fix 的自动修复可能引发不必要的重命名,必须人工审查:

  • 禁止改变已有变量名(如 B,S,N,D → b,s,n,d)(N806)
  • 禁止改变已有导入别名(如 import torch.nn.functional as F → as nn_functional)(N812)
  • 如果 lint 规则与现有代码风格冲突,优先保持现有风格,而非修改代码
  • ruff check --fix 的输出 diff 必须逐行审查,不自动放行

上两条引用的 N806/N812 属 N 组:门禁侧未启用(§1.1),风险来自本地按根配置跑 --fix。


4. 最小格式化与自查命令

# 按门禁配置格式化 / lint 单个文件(目标文件路径按需替换)
ruff format --config pre-commit/pyproject.toml mindiesd/compilation/target_file.py
ruff check --config pre-commit/pyproject.toml --fix mindiesd/compilation/target_file.py

# 门禁等价:默认 stage(含 markdownlint-agents,覆盖 .agents/**/*.md)
pre-commit run --all-files
pre-commit run --files mindiesd/compilation/target_file.py

# Markdown 全仓(markdownlint-manual 是 stages: [manual],必须显式指定 hook stage)
pre-commit run --all-files --hook-stage manual
pre-commit run markdownlint-manual --hook-stage manual --files docs/zh/README.md

适用范围(容易误判的三点):

  • pre-commit run --all-files 只跑默认 stage 的钩子:markdownlint-agents(.agents/**/*.md) 在其中,markdownlint-manual(其余 .md)不在其中,后者需按上面的 --hook-stage manual 单独跑
  • --all-files 只覆盖 git 跟踪的文件:新建但未 git add 的文件不在扫描范围内
  • clang-tidy / gitleaks-offline-scan 是 repo: local 钩子,依赖宿主机存在对应二进制

5. 复核:如何判定本技能记录仍然成立(仓规强制)

依据 .agents/README.md「必写复核方法(强制)」:每条问题/陷阱都要写清"如何判定它仍存在", 先复核、再套用;升级软件栈后逐条复核,不再复现的条目必须删除。 本 skill 的取值全部来自两份配置文件,升级 ruff / pylint / bandit / 改动 pre-commit 配置后必须重跑本节。

命令在仓库根执行(POSIX;Windows 无 grep 时用 Select-String 等价替代)。 多条模式一律写成多个 -e,避免管道符与表格语法冲突:

要复核什么命令期望
行长 / 引号 / pylint 阈值grep -n -e line-length -e quote-style -e max-line-length -e max-args pre-commit/pyproject.tomlline-length = 120、max-line-length = 120、max-args = 15、quote-style = "preserve"
某条 pylint 消息是否仍被禁用grep -n -e protected-access -e raise-missing-from -e too-many-arguments pre-commit/pyproject.toml命中位于 disable = [...] 内 → 仍不作为门禁失败项;若挪进 enable → 必须删除 §3.9 对应行与 gate-check-rules.md 对应档位
ruff 实际生效取值与规则集ruff check --config pre-commit/pyproject.toml --show-settings mindiesd/__init__.py 后接 grep -e "Settings path" -e "^linter.line_length" -e "^formatter.quote_style" -e "^formatter.docstring_code_format"Settings path 指向 pre-commit/pyproject.toml;linter.line_length = 120;quote_style = preserve;docstring_code_format = disabled
门禁侧是否仍不启用 E501同上 --show-settings 输出接 grep -c "line-too-long (E501)"输出 0(enabled 列表里没有它)→ §3.4 结论成立
钩子清单与 manual stagegrep -n -e "^- id:" -e "stages:" .pre-commit-config.yaml,再跑 pre-commit validate-config .pre-commit-config.yaml21 个 id 条目(markdownlint 出现 2 次:manual / agents);默认 stage 20 个,manual 档 1 个;无 no-commit-to-branch;配置校验退出码 0
两份配置是否仍不同grep -n -e line-length -e quote-style -e "^select" -e "^ignore" pyproject.toml pre-commit/pyproject.toml有差异属预期(100 vs 120、select 有无);若某天合并成一份,§0 的差异表要重写
门禁专项规则是否仍无强制来源grep -n -e avoid-import-method -e avoid-using-exit -e function-order -e duplicate-string .pre-commit-config.yaml pre-commit/pyproject.toml无命中(退出码 1)→ gate-check-rules.md 的"历史记录·未能复核"档位仍正确
bandit 是否仍拦 except: pass / 裸命令名grep -n -e B110 -e B607 -e skips pre-commit/pyproject.tomlB110、B607 在 tests 内且不在 skips 内

维护纪律:复核后

  1. 取值变了(如 line-length 改动)→ 同步 SKILL.md §0/§1/§3.4 与 gate-check-rules.md;
  2. 某条不再复现(如 pylint 重新启用 protected-access)→ 删除对应条目或改写档位,不留"以防万一";
  3. 新增条目必须同时给出复核命令,否则不予回填(仓规)。

6. 跨文件一致性

Markdown 文件的格式规范由独立的 markdown-lint skill 承接,本 skill 仅覆盖 Python 代码格式。

修改代码时注意与其他编译模块保持一致,参考文件:

  • mindiesd/compilation/aclgraph_backend.py
  • mindiesd/compilation/mindie_sd_backend.py
  • mindiesd/compilation/compiliation_config.py
  • mindiesd/compilation/_custom_decomposition.py

Reference Files

  • 📋 references/gate-check-rules.md — 加载时机: 需要门禁专项规则的正文/示例、或要判断某条规则是否真由 pre-commit 强制时(本文件 §3.9 只留摘要)

维护与更新

当 ruff / pylint / bandit 版本升级、pre-commit/pyproject.toml 或 .pre-commit-config.yaml 取值变更、 新 lint 规则启用或发现新的代码风格约定时:先按 §5 复核,再更新 §0/§1 与 references/gate-check-rules.md(单点),最后按 dev-workflow 的复盘流程登记。

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 仓库开发总入口(侧轨)。当用户进行 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