Skip to content

Perf: A5双Die任务局部性适配最新Main - #10

Open
yanghaoran29 wants to merge 1 commit into
mainfrom
perf/a5-die-locality-rebased-main-20260827
Open

Perf: A5双Die任务局部性适配最新Main#10
yanghaoran29 wants to merge 1 commit into
mainfrom
perf/a5-die-locality-rebased-main-20260827

Conversation

@yanghaoran29

@yanghaoran29 yanghaoran29 commented Aug 27, 2026

Copy link
Copy Markdown
Owner

背景

这是A5双Die任务局部性方案rebase到Main后的独立验证PR。原实验分支和原PR保持在旧主线版本,不由本PR覆盖。

本PR基于Main提交80dd3cd96e568e6f3ded9c11b68e7c267a31343d,相对该提交只有一个commit:629c7cdef4e83b039fe83de1ec87d948ee4bb185

方案

  • 按连续物理cluster分配Scheduler:S0/S1负责Die0,S2/S3负责Die1。
  • 每个任务显式标记GLOBALDIE0DIE1,AIC/AIV/MIX分别维护按domain直接索引的ready queue。
  • completion、async-wait、deferred-release和Scheduler-local continuation传播任务domain,使固定Die依赖链尽量在本Die完成。
  • BGEMM按group分Die;PA unroll/manual PA按batch链分Die;Batch PA按chunk分Die;Alternating根任务在两侧均分。
  • Qwen3按MLP分片保持Gate/Up、SiLU和Down同Die;非sync-start多核SPMD拆分到两个Die,sync-start attention和高fanin dcr_xgamma保持GLOBAL。

与Main的干净构建性能对比

设备为Ascend950PR_9579卡1,CANN 9.2.0。Main和本PR均使用各自的全新worktree、全新build/和独立PTO-ISA checkout从零编译;测试前同时卸载.venv与底层conda环境中的旧editable安装。两侧的pto_isa_build.json均已校验,所有构建路径都位于各自worktree内。

  • Main:80dd3cd96e568e6f3ded9c11b68e7c267a31343d
  • 本PR:629c7cdef4e83b039fe83de1ec87d948ee4bb185
  • 固定卡1,单个task-submit锁,不执行RTT preflight。
  • 测试顺序为完整Main后完整本PR。
  • 非Qwen每个case运行100轮,表中使用100轮算术平均。
  • Qwen运行5轮,分别按Device latency删除最快和最慢各一轮,对中间3轮取平均。
  • 负数表示本PR更快,正数表示本PR更慢。
Case Main Device 本PR Device Device变化 Effective变化 Orch变化 Scheduler变化
alternating_matmul_add Case1 1,495.2 us 1,332.9 us -10.85% -11.16% -11.14% -10.95%
benchmark_bgemm Case0 1,567.6 us 1,418.7 us -9.50% -9.77% -9.44% -9.53%
paged_attention_unroll Case1 1,876.0 us 1,512.5 us -19.38% -19.74% -11.03% -19.51%
paged_attention_unroll Case2 1,075.5 us 871.1 us -19.01% -19.61% -15.27% -19.31%
paged_attention_unroll_manual_scope Case1 1,898.5 us 1,495.5 us -21.23% -21.63% -9.76% -21.46%
paged_attention_unroll_manual_scope Case2 1,066.6 us 869.7 us -18.46% -19.27% -12.79% -18.86%
batch_paged_attention Case1 6,974.1 us 5,326.3 us -23.63% -23.79% -33.28% -23.75%
qwen3_14b_decode StressBatch16Seq3500 36,113.7 us 35,322.9 us -2.19% -2.19% +2.35% -2.19%
8 case几何平均 -15.79% -16.17% -13.07% -15.97%

Qwen中间3轮Device样本:

  • Main:35793.9, 36244.5, 36302.7 us
  • 本PR:35271.3, 35283.7, 35413.7 us

本次8个case的Device latency全部改善,没有Device回退项。Qwen的Orchestrator单项回退2.35%,但Device、Effective和Scheduler均改善约2.19%

此前PR描述中的性能表受到本机残留editable安装污染:构建后端曾从系统site-packages加载旧优化仓库。本次已清除该安装,并用构建元数据强制验证Main/PR来源;旧表不再作为性能结论。

验证和泳道

  • Main与本PR的8个benchmark均运行成功。
  • 本PR在卡1为8个case各采集一次4级泳道,8/8 PASS。
  • commit中保存了8个case的merged_swimlane.json,可直接导入Perfetto;kernel名称映射保存在对应case目录。
  • 泳道采集会扰动细粒度任务并发,因此性能表来自关闭泳道的多轮benchmark。

已知问题

  • 测试顺序为完整Main后完整本PR,不是逐case交叉运行。
  • Qwen的Orchestrator时间仍回退2.35%,后续可继续压缩任务domain路由与依赖构造开销。
  • 先前全量CTest为120/122通过;两个HBG graph-submit目标出现异步时序断言失败。本轮只重新执行性能benchmark,未重新运行全量CTest。

Qwen3后续Die-local实验(独立分支,尚未合入本PR)

在本PR提交629c7cdef4e83b039fe83de1ec87d948ee4bb185基础上继续减少Qwen3跨Die依赖,实验代码位于分支exp/a5-qwen-domain-bridges-20260827,最新提交为cd5eefefc1b4994dd3d7670a120e6abed2559aea。本节是后续实验结果,当前PR head尚不包含这两个实验提交;上方全量表中的Qwen数据仍对应当前PR代码。

新增算法:

  • 将50个OutProj block按5个hidden shard重组,每个shard的OutProj producer与对应residual_rms_cast consumer固定在同一Die;
  • 将Q seed拆成两个2560-wide半区,分别只解锁同Die的Q projection;
  • 将K/V seed拆成两个512-wide半区,分别只解锁同Die的K/V projection;
  • mlp_out_seed与24-block CANN PA保持GLOBAL。mlp_out_seed同时清零down/gate/up/attention四类accumulator,且GLOBAL PA必须等待全部seed完成,继续拆分不能带来提前启动收益。

测试仍固定Ascend950PR_9579卡1,关闭泳道;先运行1轮golden并PASS,再运行5轮。按Device latency排序,删除最快和最慢轮,对中间3轮及其对应指标取平均:

Variant Device Effective Orch Scheduler Device相对当前PR
当前PR 629c7cde 35,322.9 us 35,286.1 us 10,510.8 us 35,285.4 us baseline
OutProj/cast同Die 87c23c26 35,134.1 us 35,093.7 us 10,447.5 us 35,093.0 us -0.53%
再拆分Q/KV seed cd5eefef 34,576.6 us 34,490.2 us 10,472.1 us 34,427.3 us -2.11%

最终版本相对当前PR:Device改善2.11%、Effective改善2.26%、Scheduler改善2.43%、Orchestrator改善0.37%。最终5轮Device原始值为34644.2, 34473.0, 34434.4, 34612.5, 34932.8 us,入选中间3轮为34473.0, 34612.5, 34644.2 us

基于连续物理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张四级原始泳道随提交保存。
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