graph-autofusion SuperKernel 多流并行性能调优:多流分类与度量体系完全指南

graph-autofusion SuperKernel 多流并行性能调优:多流分类与度量体系完全指南 graph-autofusion SuperKernel 多流并行性能调优多流分类与度量体系完全指南【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾Ascend芯片的轻量级、解耦式组件集合旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件和 Autofuse 组件未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion本文基于 graph-autofusion 仓库中 SuperKernel 多流性能调优 skill 的分类与度量规范classification.md系统讲解在昇腾AscendSuperKernel 融合场景下如何用三个独立维度评价多流并行效果、如何派生 core_family 资源类型、如何分解并行损失并判定可动作性。读完本文你将掌握multistream_trace_analysis.py、multistream_opportunity_discovery.py、multistream_core_family.py背后的判定规则与阈值语义能够独立完成多流 target 的筛选、trace 度量和覆盖率审计。三个独立维度把融合效果与并行效果解耦多流调优的第一步是建立互不混用的分类轴。规范将评价拆成三个独立维度任何 SK 都必须在三个轴上各取一个值net_effect: beneficial | neutral | regressed | insufficient_evidence parallelism_effect: improved | preserved | degraded | unknown optimization_status: no_action | opportunity | validated | blockednet_effect净收益分类继续沿用 sibling analyzer 的 SK-off interval P50 对 fused SK P50 的结果由父流程的 schema 1.2 profiling result 提供parallelism_effect多流并行维度单独记录只回答融合前后跨 stream 并行保持/改善/退化这一事实问题optimization_status调优状态记录针对并行损失当前能做什么。三个轴必须保持独立。最典型且合法、重要的组合是beneficial degraded opportunity即融合后整体仍然更快净收益但多流并行确实退化存在可修复的并行损失同时该损失具备可动作性——此时正确的动作是保留当前 SKincumbent并继续调优而绝不能因为有净收益就忽略或并行退化就回退。从源码看三组枚举与 skill 顶层定义一一对应multistream_contract.py中定义了NET_EFFECTS、PARALLELISM_EFFECTS、OPTIMIZATION_STATUSES三组常量见 multistream_contract.pymultistream_trace_analysis.py的PARALLELISM_EFFECTS与其保持一致任何非法取值都会在校验阶段被拒绝。beneficial 不是筛选终点全量目标清单与覆盖率审计规范明确强调beneficial不是多流筛选的终点。融合可能通过launch 减少、child work 缩短或其他局部收益覆盖掉原有的并行损失形成已有净收益但仍有额外空间的隐性机会latent opportunity。因此所有performance-exact、双方至少三个 occurrence、multi_stream_detectedtrue的 SK都必须进入双侧 trace 筛选不得只筛neutral/regressedbeneficial target 一旦被遗漏隐性机会筛查即不完整。这一规则在 multistream_opportunity_discovery.py 中有完整落地discover()生成目标清单时selection_policy固定为net_effects [beneficial, neutral, regressed]、minimum_occurrences_per_side 3、minimum_stream_count 2、beneficial_targets_must_be_screened True同时排除三类不合格项mapping_not_performance_exact映射非 performance-exact、insufficient_evidence、candidate/baseline_occurrences_below_three任一侧少于三个 occurrence、not_proven_multistream未证明多流。配套的audit-coverage命令会把 discovery 清单中的 eligible targets 与实际 trace analysis 的 targets 做集合比对python3 .claude/skills/superkernel-multistream-performance-tuning/scripts/multistream_opportunity_discovery.py audit-coverage \ --discovery multistream-opportunity-discovery.json \ --trace-analysis trials/MS-SCREEN/trace-analysis.json \ --artifact-root . \ --out multistream-opportunity-coverage.json只有当expected_target_count observed_target_count、无 missing/extra target 且 trace 无 blocker 时complete才为true。测试 test_opportunity_discovery.py 直接验证了这一门禁构造beneficial与regressed两个多流 target若 trace 只覆盖了regressed而遗漏beneficial审计结果completefalse且missing_targets精确列出被遗漏的range-beneficial。也就是说没有 beneficial degraded 机会这句话只有在 audit-coverage 通过后才能说出口。每个 occurrence 的指标不跨时钟域比较 timestamp多流度量以occurrence对齐实例为基本单位融合前SK-off与融合后SK-on分别计算。规范给出的核心指标为interval max(end) - min(start) duration_sum sum(duration) union union([start, end)) max_active_streams stream_pair_overlap core_family_pair_overlap wait/sync duration关键约束不跨时钟域比较 timestamp。kernel_details.csv与sk_prof短窗口 trace 可能属于不同时钟域两侧只比较各自的相对 interval/overlap绝不求跨域绝对 offset这一约束在 evidence-contract.md 中有明确表述。这些指标在 multistream_trace_analysis.py 的_occurrence_metrics()中逐项实现包括interval_usmax(end) - min(start)duration_sum_us所有事件 duration 之和union_duration_us先对区间做_merge_intervals()合并再求总长overlap_work_usduration_sum - union_duration即被并行化藏进重叠加法的执行量max_active_streams用扫描线start 1 / end -1统计同时活跃的 stream 数峰值stream_pair_overlap_us任意两 stream 区间两两求交后合并_pair_overlap再求和cube_vector_overlap_us/same_resource_overlap_us/mix_competition_overlap_us按 stream × core_family 分组后分类统计的 overlap分别对应纯 Cube↔Vector 互补重叠、同引擎同资源竞争重叠、Mix 参与的资源竞争重叠wait_sync_duration_usWAITfamily 或wait/sync/barrier事件的总时长。一个必须牢记的陷阱多 stream pair 的 overlap sum 可能重复计算同一段 wall-clock 区间A∥B、A∥C、B∥C 三段重叠在时间上可以是同一区间因此stream_pair_overlap_us只能作为资源并发诊断绝不能直接当成可回收的理论收益。core_family 必须由三字段派生禁止按名称猜测资源类型family是多流度量与动作授权的地基。规范要求core_family必须由 SK-offkernel_details.csv的三字段派生而不是按算子名称或 trace lane 猜测Accelerator CoreMix Block NumfamilyAI_VECTOR_CORE任意合法值VECTORAI_CORE任意合法值CUBEMIX_AIV0VECTORMIX_AIV0MIXMIX_AIC0CUBEMIX_AIC0MIX同时Block Num必须随 capture 保存并校验为非负整数——三字段Accelerator Core Block Num Mix Block Num共同构成资源的完整身份。Block Num即使不改变 family 分支也必须存在因为它参与绑定 profiler 资源身份。实现位于 multistream_core_family.py 的classify_profile_identity()它把MIX_AIV在mix_block_num 0时归为VECTOR、非零归为MIXMIX_AIC同理归为CUBE/MIX另处理COMMUNICATION、WAIT、OTHER三类。测试 test_core_family.py 覆盖了纯核、零 Mix Block 归一、非零 Mix Block 归 Mix以及计算行缺block_num/mix_block_num时抛ValueError四种场景。规范还强调一个工程纪律capture producer 不得直接填写core_family分析器analyzer必须从三字段重新派生避免 producer 提交可伪造的标签trace analyzer 对每个 child event 都会调用classify_profile_identity重新计算而不是信任 producer 字段。输出指标P50/P90/MAD 与 overlap 汇总规范要求输出至少包含 baseline/candidate 的P50、P90、MAD以及cube_vector_overlap_us cube_vector_overlap_ratio same_resource_overlap_us mix_competition_overlap_us overlap_work_us_stats()实现了三分位统计p50取中位数p90按线性插值计算mad取绝对中位差_summarize_occurrences()要求至少三个 occurrence并强制 baseline/candidate 的child_origin_identity集合完全一致且在各自 occurrence 间稳定不稳定直接抛错alignment_id不允许重复。这正是直接调度证据的最低门槛少于三个 occurrence、alignment 不一致、lane/stream/core identity 不完整一律 fail closed不能产出调度结论。命令入口automation-pipeline.md 中的完整用法python3 .claude/skills/superkernel-multistream-performance-tuning/scripts/multistream_opportunity_discovery.py discover \ --profiling-analysis incumbent/profiling-analysis-result.json \ --artifact-root . \ --out multistream-opportunity-discovery.json python3 .claude/skills/superkernel-multistream-performance-tuning/scripts/multistream_trace_analysis.py analyze \ --request multistream-request.json \ --capture trials/MS-O1/short-trace-capture.json \ --out trials/MS-O1/trace-analysis.jsonanalyze默认阈值即规范值--degraded-ratio 0.5、--improved-ratio 1.2、--minimum-overlap-us 1.0它们会被写进分析结果并被validate用于deterministic replay重算结果必须与已存文件逐字节一致。诊断分解根因观测量而非可加公式规范允许报告以下诊断观测量lost_overlap_us child_work_inflation_us wait_sync_delta_us unexplained_residual_us其中lost_overlap_us在 trace analyzer 中进一步显式分解为lost_stream_pair_overlap_us lost_cube_vector_overlap_us cube_vector_overlap_retention_ratio max_active_streams_delta latent_opportunity actionable_opportunity实现见_diagnostic_decomposition()interval_delta_us、child_work_inflation_usduration_sum 的 delta反映 child 工作量膨胀、wait_sync_delta_us、lost_stream_pair_overlap_usbaseline 与 candidate 的 stream pair overlap P50 之差取非负、lost_cube_vector_overlap_us、cube_vector_overlap_retention_ratiocandidate/baseline 的 C/V overlap 保留比例、max_active_streams_delta。规范特别警告这些观测量不是严格可加的根因公式。只有单变量 trial 稳定改变目标信号并改善端到端结果才能把该动作记录为validated mechanism如果局部 overlap 恢复了但 clean E2E 没有改善trial 必须回退机制证据可以保留但不得冒充 acceptance。这与 skill 顶层只有 clean 增量端到端收益才能选择候选的 gate 完全一致——局部 overlap 恢复、target-SK interval 改善、launch 减少都不能替代端到端 gate。parallelism_effect 与动作资格分离事实分类在前可动作性在后这是整套规范的判定核心分两步走第一步事实分类parallelism_effect先按 baseline/candidate 双方稳定 cross-stream overlap 的保持程度判定不以资源是否可动作替代事实分类。任何 cross-stream overlap 的稳定损失都可以判degraded反之稳定保持判preserved显著增加判improved。第二步动作资格optimization_status只有纯 Cube/Vector overlap 的稳定损失才能得到optimization_statusopportunityMix、同资源同引擎、wait/communication 即使确实从并行变串行也只能是degraded blocked这类损失只能作为结构化 blocker 记录不能授权 reorder/event/stage 动作。判定前提baseline/candidate 的child origin identity 集合必须完全一致且每侧 occurrence 内稳定否则无法比较 overlap。_actionability()的具体逻辑是effect 非degraded一律no_actiondegraded但任一侧cube_vector_identity_completefalse缺 Cube 或 Vector 事件或 C/V overlap 的绝对/相对损失不达阈值返回blocked且 blocker 为degraded_overlap_not_resource_complementary只有满足baseline 有 ≥1us 的 C/V overlap、损失 ≥1us、保留比例 ≤50%三者时才是opportunity。阈值与判定规则绝对阈值防比例放大默认判定阈值multistream_trace_analysis.py analyze的参数默认值参数默认值语义--minimum-overlap-us1.0P50 overlap 绝对变化必须 ≥1 us 才有意义--degraded-ratio0.5降至 baseline 的 50% 或以下判degraded--improved-ratio1.2增至 baseline 的 120% 或以上判improved中间区间—preserved_classify_parallelism()的判定顺序值得注意若 baseline 的stream_pair_overlap_usP50 小于绝对阈值1 us直接返回preserved baseline_cross_stream_overlap_absent。这是规范中若 SK-off 至少双 stream 但稳定 overlap 小于绝对阈值则记录parallelism_basisbaseline_cross_stream_overlap_absent并no_action的落地——它不能被当成证据缺失只是客观上没有可保持的并行基础纯 C/V overlap 的显著损失优先判 degraded只要 baseline C/V overlap ≥1us、损失 ≥1us 且保留比例 ≤50%直接判degraded cube_vector_overlap_loss不能被新增的 Mix/同资源 overlap 的总量掩盖这是防止总量稀释的关键设计之后才看总体 stream pair overlap 的比例与绝对变化。绝对阈值1us存在的意义是避免极小 overlap 上的比例放大——比如 0.1us 到 0.05us 是 50% 下降但绝对量毫无意义。所有阈值必须写入输出thresholds字段并参与 deterministic replay保证任何一次重放都得到同一判定。优先级预算分配与 acceptance gate 分离多流 target 众多而 trace 预算有限规范给出的优先级原则是优先分析高频、且对 decode critical interval 贡献较大的 target结合 decode 关键路径见 critical-path-optimization.md不得把 occurrence 频次 × 单次 overlap loss 直接声明成端到端收益——局部损失的线性外推不是 E2E 证据排序只用于预算分配不改变 acceptance gate无论优先级高低任何候选都必须过 clean E2E 增量门禁才能被接受。这也呼应了multistream_opportunity_discovery.py的discover输出设计eligible targets 初始状态一律为parallelism_effectunknown、optimization_statusblocked不允许调用方预判结果优先级排序发生在 trace 分析之后服务于先分析谁而不是谁值得分析。小结多流分类与度量的核心纪律可以浓缩为五句话三个维度互不混用、beneficial 也要全量筛查、core_family 只信三字段、事实分类与动作资格分离、局部机制证据永远不能替代 clean E2E gate。这套规则在仓库中既是规范文本也是可执行的代码与测试判定逻辑在 multistream_trace_analysis.py资源派生在 multistream_core_family.py目标清单与覆盖率审计在 multistream_opportunity_discovery.py行为契约在 multistream_contract.py 与 evidence-contract.md配套单测可分别在 test_core_family.py 与 test_opportunity_discovery.py 中复现。完整的多流调优分支上下文可进一步阅读 SKILL.md 与 automation-pipeline.md。【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾Ascend芯片的轻量级、解耦式组件集合旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件和 Autofuse 组件未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考