CANN/cann-bench转置算子评测
Transpose 算子 API 描述
【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench
1. 算子简介
对 tensor 的任意维度进行调换。
主要应用场景:
- 深度学习中数据格式转换(如 NCHW 与 NHWC 之间的转换)
- 注意力机制中对 Q、K、V 矩阵进行维度交换
- 矩阵运算前的维度调整(如矩阵转置)
算子特征:
- 难度等级:L3(LayoutTransform)
- 单输入单输出,支持不超过 8 维的输入,通过 perm 参数指定维度置换顺序
2. 算子定义
数学公式
$$ y[i_0, ..., i_{n-1}] = x[i_{\text{perm}[0]}, ..., i_{\text{perm}[n-1]}] $$
其中 perm 为维度置换顺序数组,指定输出张量各维度对应输入张量的哪个维度。
3. 接口规范
算子原型
cann_bench.transpose(Tensor x, int[] perm) -> Tensor y输入参数说明
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| x | Tensor | 必选 | 输入张量,维度不超过 8 维 |
| perm | int[] | 必选 | 维度置换顺序 |
输出
| 参数 | Shape | dtype | 描述 |
|---|---|---|---|
| y | 输入 shape 按 perm 重排后的 shape | 与输入 x 相同 | 输出张量,转置后的结果 |
数据类型
| 输入 dtype | 输出 dtype |
|---|---|
| float16 | float16 |
| float32 | float32 |
| bfloat16 | bfloat16 |
| int8 | int8 |
| int16 | int16 |
| int32 | int32 |
| int64 | int64 |
规则与约束
- 输入维度不超过 8 维
- perm 数组长度必须等于输入维度数,且为 [0, ndim) 的一个排列
- 输出 shape 为输入 shape 按 perm 重排的结果,即 output_shape[i] = input_shape[perm[i]]
- 输出 dtype 与输入 dtype 一致
4. 精度要求
采用生态算子精度标准进行验证。
误差指标:
平均相对误差(MERE):采样点中相对误差平均值
$$ \text{MERE} = \text{avg}(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)+\text{1e-7}}) $$
最大相对误差(MARE):采样点中相对误差最大值
$$ \text{MARE} = \max(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)+\text{1e-7}}) $$
通过标准:
| 数据类型 | FLOAT16 | BFLOAT16 | FLOAT32 | HiFLOAT32 | FLOAT8 E4M3 | FLOAT8 E5M2 |
|---|---|---|---|---|---|---|
| 通过阈值(Threshold) | 2^-10 | 2^-7 | 2^-13 | 2^-11 | 2^-3 | 2^-2 |
当平均相对误差 MERE < Threshold,最大相对误差 MARE < 10 * Threshold 时判定为通过。
5. 标准 Golden 代码
import torch """ Transpose算子Torch Golden参考实现 对tensor的任意维度进行调换 公式: y[i0,...,in-1] = x[i_perm[0],...,i_perm[n-1]] """ def transpose( x: torch.Tensor, perm: list ) -> torch.Tensor: """ 对tensor的任意维度进行调换 公式: y[i0,...,in-1] = x[i_perm[0],...,i_perm[n-1]] Args: x: 输入张量 perm: 维度置换顺序 Returns: 输出张量,转置后的结果 """ y = torch.permute(x, perm) return y6. 额外信息
算子调用示例
import torch import cann_bench # 2D 矩阵转置 x = torch.randn(1024, 1024, dtype=torch.float16, device="npu") y = cann_bench.transpose(x, [1, 0]) # 4D NCHW 转 NHWC x = torch.randn(2, 8, 256, 256, dtype=torch.float32, device="npu") y = cann_bench.transpose(x, [0, 2, 3, 1])【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
