# AscendOpTest **Repository Path**: jxlang910/ascendoptest ## Basic Information - **Project Name**: AscendOpTest - **Description**: 基于昇腾CANN构建高效易用的Ascend C算子精度、性能测试工具。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2025-09-01 - **Last Updated**: 2025-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AscendOpTest #### 介绍 基于昇腾CANN构建高效易用的Ascend C算子精度、性能测试工具。 #### 软件架构 软件架构说明 该项目主要包含以下几个模块,各模块分工明确,协同完成 Ascend C 算子的精度与性能测试工作: - **`aclnn-gen` 模块**:用于生成 ACLNN 相关的内容。 - `aclnn_gen`:核心功能实现目录。 - `pyproject.toml`:Python 项目配置文件,定义项目元数据和依赖项。 - `requirements.txt`:列出项目所需的 Python 依赖库。 - `setup.cfg`:Python 项目的配置文件,用于配置打包相关信息。 - **`compare` 模块**:负责预期数据和实际数据对比,判断测试结果是否符合预期。 - `compare`:包含数据比较的核心代码。 - `data_compare.py`:模块入口,可以单独调用该模块进行数据对比。 - `output_parse`:用于解析测试输出结果的目录。 - **`data_gen` 模块**:生成测试所需的数据。 - `data_gen`:数据生成的核心代码目录。 - `data_gen.py`:模块入口,可以单独调用该模块进行数据生成。 - `input_parse`:用于解析测试输入的目录。 - **`golden` 模块**:生成预期数据。 - `case_parse`:用于解析测试用例的目录。 - `golden_gen`:基准数据生成的核心代码目录。 - `golden_gen.py`:模块入口,可以单独调用该模块进行预期数据生成。 - **`run_test.py`**:项目的主测试脚本,用于协调各模块完成测试任务。 #### 使用说明 1. 使用前需要安装CANN,并完成相关环境变量配置,参照 [快速安装CANN](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1alpha001/softwareinst/instg/instg_quick.html?Mode=PmIns&OS=Debian&Software=cannToolKit) 2. 部署好待测试算子,配置好测试用例json文件,包括算子、输入数据、预期输出。 以AddCustom为例,json文件格式: ``` [ { "case_name": "Test_001", "op_name": "AddCustom", "expect_func":"/xxx/custom_add.py:custom_add", "input_desc": [ { "format": "ND", "data_type": "float16", "param_type":"required", "shape": [2,3], "name": "x", "data_path":"/xxx/test_x.bin", "value_range":[0,100] }, { "format": "ND", "data_type": "float16", "param_type":"required", "shape": [2,3], "name": "y", "data_path":"/xxx/test_y.bin", "value_range":[0,100] } ], "output_desc": [ { "format": "ND", "data_type": "float16", "param_type":"required", "shape": [2,3], "name": "z", "data_path":"/xxx/test_z.bin", "golden_path":"/xxx/test_golden_z.bin", "err_threshold":[0.001,0.001] } ], "attr_desc": [ ] } ] ``` 以下是对上述 JSON 文件中各 字段 的描述: | 字段 | 描述 | | --- | --- | | `case_name` | 测试用例的名称,用于唯一标识该测试用例。 | | `op_name` | 待测试算子的名称,此处为 `AddCustom`。 | | `expect_func` | 计算预期输出的函数路径,格式为 `文件路径:函数名`。不配置时默认使用output_desc[].golden_path 作为预期输出 | | `input_desc` | 输入数组,包含所有输入数据的描述信息。 | | `input_desc[].format` | 输入数据的格式,例如 `ND`。 | | `input_desc[].data_type` | 输入数据的数据类型,如 `float16`。 | | `input_desc[].param_type` | 输入参数的类型,`required` 表示该参数为必需参数。 | | `input_desc[].shape` | 输入数据的形状,以列表形式表示。 | | `input_desc[].name` | 输入数据的名称,用于标识不同的输入。 | | `input_desc[].data_path` | 输入数据文件的路径。不配置时默认为{case_name}_{input_desc[].name}.bin | | `input_desc[].value_range` | 输入数据的值范围,以列表形式表示最小值和最大值。 | | `output_desc` | 输出数组,包含所有输出数据的描述信息。 | | `output_desc[].format` | 输出数据的格式,例如 `ND`。 | | `output_desc[].data_type` | 输出数据的数据类型,如 `float16`。 | | `output_desc[].param_type` | 输出参数的类型,`required` 表示该参数为必需参数。 | | `output_desc[].shape` | 输出数据的形状,以列表形式表示。 | | `output_desc[].name` | 输出数据的名称,用于标识不同的输出。 | | `output_desc[].data_path` | 输出数据文件的路径。 不配置时默认为{case_name}_{output_desc[].name}.bin | | `output_desc[].golden_path` | 输出数据的基准文件路径,用于与实际输出对比。 不配置时默认为{case_name}_golden_{output_desc[].name}.bin | | `output_desc[].err_threshold` | 输出数据的误差阈值,以列表形式表示允许的误差范围[绝对偏差值,错误率]。 | | `attr_desc` | 属性数组,包含算子的属性描述信息,当前示例为空。 | 3. 测试算子功能或性能需要配置LD_LIBRARY_PATH、DDK_PATH、NPU_HOST_LIB环境变量。 eg: ``` export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/opp/vendors/customize/op_api/lib:$LD_LIBRARY_PATH export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest/ export NPU_HOST_LIB=/usr/local/Ascend/ascend-toolkit/latest/$(arch)-$(uname -s | tr '[:upper:]' '[:lower:]')/devlib ``` 测试算子仿真需要配置环境变量,参照 [msprof op simulator配置](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/82RC1/devaids/optool/atlasopdev_16_0083.html) 4. 运行 `run_test.py -i <算子描述文件> -c <测试用例文件> -n <测试用例名称>` ,即可完成测试。 run_test.py 参数说明: - `-i` 算子描述文件,必选 - `-c` 测试用例文件,必选 - `-a` 指定生成的aclnn调用工程文件夹名称,可选,默认值为aclnn_test - `-d` 指定抓取性能数据或仿真文件的输出目录,可选,不设置时,根据具体模式生成默认目录名 - `-n` 测试用例名称,可选,默认为执行所有用例 - `-r` 测试用例运行结果文件名,可选,默认值为result.csv - `--msprof` 是否设置性能测试,可选,默认值为False, 设置后,会在 `-d` 指定的输出目录下生成msprof文件 - `--op` 抓取性能模式,可选,默认值为False,设置后会以 `msprof op` 形式抓取性能,不设置则以 `msprof --application` 形式抓取,设置后 `-d` 默认值为 `case_name_msprof_op`,不设置 `-d` 默认路径为 `case_name_msprof_application` - `--sim` 是否设置仿真模式,可选,设置时执行仿真测试,不设置时执行性能测试,设置后 `-d` 默认值为 `case_name_msprof_op_simulator`, 必须设置 `--op` 后才能设置 `--sim`, 单独设置 `--sim` 无效 - `-h` 帮助信息 精度测试示例: ``` python run_test.py -i add_custom_prototype.json -c add_custom_cases.json ``` 指定用例精度测试示例: ``` python run_test.py -i add_custom_prototype.json -c add_custom_cases.json -n Test_001 ``` msprof --application性能测试示例: ``` python run_test.py -i add_custom_prototype.json -c add_custom_cases.json --msprof ``` msprof --application性能测试指定输出目录示例: ``` python run_test.py -i add_custom_prototype.json -c add_custom_cases.json --msprof -d msprof_dir ``` msprof op性能测试示例: ``` python run_test.py -i add_custom_prototype.json -c add_custom_cases.json --msprof --op ``` msprof op simulator测试示例: ``` python run_test.py -i add_custom_prototype.json -c add_custom_cases.json --msprof --op --sim ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 待开发功能 1. 增加case生成的工具,支持单case模板生成及批量case生成 2. json文件支持相对路径,相对于入口脚本 3. json文件中的路径需要调整,指定一个统一的path,其余都用相对路径 4. README提供使用的示例或指导