已关闭
[Requirement|需求建议]: embedding_hash_table_apply_adam_w 算子高bit访存优化 #5823
AlfengYuan创建于  15 天前关闭于  15 天前
AlfengYuan
AlfengYuan成员
15 天前 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Backgroud(背景信息)

Ascend 系列芯片在使用高bit访存的时候,同样数据量,高bit访存指令数更少,底层性能更好。

本需求针对 EmbeddingHashTableApplyAdamW 算子(arch35)引入两类 SIMT 优化:

(1)访存合并:fp32 偶数 dim 的 m/v/maxGradNorm/grad/values 五路状态由逐元素 4B 标量访存改为 float4(B128)/float2(B64) 短向量批量访存(dim%4==0 → float4,dim%2==0 → float2,运行时对齐检查兜底),独立 VF 函数隔离寄存器分配,legacy 路径代码生成零影响;

(2)高维 probe 摊销布局:dim>256 时旧公式 blockNum=N×⌈dim/256⌉,超出 keyNum 的 block 全部空转,probe 无法摊销;改为小 blockX 布局(legacy kernel 内 xLoop 一次 probe 走全程,xLoopSize=⌈dim/blockX⌉ 由 kernel 推导),全 dtype/奇偶生效,且与旧公式输出位级一致。

桶格式/tiling 字段/flag 位语义/哈希函数零改动,与 hash 家族跨算子契约完全兼容。

Origin(信息来源)

华为海思

Benefit / Necessity(价值/作用)

推荐场景,hashTable 类算子,大 embedding_dim 更新场景,probe 与元素更新双瓶颈。

优化后(950PR,N=2^20,B=2^21,min 耗时,fp32 全 dim 1024 档 + fp16 逐档标定):

  • fp32 主窗口 dim 6~128 偶数(除 26/62):均值 1.12×,峰值 1.72×@dim8
  • fp32 dim 257~736(probe 摊销布局 bx=32):368 档均值 1.13×,最好 1.45×@257
  • fp32 dim>736 偶数(合并 VF 高窗):均值 1.25×,最好 1.44×@864
  • fp16 dim 257~1024(bx=64 布局):均值 1.38×,峰值 2.98×@258
  • fp16 dim 1~256 / 全部奇数 dim ≤256 / dim<6 / dim 130~256:持平,全 dim 双 dtype 无回退

Design(设计方案)

SIMT 宽带提升,单次访存粒度越大性能越好,B128 > B64 > B32。

(1)合并访存 VF(fp32 偶数 dim∈[6,128]{26,62} 或 dim>736):独立 VF ComputeAdamWMergedFp32,两相 load/compute/store 压寄存器峰值;dim%4==0 → float4(B128),%4==2 → float2(B64);行偏移 16B 对齐运行时判定,极端非对齐兜底回退 float2;blockX 主窗口封顶 4(dim≥88 为 8,probe/key 并行度主导)、高窗口封顶 32(元素吞吐主导)。tiling/kernel 分派条件逐字一致(布局契约)。

(2)probe 摊销布局(dim 257~736 全 dtype/奇偶 + dim>736 的 fp16/奇数档):blockNum 由 N×⌈dim/256⌉(超额 block 空转)改为 ⌈N/by⌉,fp32 bx=32/by=16、fp16 bx=64/by=8(fp16 在 bx=32 下 even 344~352/奇数 641~767 实测稳定回退 0.93~0.99×,bx=64 后全 768 档 1.017~2.976×;两 dtype 布局分叉为实测标定结果);legacy kernel 内 xLoop 全覆盖,与旧公式位级一致(dim 258~1024 含奇数/amsgrad 逐字节比对验证)。

(3)回退策略(全 dim 扫描标定,非抽样):dim 26/62 合并实测 0.975× 稳定回退、dim 130~256 旧大 blockX 单 pass 流式已近最优(合并 0.88~0.96×),均保持 legacy 旧公式;fp16 dim≤256 保持旧公式。

(4)兼容性:桶格式/tiling 字段/flag 位语义/MurmurHash3 全部未动,hash 家族其他算子(init/lookup/export/import 及 canndev evict)不受影响。

实测性能(950PR,N=2^20,B=2^21,min 耗时):

  • fp32 dim=8/64/128:1.72×/1.19×/1.42×
  • fp32 dim=258/512/736:1.45×/1.15×/1.30×(布局段 368 档均值 1.13×)
  • fp32 dim=740/768/864/1024:1.13×/1.15×/1.46×/1.25×(合并 VF 高窗)
  • fp16 dim=258/512/768/1024:2.99×/1.37×/1.23×/1.53×

验证:e2e 真机五算子 sweep 全场景矩阵 150 用例全 PASS(init 36/36、lookup 54/54、export 11/11、import 9/9、adamw 40/40,adamw 含 dim>256 新增用例与 fp16 高维档);tiling UT 4/4 PASS(含分派窗口契约断言 7 组);双机复测结论一致。

关联 PR:https://gitcode.com/cann/ops-nn/merge_requests/10323

likedislike
AlfengYuanAlfengYuan成员
15 天前 关联了pull request:perf: float2/float4 for embedding_hash_table_apply_adam_w
AlfengYuan
AlfengYuan成员
15 天前 评论:
AlfengYuanAlfengYuan成员
15 天前 修改了issue 的描述
yuning_chenyuning_chen成员
15 天前 将 alfengyuan 设为负责人
CANN-robotCANN-robot成员
15 天前 关闭了 issue
AlfengYuanAlfengYuan成员
15 天前 issue状态由 进行中 改变为 已完成
CANN-robotCANN-robot成员
15 天前 添加了label:resolved