Open
feat: add npugraph_ex support for MHC expand and head mix #62
wangjiaxingAdd on 6 days ago
feat: add npugraph_ex support for MHC expand and head mix #62
Open
Merge blocked
6 days ago Created pull request, commit 658843a9
wangjiaxing
6 days ago Comments:
6 days ago Comments:
/compile


6 days ago Pre merge succeeded (commit_id: 4657cb1181a1b398a5d4de1faf49a1c817859e82)
6 days ago Added label: cann-cla/yes
CANN-robot
6 days ago Comments:
6 days ago Comments:
Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/ops-tilelang | ❌ (0/2)(You can also ask: 蒋礼锐, 刘丹, 马兵, ChaoyangJi, jiawei_zhuang) | ❌ (0/1)(You can also ask: kevin365, 刘丹, ChaoyangJi, 黄俊健, 蒋礼锐) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
gcw_Co0B5I37, thanks for your pull request. All authors of the commits have signed the CLA. 👍


94 messages are collapsed here。 See more
18 hours ago Removed label: ci-pipeline-failed
18 hours ago Added label: ci-pipeline-running
12 hours ago Removed label: ci-pipeline-running
12 hours ago Added label: ci-pipeline-failed
CANN-robot
12 hours ago Comments:
12 hours ago Comments:
流水线分析报告 — ops-tilelang run#144
流水线: https://gitcode.com/cann/ops-tilelang/actions/runs/b80b698bff7c471fa9e78dece6ec875b | PR#62 | 2026-11-11 11:24:56 ~ 17:28:17 | 失败 Job 1 个
定界结论: 环境问题 / Runner机器异常(任务排队超时,非代码问题)
- 失败类型: 环境问题(可重试)
- 根因:
ST_test调度后长时间处于 Queued 状态,超过排队上限(300s 配置,实际滞留约 6 小时)后被平台按CP.COMP1105 任务排队超时终止;该 Job 的 Checkout/download/run_st_test 步骤均未产出任何日志,说明任务从未真正开始执行。 - 处置建议: ① 直接重新触发流水线(平台调度/执行机资源问题,可重试);② 若 ST_test 持续排队超时,请联系 CI 维护者检查执行机资源池配置与网络(同日志 RootCause/Solution 提示:检查执行机配置或网络)。
- 排除项: 其余 11 个 Job 全部 COMPLETED(Test_image / Test_get-pr / Test_pre_pipeline / Test_get-shell / Antipoison / CodeCheck_style / SCA / CodeCheck_check-pr / CodeCheck / CodeCheck_precommit / Test_finish),无编译、CodeCheck、SCA 类失败,PR 代码未暴露问题。
失败根因分析
根因 #1: 环境问题 / Runner机器异常 — ST_test 排队超时(CP.COMP1105)
- 判据:
queued state timeout|任务排队超时(判据库 环境问题/Runner机器异常) - 定位步骤:
0_初始化步骤.log(ST_test仅此步骤有日志) - 影响 Job: ST_test(1/12,start_time 为空、duration 为空 → 未实际启动)
- 根因证据(日志原文):
[2026/11/11 11:27:55.411 GMT+08:00] [INFO] Job(74d25dd7739540a2a0d5e2b469ebf14a_1570036610248491045) duration check: true
[2026-11-11 17:27:55.652+08:00] [ERROR] [server] - Queued state timeout, job_run_id: 74d25dd7739540a2a0d5e2b469ebf14a_1570036610248491045, state: Queued, timeout_seconds: 300
[2026-11-11 17:27:55.840+08:00] [ERROR] [server] - [CP.COMP1105][Description] 任务排队超时[Description_en] Queued timeout.(addition_en) Queued state timeout, ... [RootCause] 可能是执行机配置或者网络问题。[Solution] 请检查执行机配置或者网络。
- 补充说明:
1_Checkout.log/2_download.log/3_run_st_test.log/4_后处理步骤.log均为空,进一步确认失败发生在排队阶段而非构建/测试阶段,无代码侧错误可归因。
结构化定界摘要
[
{
"repo": "ops-tilelang",
"run_number": 144,
"Failed_Type": "环境问题",
"Failed_Sub_Type": "Runner机器异常",
"Failed_Reason": "ST_test 调度后长期处于 Queued 状态,超过排队上限(300s)被平台以 CP.COMP1105 任务排队超时终止;该 Job 各执行步骤无日志,未实际开始执行,属执行机资源/调度问题,非代码问题。",
"evidence": "[ERROR] [server] - [CP.COMP1105][Description] 任务排队超时[Description_en] Queued timeout.(addition_en) Queued state timeout, state: Queued, timeout_seconds: 300",
"suggestion": "直接重新触发流水线;若持续排队超时,请联系 CI 维护者检查执行机资源配置与网络。",
"jobs": "ST_test"
}
]
由门禁失败定界分析自动生成 | repo: ops-tilelang | run: b80b698bff7c471fa9e78dece6ec875b | PR#62


