已关闭
[Requirement|需求建议]: 910b的fused_mul_add_n实现 #1690
zhaohujie创建于  5月28日关闭于  7月30日
zhaohujie
zhaohujie
5月28日 创建

一、背景信息 (必填)

内建算子 ops-math/math/fused_mul_add_n 仅支持 ascend950(arch35 kernel),在 ascend910b(Atlas A2)上缺少原生 AscendC 开源实现。本需求补齐 ascend910b 的原生 AscendC 实现(放置于 experimental/math/fused_mul_add_n/)。

二、价值/作用 (必填)

  • 在 Atlas A2(ascend910b)上提供 FusedMulAddN,将 mul 与 addn(n=2) 融合为单 kernel,相比分立 mul + add 减少一次 kernel 启动与中间张量的显存往返。
  • 作为图融合(graph fusion)的落点,也可经 aclnn 两段式直调;属访存密集型逐元素算子,大 shape 接近 HBM 带宽上限。

三、设计方案 (必填)

逐元素融合 FMA(标量广播):for i: y[i] = x1[i] * x3[0] + x2[i],其中 x3 为单元素标量张量。

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
  • aclnn 两段式直调:aclnnFusedMulAddNGetWorkspaceSize + aclnnFusedMulAddN
  • 图模式(GE IR)算子原型 + registry-invoke kernel
  • PyTorch(torch_npu)经自定义算子包调用
3.2 总体设计
3.2.1 算子支持的数据类型

float32 / float16 / bfloat16 / int32 / int16(x1/x2/x3/y 四者同 dtype)。

3.2.2 host侧设计
  • 算子定义:3 输入(x1/x2/x3 均 REQUIRED)+ 1 输出 y,AddConfig("ascend910b")
  • Tiling:单一 flat 策略——多核 former/tail 切分 + UB former/tail 切分,32B 对齐;按每核最小字节量(min-bytes-per-core)对小 shape 封顶有效核数(降低小 shape 的固定开销);核数/UB 动态获取
  • InferShape:y.shape = x1.shape,y.dtype = x1.dtype
  • aclnn 两段式接口层(op_api/)+ 完整参数校验(dtype 一致性、x1/x2/y 同 shape、x3 单元素、ND 格式)
3.2.3 kernel侧设计
  • 按 dtype 分 5 个 TilingKey;double-buffer 流水,DataCopyPad 搬运
  • fp32 / int32 / int16:原生直算 Muls(x1, x3[0]) → Add(x2)(整型两步回绕)
  • fp16 / bf16:转 fp32 域计算再 CAST_RINT 回(保证精度);fp16 采用 Axpy<float,half> 融合(3 个向量算子 + 单块 fp32 中间 buffer)
3.3 支持硬件

Atlas A2 训练系列产品 / Atlas 800I A2 推理产品(ascend910b)。

3.4 算子约束限制

  • x3 必须是 scalar 或单元素 tensor(ShapeSize == 1),仅取 x3[0] 按标量广播;不支持通用多维广播
  • x1 / x2 / y 须同 shape;x1 / x2 / x3 / y 须同 dtype,且为上列 5 种之一
  • 仅支持 ND 格式;三个输入均为必选

💡 备注(选填)

likedislike
zhaohujie
zhaohujie
5月28日 评论:

/assign @zhaohujie

likedislike
CANN-robotCANN-robot成员
5月28日 将 zhaohujie 设为负责人
zhaohujiezhaohujie
5月28日 修改了issue 的描述
zhaohujiezhaohujie
5月28日 关联了pull request:feat(fused_mul_add_n): 新增 ascend910b (A2) 平台支持
zhaohujiezhaohujie
6月2日 修改标题为 “[Requirement|需求建议]: 910b的 fused_mul_add_n 实现”,原标题为“[Requirement|需求建议]: fused_mul_add_n增加910B实现”
zhaohujiezhaohujie
6月2日 修改了issue 的描述
zhaohujiezhaohujie
6月2日 修改标题为 “[Requirement|需求建议]: 910b的fused_mul_add_n实现”,原标题为“[Requirement|需求建议]: 910b的 fused_mul_add_n 实现”
zhaohujiezhaohujie
6月2日 关联了pull request:feat(fused_mul_add_n): 910b的fused_mul_add_n实现
llimwang成员
7月30日 评论:

该 Issue 已超过 20 天未更新,先行关闭以便归档;如仍需跟进请评论或重新打开。

likedislike
Lllimwang成员
7月30日 关闭了 issue