已关闭
[Requirement|需求建议]: SignBitsUnpack 算子 Ascend950 实现及 GEIR 图通路支持 #2388
yulianjie创建于  7月27日关闭于  8月1日
yulianjie
7月27日 创建

一、背景信息 (必填)

SignBitsUnpack 当前仅有 ACLNN 接口骨架,无法作为完整 AscendC 算子参与 ops-math 的构建和 GEIR 图模式调用。本需求补齐 SignBitsUnpack 在 Ascend 950(arch35)的算子实现,并使能 ACLNN 与 GEIR 两条调用路径。

二、价值/作用 (必填)

该算子将 1-bit Adam 的 UINT8 符号位拆包为 FLOAT16/FLOAT 张量:bit=1 映射为 +1.0,bit=0 映射为 -1.0。补齐实现后,训练/优化器场景可在 Ascend 950 上通过 ACLNN 直调或图模式使用该能力,同时保证输出 shape、dtype 与属性约束在各层一致。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
  • ACLNN 直调:aclnnSignBitsUnpackGetWorkspaceSize -> l0op::SignBitsUnpack -> AICore launcher。
  • GEIR 图模式:通过 SignBitsUnpack proto 构图,设置 size、dtype 属性,使用 Session::AddGraph 和 Session::RunGraph 编译、执行。
3.2 总体设计
3.2.1 算子支持的数据类型
  • 输入 x/self:UINT8,ND,1D。
  • 输出 y/out:FLOAT16 或 FLOAT,ND,2D。
  • 属性:size 为 INT64,dtype 为输出数据类型。
3.2.2 host侧设计
  • 增加 OpDef、InferShape、InferDataType 和 arch35 RT2 tiling。
  • shape 推导为 [size, input_numel * 8 / size];校验 size > 0 且 input_numel * 8 可被 size 整除。
  • GEIR proto、Host OpDef 与调用示例统一 size/dtype 的名称、顺序和类型,避免图编译阶段属性读取不一致。
3.2.3 kernel侧设计
  • 使用 SignBitsUnpackTilingData 分配 block 与 UB 分块。
  • 由 DTYPE_Y 宏选择 FLOAT16/FLOAT kernel 变体;kernel 对 UINT8 中的每一 bit 做 +1.0/-1.0 解包。
3.3 支持硬件
  • Ascend 950,arch35。

3.4 算子约束限制

  • 输入必须为 1D UINT8,输出必须为 2D ND。
  • size 必须大于 0,且 (input_numel * 8) % size == 0。
  • 输出第一维必须等于 size,输出 dtype 必须与 dtype 属性一致。

💡 备注(选填)

已完成 opkernel 构建、打包、GEIR graph 示例和 eager 示例验证;具体命令与结果将在关联 PR 中说明。

likedislike
Yyulianjie
7月27日 添加了label:requirement
ForestFrameForestFrame
7月27日 关联了pull request:feat(SignBitsUnpack): add Ascend 950 implementation
ForestFrame
ForestFrame
7月27日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
7月27日 将 ForestFrame 设为负责人
songkai111成员
8月1日 评论:

关联pr已合入,该issue将按已完成进行处理,如有新需求欢迎继续提出。

likedislike
Ssongkai111成员
8月1日 issue状态由 进行中 改变为 已完成
Ssongkai111成员
8月1日 关闭了 issue
CANN-robotCANN-robot成员
8月1日 添加了label:Accepted