UniqueV3
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
功能说明
-
算子功能:对输入的一维张量进行全局去重,返回排序后的唯一值序列、唯一值个数,以及可选的反向索引映射(inverse)和每个唯一值的出现次数(counts)。
flag_sorted=0时按降序输出,非 0 时按升序输出。 -
计算公式:
设输入张量为 x=[x0,x1,…,xN−1]x = [x_0, x_1, \ldots, x_{N-1}],共 NN 个元素。
-
output:将 xx 中所有不同的值排序,得到 output=[u0,u1,…,uM−1]output = [u_0, u_1, \ldots, u_{M-1}],MM 为唯一值个数。
flag_sorted=0时满足 u0>u1>…>uM−1u_0 > u_1 > \ldots > u_{M-1};flag_sorted \ne 0时满足 u0<u1<…<uM−1u_0 < u_1 < \ldots < u_{M-1}。 -
uniqueCnt:uniqueCnt=MuniqueCnt = M。
-
inverse(可选):对于每个 i∈[0,N)i \in [0, N),inverse[i]=jinverse[i] = j,满足 output[j]=xioutput[j] = x_i。
-
counts(可选):对于每个 j∈[0,M)j \in [0, M),counts[j]=∣{i∣xi=output[j]}∣counts[j] = |\{i \mid x_i = output[j]\}|,即输入中等于 output[j]output[j] 的元素个数,满足 ∑j=0M−1counts[j]=N\sum_{j=0}^{M-1} counts[j] = N。
-
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| input | 输入 | 待去重的一维张量。 | FLOAT、INT32、FLOAT16、BFLOAT16、INT16 | ND |
| output | 输出 | 排序后的唯一值序列,前 uniqueCnt 个元素有效,shape 与 input 相同;排序方向由 flag_sorted 控制。 | FLOAT、INT32、FLOAT16、BFLOAT16、INT16(与 input 相同) | ND |
| uniqueCnt | 输出 | 唯一值的个数,标量。 | INT32 | ND |
| inverse | 输出(可选) | 反向索引映射,inverse[i] 表示 input[i] 在 output 中的索引位置,shape 与 input 相同。仅当 flag_inverse=1 时有效。 | INT32 | ND |
| counts | 输出(可选) | 每个唯一值的出现次数,counts[j] 表示 output[j] 在 input 中出现的次数,前 uniqueCnt 个元素有效。仅当 flag_counts=1 时有效。 | INT32 | ND |
| flag_sorted | 属性(可选) | 唯一值的排序方向:0 表示降序,非 0 表示升序,默认值为 0。 | INT | - |
| flag_inverse | 属性(可选) | 是否计算反向索引输出 inverse,默认值为 0。 | INT | - |
| flag_counts | 属性(可选) | 是否计算唯一值计数输出 counts,默认值为 0。 | INT | - |
约束说明
- input 仅支持 1 维张量,不支持多维输入。
- 不支持空张量(元素个数为 0 的输入)。
- input、output 的数据类型只支持 FLOAT、INT32、FLOAT16、BFLOAT16、INT16,且 output 与 input 数据类型一致;uniqueCnt、inverse、counts 数据类型固定为 INT32。数据格式只支持 ND。
- 所有输入类型在 kernel 内部都会转换为 FLOAT 进行排序。INT32 输入如需保持逐元素精确区分,建议限制在 FP32 可精确表示的整数范围 [−224,224][-2^{24}, 2^{24}] 内。
- kernel 使用
3.402823e+38f(接近 FLOAT 最大有限值)及其负值作为对齐和边界处理的哨兵值,FLOAT 输入应避免使用这两个值。 - 支持动态 shape,不支持动态 rank。
- inverse、counts 在 flag_inverse/flag_counts 为 0 时,对应输出 tensor 仍需传入,但输出内容无意义。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_unique_v3 | 通过aclnnUniqueV3接口方式调用UniqueV3算子。 |