2026-11-09 统一入口与公共核数 helper(52a99e4)
5f331a2已统一 eager 与编译的注册算子入口。薄 wrapper 继续负责原始标量校验和有效核数传递。resolve_vector_cores和validate_vector_cores移到src/cann_ops_tilelang/common/compile_utils.py,由两处算子模块共同导入。采用仓库支持的命名空间目录,避免新增包初始化文件触发全量选测。移动后导入及 setuptools 包发现检查通过,仓库选择器确认增量选中 6 个相关 MHC 文件。Ascend auto/PTO 各 66 项受影响测试通过,覆盖注册、Fake、原始标量、组合重放和配置切换。Ruff、197 文件格式和差异检查通过。下文各 123 项为统一入口改造时的完整回归。
2026-11-09 统一 Custom Op 调用入口(5f331a2)
按 PR #61 更新公共入口。eager 和
torch.compile共用注册算子,公共 wrapper 处理注册前的校验、输出契约与实际配置。注册后由_impl执行真实计算,Fake 按原 schema 推导元信息。expand.py中,expand 前后向把有效向量核数传入注册算子,保留空输入短路及调用方缓冲区写入。head_compute_mix.py中,前向在进入注册算子前检查mhc_pre_eps、token_block_size的原始类型。反向校验公开标量,再传递按输入设备解析的有效核数。前后向均返回None。test_mhc_graph_configuration.py中,Fake 隔离测试改为拦截当前使用的核数解析入口。NPU 非 benchmark 回归 auto/PTO 各 123 项通过。每后端 21 份证据、76 条图事件记录,确认实际重放且无 eager 回退。新进程导入、Ruff、197 个 Python 文件格式及 diff 检查通过。
以下小节保留此前提交的验证记录。本轮运行范围与结果见上文。
本轮 CodeCheck 整改(7dcb63d,2026-11-05)
针对run#59报告的21项告警整改,本地验证已完成,线上CodeCheck需本提交重跑后确认;Ruff通过不等于线上扫描通过。
本次PR最终为7个文件:两个算子模块、common目录下的compile_utils.py、三份测试文件和一份测试helper。没有夹带其它批次,未改共享config.py、architecture.md或两个kernel,未调整精度/fullgraph/缓存上限/mutation。
验证:auto/PTO各 123 passed /16 benchmark deselected,CPU 25 passed;fixture及命名空间最终调整后auto再验 53项入图测试通过;注册/Fake预检7项通过;Ruff及 197个Python文件格式、diff检查通过。原有40条断言、公有入口和4个Custom Op签名均经审计保留。历史性能数据未在本次重测,不将静态整改声明为性能提升。
PR功能描述 / 为什么需要这个合入
为
expand_to_mhc_forward、expand_to_mhc_backward、mhc_head_compute_mix_forward和mhc_head_compute_mix_backward添加torch.compile入图支持,使它们能够参与npugraph_ex固定 shape 推理图的捕获与重放。四个入口保留调用方传入输出/梯度缓冲区的接口及原有 eager 行为:正确声明实际写入参数,不新增 optional
out,不改变返回None的约定。适配覆盖只读输入、输出覆盖、参数梯度分片归并、空输入和配置变化;原始标量类型在进入 Custom Op schema 前校验,避免 bool/int/float 转换导致 eager 与 compiled 接受范围不同。本 PR 仅包含计划 PR-B 的四个入口,不包含 Engram、norm_fn、MHC pre/post/Sinkhorn 或多层重计算适配。
各文件修改
src/cann_ops_tilelang/mhc/expand.pyvector_cores,impl 直接传给现有 kernel 的num_vec_cores;保留原 hidden-block/stage 选择、空输入短路、输入输出存储冲突检查和输出覆盖语义。src/cann_ops_tilelang/mhc/head_compute_mix.pynum_vec_cores、分片输出 shape 和 kernel 参数,用内部显式vector_cores校验有效上限;公共编译分支先检查原始标量。src/cann_ops_tilelang/common/compile_utils.pytests/mhc/test_mhc_graph_utils.pytorch.ops检查注册,不调用生产模块私有 Fake/helper。辅助逻辑按输入刷新、比较和取证拆分。tests/mhc/test_expand_compile.pytests/mhc/test_head_compute_mix_compile.pytests/mhc/test_mhc_graph_configuration.py注册契约与 Fake
expand_to_mhc_forwardoutputNoneexpand_to_mhc_backwardx_gradNonemhc_head_compute_mix_forwardoutput_mixNonemhc_head_compute_mix_backwardinput_mix_grad、mhc_scale_grad_partial、mhc_base_grad_partialNoneFake 只使用 Tensor 元信息与传入的有类型核数,不启动 kernel、不读取 Tensor 值、不查询硬件或检查环境文件。真实实现保留运行环境与存储别名检查。向量核内部参数检查整数类型与正值;head backward 同时校验调用方核数、有效上限和两项参数梯度分片的 shape。空 head backward 保持将参数梯度分片清零的原行为;空 expand 不执行设备任务,不以空分支宣称捕获重放成功。
配置追踪与工具链兼容
_config_key字符串及私有配置属性依赖,只传实际参与执行或有效性校验的整数。expand 的值贯穿 wrapper→Custom Op→impl→现有 JIT kernel;head backward 的 kernel 仍使用调用方显式核数,内部上限用于同一轮合法性校验。get_num_ai_cores保留设备选择和 override 语义;编译分支在算子内部读取环境键存在性和值,保留有效范围检查。实测当前 torch_npu 的os.getenv日志补丁在设置核数环境变量时会触发 fullgraph 断图,故避免在编译追踪中调用该补丁。require_ascend的环境可用性检查登记为编译常量;实际实现仍执行该检查。可变核数不使用assume_constant_result,配置测试在同一 compiled 对象内切换和恢复,不清 JIT 缓存或重建对象强迫生效。2026 DeepSeek版权。未改共享config.py、docs/architecture.md或两个 kernel 文件。验证
基于 master
2ded9ae0648ef754a0de8c47f54838b4fba5fa18,最终单提交f3da407。这些是本批独立工作区本次运行的结果,不引用之前24算子快照的通过数量。线上CodeCheck/SCA/UT需PR发布后确认。
运行范围为原有
test_expand.py、test_head_compute_mix.py与新增三份测试文件,非 benchmark 共 123 项(57 项原有、66 项新增),16 项 benchmark 未运行。新增图用例保持backend='npugraph_ex', fullgraph=True, dynamic=False,检查逐轮真实acl_graph_capture/acl_graph_replay及fx_run_eagerly=0。独立参考沿用原精度:expand 逐项相等,headatol=1e-5, rtol=1e-4;原有测试及精度标准不变。核数切换在子进程内验证,避免旧配置模块没有状态快照/恢复接口而污染父进程;同一个切换序列内不清 Dynamo/JIT 缓存,切回原值要求复用原图。记录 kernel 实际收到的
num_vec_cores:expand 随 16/20 改变,head backward 保持 caller 的 4,变化的是有效上限。Fake 测试将运行时核数查询替换为抛异常的函数,确认使用显式元信息即可完成验证。CI 的依赖分析在本地实际运行,结果为 incremental,选中上述 5 个测试文件;没有修改选择器、CI 配置、测试级别、benchmark 或显存画像。
实际测试命令(已加载下述 CANN/配套工具链,分别设置
TILELANG_DEFAULT_TARGET=auto和pto):OPS_TILELANG_TEST_LEVEL=0 OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 \ python -m pytest tests/mhc/test_expand.py tests/mhc/test_head_compute_mix.py \ tests/mhc/test_expand_compile.py tests/mhc/test_head_compute_mix_compile.py \ tests/mhc/test_mhc_graph_configuration.py -m 'not benchmark' -x -v --tb=short实机环境与支持边界
7c7032b55ecc6b9dfa7c4c9412c93d587d4d3547;auto/PTO 均在已加载 CANN 的配套环境运行,不代表任意默认 PTO 安装已验收。torch.inference_mode(),autograd 数值参考在其外运行。没有新增自动 autograd、.backward()图捕获、动态 shape 或多设备验收声明。AI assistance: OpenAI Codex / GPT-6,负责封装、整改、测试和描述;范围及提交由人工指定并授权。