Closed
aclnnChunkCat 资料缺少 dtype 支持面,且「按 dim 后一维级联」与实现的输出形状公式不一致 #3951
liuhanwen8Add on  20 days agoClosed at  18 days ago
liuhanwen8
liuhanwen8
20 days ago Create

aclnnChunkCat 资料缺少 dtype 支持面,且「按 dim 后一维级联」的表述与实现输出形状不一致

1. 环境

Ascend 910B2(A2)单卡;CANN 9.2.0;npu-smi 26.1.1;aclnn 单算子直调。

2. 问题

资料 conversion/chunk_cat/docs/aclnnChunkCat.md 的参数表里:

参数 资料写法
tensors 「列表内数据类型需一致」(没有给支持的数据类型列表)
out 「数据类型所占字节数需要是输入数据类型所占字节数的非0整数倍」(没有给支持列表)
dim 「int 类型的值,当前仅支持为 0」
numChunks 「必须大于 0」

而实现侧(op_api/aclnn_chunk_cat.cpp)的白名单只有 FLOAT / FLOAT16 / BFloat16 三种;
INT8、INT32、UINT8 等一律返回 161002。按资料无法判断「INT8 到底支不支持」,
只能靠试。

同时功能说明写「将 tensors 中所有 tensor 先按照维度 dim 切分为 numChunks 块,
再按照 dim 后一维进行级联」,但实现(op_host/chunk_cat_infershape.cpp)推导的输出是

out.dim      = dim + 2
out[dim]     = numChunks
out[dim + 1] = Σ_t ceil(shape_t[dim] / numChunks) * Π_{j>dim} shape_t[j]

即「每块其余各维被压平成一列,各 tensor 的同号块首尾相接」,不是「按 dim+1 维度级联」
(后者会得到 dim+1 维输出)。按资料的字面意思写调用(例如 2 个 4x3x2 的 tensor、
numChunks=2、out 声明成 2x6x2)必然 161002。

3. 复现

# 用 2x6x2 的 out(资料字面语义)→ 161002
# 用 2x24 的 out(实现语义)→ 0

等价地,任意一个 INT8 输入 + fp32 out 的调用都会返回 161002,而资料没有说明 INT8 不支持。

4. 期望

  1. 参数表补齐 tensors / out 的数据类型支持列表(与源码白名单一致:FLOAT / FLOAT16 / BFLOAT16);
  2. 功能说明把输出形状公式写清楚(out = (numChunks, Σ ceil(L_t/numChunks)·Π rest_t)),
    或至少给出一个「输入→输出形状」的示例;
  3. 错误码表补一条「列表内 tensor 的 shape 维度/首维不可整除 numChunks 时」的行为说明
    (实测首维不能被 numChunks 整除时不报错,按 ceil 补齐后继续算,需明确是否符合预期)。

5. 实际

资料三处均缺失/与实现不一致,调用方只能靠试错确定合法形状与 dtype。

likedislike
liuhanwen8liuhanwen8
20 days ago Added label: documentation
陈思
陈思Collaborators
20 days ago Comments:

您好,感谢反馈!

问题分析

本次核查的 cann/ops-math@a11d8785 参数表中,tensors 和 out 的“数据类型”列已经列出 FLOAT、FLOAT16、BFLOAT16;A2 入口也按这三种类型校验,列表内类型必须一致,FLOAT 输入要求 FLOAT 输出。因此 INT8 输入返回参数错误符合这版实现,不能据此判断该版本缺少类型列表。资料输入列、资料输出列、类型检查。本条未给资料提交,所见页面与该版本是否存在差异尚未确认。

输出形状的说明确实可以更明确:当前 dim 仅支持 0,实现会把各输入的后续维度合并。对参与拼接的非空输入,令 L_t=shape_t[0]、R_t=后续维度大小的乘积,则输出为 [numChunks, Σ ceil(L_t/numChunks)×R_t]。所以两个 [4,3,2] 输入、numChunks=2 时,输出是 [2,24],与保留三维的 [2,6,2] 不同。合维处理、形状推导。

首维不能整除 numChunks 时,形状推导使用向上取整,没有把不能整除作为报错条件。所读 A2 路径先清零缓冲区,再复制有效数据,末块只复制剩余部分,体现了缺位填零的处理。清零、末块复制。

处理方向

一个可行的资料调整方向是保留已有类型支持列表,补充“合并尾部维度—按向上取整分块—拼接同号块”的顺序、二维输出公式,以及整除和不能整除的形状/填充示例。不能整除应说明现有行为,不宜直接新增为 161002 条件;真正不满足类型、维数、dim、numChunks 或输出形状约束的情况则分别说明。我们会继续确认这些说明与各产品实现的对应范围。

likedislike
陈思陈思Collaborators
20 days ago Assign chen_0715 as responsible person
陈思陈思Collaborators
20 days ago Added label: pending-confirmation
陈思陈思Collaborators
20 days ago Removed label: pending-confirmation
CchenyifengCollaborators
19 days ago Assign Anthony0331 as responsible person
CchenyifengCollaborators
19 days ago Removed responsible person chen_0715
TtangkaidiCollaborators
18 days ago Removed responsible person Anthony0331
TtangkaidiCollaborators
18 days ago Assign tangkaidi as responsible person
tangkaidiCollaborators
18 days ago Comments:

您好,感谢您的关注和反馈。
该issue内提及的问题已确认,将会尽快合入代码。
修复PR链接:https://gitcode.com/cann/ops-math/pull/6736

likedislike
CANN-robotCANN-robotCollaborators
18 days ago Close issue
CANN-robotCANN-robotCollaborators
18 days ago Added label: resolved