Closed
[Requirement|需求建议]: Pack/aclnnStack/torch.stack 测试 golden 增强 #3687
zhanglei842Add on 21 days agoClosed at 15 days ago
21 days ago Added label: requirement
21 days ago Assign zhanglei842 as responsible person
21 days ago Associated pull request
15 days ago Close issue
15 days ago Added label: resolved
一、背景信息 (必填)
pack 是纯数据搬运算子(kernel
Pack语义等价torch.stack),输出为输入按 axis 拼接的逐 bit 拷贝。现有测试 golden(conversion/pack/tests/assets/golden.py)存在以下不足:aclnn_stack_golden仅执行torch.stack(tensors, dim),未建模aclnnStack(op_api/aclnn_stack.cpp)的实际执行链——输入 cast 到 promoteType 后打包、输出侧再 cast 到输出 dtype,混合 dtype 用例的 golden 与设备行为不一致;float8_e5m2/float8_e4m3fn/hifloat8/bfloat16等以 ml_dtypes/en_dtypes 扩展 numpy dtype 到达 golden 的输入,torch.from_numpy不识别,旧 golden 无处理路径;complex32以 float16 + 尾维 [2](real/imag 交错)存储,负 axis 须归一化到尾维之前,旧 golden 未处理;torch.stack)通路 golden。二、价值/作用 (必填)
三、设计方案 (必填)
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复刻 CANNop::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。e2estack_torch_golden作为 framework-api golden 插件:torch 张量直通(含 out= 用例);numpy 输入同 dtype 返回 uint8 字节视图;混合 numpy dtype 显式NotImplementedError拒绝。3.3 支持硬件
golden 为硬件无关测试资产;ttk 用例位于
conversion/pack/tests/st/arch35/。3.4 算子约束限制
NotImplementedError;_cann_promote遇 CANN 提升表未定义组合抛RuntimeError,不静默给错值。💡 备注:无
关联 PR:https://gitcode.com/cann/ops-math/pull/6240