ATB测试框架使用指南

测试框架指南

【免费下载链接】ascend-transformer-boost 本项目是CANN提供的是一款高效、可靠的Transformer加速库,基于华为Ascend AI处理器,提供Transformer定制化场景的高性能融合算子。 【免费下载链接】ascend-transformer-boost 项目地址: https://gitcode.com/cann/ascend-transformer-boost

概述

ATB测试框架是一套数据驱动的算子测试系统,支持通过CSV文件声明式定义测试用例,自动完成张量生成、算子执行、golden对比和精度/性能验证。框架分为两层:

  • Python层CsvOpsTestTool):CSV驱动的测试入口,负责用例解析、数据生成、结果验证
  • C++层atb_torch):PyTorch自定义类,桥接ATB算子与PyTorch张量,供Python层调用

环境依赖

编译依赖

以下依赖在编译测试框架(bash scripts/build.sh testframework)时必须存在,提供头文件和链接库:

依赖用途验证命令
CANN toolkitATB编译基础echo $ASCEND_HOME_PATH
PyTorchC++层编译链接torch/script.h等头文件及libtorch.sopython3 -c "import torch; print(torch.__file__)"
torch_npuC++层编译链接torch_npu头文件及libtorch_npu.sopip show torch-npu

PyTorch及torch_npu的安装请参考昇腾PyTorch安装指南

运行依赖

运行CSV测试时需要以下Python库(PyTorch和torch_npu同时也是编译依赖):

依赖用途验证命令
PyTorch张量创建、golden计算、算子调用python3 -c "import torch"
torch_npuNPU设备访问python3 -c "import torch_npu"
pandasCSV解析python3 -c "import pandas"
numpy数据生成与golden计算python3 -c "import numpy"
ml_dtypesBF16等自定义数据类型支持python3 -c "import ml_dtypes"
en_dtypeshifloat8数据类型支持python3 -c "from en_dtypes import hifloat8"
openpyxlExcel格式输出支持python3 -c "import openpyxl"
scipygolden计算中的科学计算python3 -c "import scipy"

其他Python三方库依赖见tests/framework/python/CsvOpsTestTool/requirements.txt

CXX ABI版本确定

testframework编译产物路径依赖正确的ABI版本(cxx_abi_0cxx_abi_1),判断方法:

python3 -c "import torch; print(torch.compiled_with_cxx11_abi())"
  • 输出True或torch未安装 → 使用--cxx_abi=1--use_cxx11_abi=1
  • 输出False → 使用--cxx_abi=0--use_cxx11_abi=0

常见编译失败

错误信息原因解决方法
torch/script.h: No such file or directory环境中未安装PyTorch安装PyTorch:pip install torch
torch_npu/csrc/core/npu/NPUStream.h: No such file环境中未安装torch_npu安装torch_npu
libatb.so: undefined referenceABI版本不匹配确认CXX ABI版本与已编译的ATB核心库一致

注意build.sh在torch未安装时仅输出Warning: Torch is not installed!但仍继续编译,最终在C++编译阶段报头文件缺失错误。若无需运行CSV测试框架,可使用bash scripts/build.sh default仅编译ATB核心库。

如何编译

完整编译流程

cd ascend-transformer-boost

# 1. 设置CANN环境变量(根据实际安装路径)
source /usr/local/Ascend/ascend-toolkit/set_env.sh

# 2. 编译测试框架(包含ATB核心库 + C++测试框架 + Python测试工具)
bash scripts/build.sh testframework

# 3. 设置ATB运行环境
source output/atb/set_env.sh

增量编译

日常开发中修改代码后无需全量重编译:

bash scripts/build.sh testframework

注意:不要删除build/目录,不要加--clean-first,增量编译即可。仅在CMake配置变更或算子内核文件(.cce)变动时才需要--clean-first,因为CMake无法自动检测内核文件变更。

编译产物

编译完成后,关键产物位于:

路径说明
output/atb/cxx_abi_{0\|1}/lib/libatb.soATB核心库
output/atb/cxx_abi_{0\|1}/lib/libatb_test_framework.so测试框架动态库(含OperationTorch)
tests/framework/python/CsvOpsTestTool/Python测试工具(安装到output)

如何编写测试用例

CSV用例格式

测试用例以CSV文件形式存放在tests/apitest/opstest/csv/目录下,以|作为分隔符。

