Closed
[Requirement|需求建议]: Pack/aclnnStack/torch.stack 测试 golden 增强 #3687
zhanglei842Add on  21 days agoClosed at  15 days ago
zhanglei842Collaborators
21 days ago Create

一、背景信息 (必填)

pack 是纯数据搬运算子(kernel Pack 语义等价 torch.stack),输出为输入按 axis 拼接的逐 bit 拷贝。现有测试 golden(conversion/pack/tests/assets/golden.py)存在以下不足:

  1. 旧 aclnn_stack_golden 仅执行 torch.stack(tensors, dim),未建模 aclnnStack(op_api/aclnn_stack.cpp)的实际执行链——输入 cast 到 promoteType 后打包、输出侧再 cast 到输出 dtype,混合 dtype 用例的 golden 与设备行为不一致;
  2. float8_e5m2 / float8_e4m3fn / hifloat8 / bfloat16 等以 ml_dtypes/en_dtypes 扩展 numpy dtype 到达 golden 的输入,torch.from_numpy 不识别,旧 golden 无处理路径;
  3. complex32 以 float16 + 尾维 [2](real/imag 交错)存储,负 axis 须归一化到尾维之前,旧 golden 未处理;
  4. 无精度标准(tolerance)声明,无 e2e(framework-api torch.stack)通路 golden。

二、价值/作用 (必填)

  • golden 与算子实现语义严格对齐(promote→stack→cast 链),消除混合 dtype 用例的比对误报/漏报;
  • 纯搬运算子精度标准统一为 binary_equal,并以 TestSpec 格式显式声明;
  • 补齐 fp8/hifloat8/bf16/complex32 等扩展 dtype 的 golden 路径,支撑新 dtype 用例开展;
  • 新增 e2e 通路 golden 插件,兜底非 torch 原生 dtype 的 framework-api 比对。

三、设计方案 (必填)

3.1 使能方式

三条通路统一由同一 golden 资产覆盖:kernel(ttk)、aclnn 直调、e2e(framework-api torch.stack),经 __spec__ 注册 PackTestSpec / AclnnStackTestSpec / StackTorchTestSpec。

3.2.1 算子支持的数据类型

float16 / float32 / float64 / bfloat16 / float8_e5m2 / float8_e4m3fn / hifloat8 / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / bool / complex32 / complex64 / complex128,精度标准统一 binary_equal。

3.2.2 host侧设计

aclnn_stack_golden 按 aclnnStack 的 cast 链建模:_cann_promote 复刻 CANN op::PromoteType 提升规则 → stack → 转换为 CSV 声明的输出 dtype。非 torch 原生 dtype 输入按 numpy 数组到达时分两路:输入与输出同 dtype 时无值转换,按 uint8 字节载体 stack 逐 bit 搬移;dtype 不同时按 numpy cast 链(astype(promote) → stack → astype(out))复刻设备 Cast 行为。

3.2.3 kernel侧设计

pack_golden 对标 torch.stack:常规 dtype 经 torch 计算;fp8/bf16 扩展 dtype 走 np.stack(纯搬运,逐 bit 等价);complex32 按存储视图归一化负 axis 后 stack。e2e stack_torch_golden 作为 framework-api golden 插件:torch 张量直通(含 out= 用例);numpy 输入同 dtype 返回 uint8 字节视图;混合 numpy dtype 显式 NotImplementedError 拒绝。

3.3 支持硬件

golden 为硬件无关测试资产;ttk 用例位于 conversion/pack/tests/st/arch35/。

3.4 算子约束限制

  • e2e golden 不支持混合 numpy dtype(非 torch 原生 dtype 的 promote 语义无法在 numpy 侧复刻),显式抛 NotImplementedError;
  • _cann_promote 遇 CANN 提升表未定义组合抛 RuntimeError,不静默给错值。

💡 备注:无

关联 PR:https://gitcode.com/cann/ops-math/pull/6240

likedislike
Zzhanglei842Collaborators
21 days ago Added label: requirement
Zzhanglei842Collaborators
21 days ago Assign zhanglei842 as responsible person
Zzhanglei842Collaborators
21 days ago Associated pull request
CANN-robotCANN-robotCollaborators
15 days ago Close issue
CANN-robotCANN-robotCollaborators
15 days ago Added label: resolved