已关闭
[Requirement|需求建议]: reduce_var AR 两趟路径性能优化(tilingdata 精简 + VF 分档) #3468
andong_hw创建于  16 天前关闭于  13 天前
andong_hw成员
16 天前 创建

一、背景信息 (必填)

reduce_var / ReduceStdV2 共享的 AR 两趟(two-pass)规约路径在 ascend950(arch35)上存在两点可优化项:

  1. TilingData 携带 reduceCntEachGroupR[MAX_CORE_COUNT](56 核逐 group 数组,结构体 1376B),且 tiling 侧承担逐 group 的 R 元素数计算,存在冗余;
  2. AR 两趟 VF 只有一个 PadLessVL 风格实现,在 RNum > VL 的大 R 场景性能不佳。

二、价值/作用 (必填)

  • tilingdata 由 1376B 精简到 352B,去掉随核数扩张的数组,降低开销与维护成本;
  • group 计数改为 kernel 侧闭式计算(CalcInnerUbRCnt()/CalcGroupReduceCnt()),phase2 按需计算真实规约 R 元素数,不再依赖逐 group 数组;
  • VFMeanVarTwoPassAR 按 R 大小分三档(LessVL / LessTwoVL / Common),大 R 场景实测 bf16 (8192,256) 约 -19%、fp16 (362,512) 约 -6%~-8%,其余 ±2% 内无回退;AR/group 场景精度全部通过。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

Aclnn 直调(ReduceVar 算子),不涉及框架侧改动。

3.2 总体设计
3.2.1 算子支持的数据类型

float16 / bfloat16 / float32

3.2.2 host侧设计
  • 删除 ReduceVarTilingData::reduceCntEachGroupR[MAX_CORE_COUNT] 与 MAX_CORE_COUNT;
  • 删除 SetReduceCntEachGroupR / ComputeInnerUbRCnt 及相关成员;
  • tiling 仅输出必要的切分字段。
3.2.3 kernel侧设计
  • Init() 中闭式计算当前核所在 group 的 groupReduceCnt_;phase2 按需计算每个 group 的真实规约 R 元素数;
  • VFMeanVarTwoPassAR 三段分档:LessVL(RNum<=VL,原实现)/ LessTwoVL(VL<RNum<=2VL,纯寄存器、无 LocalMemBar)/ Common(RNum>2VL,quotient 对半生成 partial、每个 scope 一次 LocalMemBar、var 用 DIST_BRC_B32 广播 mean);
  • scratch 独立化:AR 两趟路径下 welford 缓存空闲,借 tMeanTensor_ 作 partBufLocal,meanBuf 独占 dichotomyAddLocal;
  • VF 内 for 循环统一从 0 开始,满足 regbase VF 硬约束。
3.3 支持硬件

Ascend950(arch35)

3.4 算子约束限制

  • 仅优化 AR 两趟路径(其余路径逻辑不变);
  • 无新增数据类型/广播限制。

💡 备注(选填)
对应代码改动见关联 PR。

likedislike
Aandong_hw成员
16 天前 关联了pull request:perf(reduce_var): AR 两趟 VF 分档优化,group 计数改为 kernel 侧计算
陈思
陈思成员
16 天前 评论:

/assign @andong_hw

likedislike
CANN-robotCANN-robot成员
16 天前 将 andong_hw 设为负责人
CANN-robotCANN-robot成员
13 天前 关闭了 issue
CANN-robotCANN-robot成员
13 天前 添加了label:resolved
Aandong_hw成员
13 天前 关联了pull request:perf(reduce_var): ARPad 尾轴非对齐路径 mean/var 拆分双 VF