Skip to content

Refactor: 对齐 A5 deferred release 与 Main - #12

Open
yanghaoran29 wants to merge 3 commits into
mainfrom
perf/a5-main-style-deferred-release-20260827
Open

Refactor: 对齐 A5 deferred release 与 Main#12
yanghaoran29 wants to merge 3 commits into
mainfrom
perf/a5-main-style-deferred-release-20260827

Conversation

@yanghaoran29

@yanghaoran29 yanghaoran29 commented Aug 27, 2026

Copy link
Copy Markdown
Owner

背景

当前 A5 双 Die 方案在 Main 的 deferred-release 逻辑上增加了“每轮最多处理 16 个 task”的微批,同时在批内聚合重复 producer。该阈值能带来小幅性能收益,但很难给出与 workload、fanin 宽度或 ring 压力无关的通用依据。

本 PR 直接面向 main,保留双 Die task-domain/locality 方案,但将 deferred release 恢复为 Main 的简单语义:触发 drain 时逐 task 处理,直到当前 backlog 清空。

  • Main:80dd3cd96e568e6f3ded9c11b68e7c267a31343d
  • 双 Die Before:629c7cdef4e83b039fe83de1ec87d948ee4bb185
  • release 对齐快照:4629184d23b51beefe6cff098da4664bf4444087
  • 性能测量源码身份:9dc809ec84eb27e1fa0f17283872b05387af58fc;PR head 在此源码上 amend 了报告、skill 与实验 artifact
  • PTO-ISA:be5ccb765a4ce5d14ca5da8b0e2f182d7f003369

保留的双 Die 机制

  • Scheduler cluster 按连续物理 cluster 分配,固定服务 DIE0/DIE1。
  • task 显式标记 GLOBALDIE0DIE1
  • AIC/AIV/MIX 使用按 domain 索引的 ready queue,同 Die consumer 优先进入 scheduler-local continuation queue。
  • completion、async-wait、ring reclaim 和 publication request 继续按 domain 路由。
  • 3 个 domain × 4 层 scope 的物理 ring 布局保持不变。
  • 各 workload 的 Die-local 划分保持不变。

Deferred release 对齐

保留 256-entry completed-task backlog,但移除:

  • DEFERRED_RELEASE_BATCH=16
  • release_deferred_batch()
  • 64-entry producer 聚合表;
  • release_producer_delta()
  • batch-local ring mask 与批末 ring-advance flush;
  • 只验证 shared-producer 微批聚合的单测。

容量满、idle、dummy、async-wait 和退出路径现在都循环调用 on_task_release(),直到当前 backlog 清空。

PUBLISH_INTERVAL_K=16 仍保留,它只控制 ring watermark 向 SM 的发布间隔,不是 deferred-release task 上限。

三方性能结论

设备为 Ascend950PR_9579 卡 1,CANN 9.2.0,runtime 为 tensormap_and_ringbuffer。Main 与 Before 使用历史干净构建数据,当前版本使用与本提交 patch-id 完全相同的本地实验数据。非 Qwen 各 100 轮算术平均;Qwen 运行 5 轮并按 Device 删除最快和最慢轮,取对应中间 3 轮平均。

负数表示更快。

Case Main Device Before Device 当前版本 Device 当前/Main 当前/Before
alternating_matmul_add Case1 1,495.2 us 1,332.9 us 1,338.1 us -10.51% +0.39%
benchmark_bgemm Case0 1,567.6 us 1,418.7 us 1,386.3 us -11.57% -2.28%
paged_attention_unroll Case1 1,876.0 us 1,512.5 us 1,543.7 us -17.71% +2.06%
paged_attention_unroll Case2 1,075.5 us 871.1 us 886.2 us -17.60% +1.73%
paged_attention_unroll_manual_scope Case1 1,898.5 us 1,495.5 us 1,515.3 us -20.18% +1.32%
paged_attention_unroll_manual_scope Case2 1,066.6 us 869.7 us 880.4 us -17.46% +1.23%
batch_paged_attention Case1 6,974.1 us 5,326.3 us 5,484.5 us -21.36% +2.97%
qwen3_14b_decode StressBatch16Seq3500 36,113.7 us 35,322.9 us 34,865.2 us -3.46% -1.30%
8-case 几何平均 -15.16% +0.75%

其他指标的 8-case 几何平均:

指标 当前/Main 当前/Before
Effective -15.59% +0.69%
Orchestrator -11.91% +1.34%
Scheduler -15.39% +0.69%