表头字段说明
字段说明示例
CaseNum用例编号1
CaseName用例名称MatmulElewiseAdd
OpName算子名称LinearOperation
OpParam算子参数(JSON){"transposeA":true}
InNum输入张量数量3
InDType输入数据类型(;分隔)float16;float16;float16
InFormat输入格式(;分隔)nd;nd;nd
InShape输入形状(;分隔,维度用,2,3;4,3;4
OutNum输出张量数量1
OutDType输出数据类型float16
OutFormat输出格式nd
OutShape输出形状2,4
DataGenType数据生成方式customize;customize;customize
DataGenRange数据范围-2,2;-2,2;-2,2
InTensorFile输入张量文件路径(可选)
OutTensorFile输出张量文件路径(可选)
TestType测试类型(可选)FunctionPerformance
TestLevel测试级别(可选)Level0/Level1/Level2
FromModel来源模型(可选)LLaMA-65B
SocVersion支持的芯片型号Ascend910B,Ascend310P
ExpectedError期望的错误码NO_ERROR或错误码
数据类型枚举
含义
float16FP16
bf16BF16
floatFP32
int8INT8
int32INT32
int64INT64
uint64UINT64
格式枚举
含义
ndN维通用格式
fractal_nz华为NZ分形格式
错误码格式

格式为阶段前缀:错误码

前缀阶段示例
C:CreateOperation(创建算子)C:ERROR_INVALID_PARAM
I:InferShape(维度推导)I:ERROR_INVALID_TENSOR_DIM_NUM
S:Setup(CANN调用)S:ERROR_CANN_ERROR
无前缀正例NO_ERROR

用例示例

正例(基本矩阵乘)
1|MatmulElewiseAdd|LinearOperation|{}|3|float16;float16;float16|nd;nd;nd|2,3;4,3;4|1|float16|nd|2,4|customize;customize;customize|-2,2;-2,2;-2,2||||||Ascend910B,Ascend310P|NO_ERROR
正例(带转置参数)
23|MatmulTransposeA|LinearOperation|{"transposeA":true,"transposeB":false}|3|float16;float16;float16|nd;nd;nd|3,2;3,4;1,4|1|float16|nd|2,4|customize;customize;customize|-2,2;-2,2;-2,2||||||Ascend910B,Ascend310P|NO_ERROR
反例(参数校验错误)
146|MatmulCError|LinearOperation|{"hasBias":false,"enAccum":true}|0||||0|||||||||||Ascend310P|C:ERROR_INVALID_PARAM

编写golden函数

每个算子需在tests/framework/python/CsvOpsTestTool/data_generation.py中注册golden函数:

class LinearOperation(DataGen):
    @staticmethod
    def golden(in_tensors, op_params):
        # in_tensors: list[torch.Tensor],输入张量
        # op_params: dict,从CSV的OpParam字段解析
        input_data = in_tensors[0]
        weight = in_tensors[1]
        bias = in_tensors[2] if len(in_tensors) > 2 else None

        result = torch.matmul(input_data, weight.T)
        if bias is not None:
            result = result + bias
        return [result]

    @staticmethod
    def get_op_type(op_params):
        return OpTypes.COMPUTE_FLOAT

用例设计原则

  1. 覆盖所有支持的输入格式组合(ND、NZ)
  2. 覆盖所有支持的数据类型(float16、bf16、int8等)
  3. 覆盖边界shape(对齐/非对齐、batch=1/batch>1)
  4. 包含参数校验反例,验证错误码正确性
  5. 反例的InNum/OutNum可为0(不需要构造张量)
  6. SocVersion字段标注该用例适用的芯片型号

如何运行测试

基本命令

cd ascend-transformer-boost
source output/atb/set_env.sh

# 运行某个算子的全部用例
python tests/framework/python/CsvOpsTestTool/atb_csv_ops_test.py \
    -i tests/apitest/opstest/csv/linear.csv

# 运行指定范围的用例(1-based行号)
python tests/framework/python/CsvOpsTestTool/atb_csv_ops_test.py \
    -i tests/apitest/opstest/csv/linear.csv -n 1:10

# 运行单个用例
python tests/framework/python/CsvOpsTestTool/atb_csv_ops_test.py \
    -i tests/apitest/opstest/csv/linear.csv -n 5

常用参数

参数说明示例
-i输入CSV文件或目录-i tests/apitest/opstest/csv/linear.csv
-n用例行号(1-based,单个或范围)-n 5-n 1:100表示全部
-t执行次数(性能测试用)-t 100
-ll日志级别-ll debug
-op按算子名正则过滤-op LinearOperation
-s指定芯片型号-s Ascend910B
-tt按测试类型过滤-tt Function-tt Performance
-sv跳过精度验证-sv
-o结果输出路径-o ./result.csv

性能测试

python tests/framework/python/CsvOpsTestTool/atb_csv_ops_test.py \
    -i tests/apitest/opstest/csv/linear.csv \
    -tt Performance -t 400

多卡测试

对于需要多卡的算子(如AllGather),使用-ws指定卡数:

python tests/framework/python/CsvOpsTestTool/atb_csv_ops_test.py \
    -i tests/apitest/opstest/csv/all_gather.csv -ws 4

关于-n参数的注意事项

-n匹配的是CSV数据行号(1-based),不是CaseNum字段的值。删除中间用例后后续行号会前移,建议通过实际文件行数确认目标用例。传入0表示运行全部用例。

日志排查

测试失败时,可通过以下方式排查:

# 查看ATB运行日志
strings $ASCEND_PROCESS_LOG_PATH/atb/atb_*.log | grep -i "error"

# 查看CANN底层错误
grep -a "ERROR" $ASCEND_PROCESS_LOG_PATH/debug/plog/plog-*.log

附录:Python测试方式(非CSV)

对于不适合CSV格式的复杂场景,可直接编写Python测试类:

import unittest
from tests.framework.python import op_test

class TestMyOp(op_test.OpTest):
    def golden_calc(self, in_tensors):
        # 计算预期结果
        return [expected_output]

    def golden_compare(self, out_tensors, golden_out_tensors):
        return torch.allclose(out_tensors[0].float(),
                              golden_out_tensors[0].float(),
                              rtol=0.001, atol=0.001)

    def test_case1(self):
        in_tensors = [torch.randn(2, 3).to(torch.float16)]
        out_tensors = [torch.zeros(2, 3).to(torch.float16)]
        self.set_param("MyOperation", {"param1": 1})
        self.execute(in_tensors, out_tensors)

if __name__ == '__main__':
    unittest.main()

执行:

python tests/apitest/kernelstest/mix/test_my_op.py

【免费下载链接】ascend-transformer-boost 本项目是CANN提供的是一款高效、可靠的Transformer加速库,基于华为Ascend AI处理器,提供Transformer定制化场景的高性能融合算子。 【免费下载链接】ascend-transformer-boost 项目地址: https://gitcode.com/cann/ascend-transformer-boost

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值