SignBitsUnpack
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | √ |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
-
算子功能:将UINT8类型的1-bit Adam符号位拆包为FLOAT32或FLOAT16类型的张量。
-
计算公式:
设输入self为长度为N的1D UINT8张量,每个字节包含8个符号位(按LSB优先顺序),第jj个字节bjb_j的第ii位(i=0,1,…,7i = 0, 1, \dots, 7)解包规则如下:
outj⋅8+i={+1.0,biti(bj)=1−1.0,biti(bj)=0out_{j \cdot 8 + i} = \begin{cases} +1.0, & \text{bit}_i(b_j) = 1 \\ -1.0, & \text{bit}_i(b_j) = 0 \end{cases}
输出张量共N×8N \times 8个元素,并被reshape为二维,其shape为:
out.shape=(size, N×8size)out.shape = (size,\ \frac{N \times 8}{size})
其中size为入参指定的输出第一维度大小。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| self | 输入 | 待进行SignBitsUnpack计算的入参,1D张量,每个UINT8元素包含8个符号位。支持空tensor。 | UINT8 | ND |
| size | 输入属性 | 表示维度处理,reshape时输出张量的第一个维度。 | INT64 | - |
| dtype | 输入属性 | 表示量化输出Tensor的数据类型。 | FLOAT16、FLOAT | - |
| out | 输出 | 待进行SignBitsUnpack计算的出参,2D张量,数据类型由dtype参数决定。 | FLOAT16、FLOAT | ND |
约束说明
self必须是1维张量,out必须是2维张量。size必须大于0,且(self的元素个数 × 8)能被size整除。out的第一维度必须等于size。dtype参数仅支持FLOAT16、FLOAT,且out的数据类型必须与dtype参数一致;UINT8是self的数据类型,INT64是size的接口类型,均不是dtype参数的可选值。- 数据格式仅支持ND。
- 支持空tensor场景。
- 确定性计算:aclnnSignBitsUnpack默认确定性实现。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_sign_bits_unpack | 通过aclnnSignBitsUnpack接口方式调用SignBitsUnpack算子。 |
| 图模式调用 | test_geir_sign_bits_unpack | 通过算子IR构图方式调用SignBitsUnpack算子。 |