相对带微批的 Before,当前版本 Device 几何平均慢 0.75%;Batch PA 回退最大,为 2.97%,BGEMM 改善 2.28%,Qwen 改善 1.30%。相对 Main,当前版本 Device 几何平均仍改善 15.16%

因此这不是纯性能优化,而是明确的设计取舍:放弃一个难以给出通用依据的 16-task 阈值,换取与 Main 一致、容易解释和维护的 release 行为。

后续 Qwen3 Die-locality 对齐

当前 head 在 4629184d 上恢复已验证的 Qwen3 确定 Die 归属:

  • 50 个 OutProj block 按 10-block hidden shard 分配 domain,producer 与对应 residual_rms_cast consumer 同 Die;
  • block 26~49 的 SPMD 提交从 12 + 12 改为按 shard 边界拆成 4 + 10 + 10
  • Q seed 拆为两个 2560-column half,K/V seed 拆为两个 512-column half;
  • 每个 Q/K/V projection half 只依赖本 Die 的 seed half;
  • sync-start CANN PA、mlp_out_seed 和 85-edge fanin 的 dcr_xgamma 继续保持 GLOBAL。

本次只改 3 个 Qwen 文件;它们与历史实验最终版本 cd5eefef 对应文件逐字一致。相对 4629184d 的 Qwen 5 轮中间三轮结果:

指标 4629184d 当前 head 变化
Device 35,403.6 us 34,865.2 us -1.52%
Effective 35,306.7 us 34,827.4 us -1.36%
Orchestrator 10,483.9 us 10,657.8 us +1.66%
Scheduler 35,247.3 us 34,826.5 us -1.19%

Device/Effective/Scheduler 方向一致,但直接变化仍在 ±2% 噪声区间。相对 Main,当前 Qwen Device 改善 3.46%。Qwen 新采 1 份 level-4 泳道;其余 7 份沿用并复制 release 对齐快照的历史泳道。

验证与泳道

  • 合并报告:outputs/perf-updates/20260827_202244_qwen3-die-locality-main-style-release.md

  • 性能原始日志、汇总与 8 份泳道:outputs/perf-updates/20260827_202244_qwen3-die-locality-main-style-release/

  • test_a5_scheduler_statetest_a5_wiringtest_a5_aicore_completion_mailbox 通过;

  • 8 个默认样例 golden 全部 PASS;

  • 7 个非 Qwen 样例各完成 100/100 轮,Qwen 完成 5 轮;

  • 8 个样例各采集 1 次 level-4 chip swimlane,8/8 PASS;

  • 8 份原始泳道的 AICore/AICPU task 和转换后的 Perfetto trace 均非空;

  • PTO-ISA checkout 与 pin 一致,git diff --check 通过。

限制

  • Main、Before、当前版本没有逐 case 交叉运行,亚百分比差异可能包含时间窗口噪声。
  • Host 时间波动较大,当前结论以 Device/Effective/Scheduler 为主。
  • 如果唯一目标是当前机器上的最低 Device latency,带 16-task 微批的 Before 更优;本 PR 优先选择语义清晰和 Main 一致性。

基于连续物理cluster分核,为每个任务引入GLOBAL、DIE0和DIE1 domain,并为AIC、AIV和MIX维护按domain直接索引的ready queue。completion、async-wait、deferred-release和Scheduler-local continuation传播任务domain,使固定Die的依赖链尽量在对应Die内完成。

按样例的自然依赖粒度分配任务:BGEMM按group,PA unroll和manual PA按batch链,Batch PA按chunk,Alternating根任务在两侧均分。Qwen3按MLP分片保持Gate/Up、SiLU和Down同Die,并将非sync-start多核SPMD拆成两个逻辑block区间;sync-start attention和高fanin dcr_xgamma保留为GLOBAL单任务。

分支已rebase到Main 80dd3cd,并适配最新Tensor及PTO2退役后的runtime接口。卡1同机重新测试Main和本提交:非Qwen每个case 100轮,Qwen 5轮取Device中间3轮。Alternating改善8.19%,Batch PA改善1.89%,Qwen改善5.63%,BGEMM回退0.65%;4个PA unroll/manual case回退14.89%至21.40%,8 case Device几何平均回退6.62%。最新数据、限制说明及当前代码生成的8张四级原始泳道随提交保存。
@yanghaoran29
yanghaoran29 force-pushed the perf/a5-main-style-deferred-release-20260827 branch 2 times, most recently from ab6acf5 to f6157a3 Compare August 27, 2026 12:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant