基于MatmulLeakyRelu的CAmodel仿真样例说明
概述
本样例以MatmulLeakyRelu融合计算为载体,展示Ascend C程序在CAmodel仿真模式下的编译、运行、结果校验与性能数据采集流程。用户可通过msprof op simulator获取仿真性能数据,用于分析性能瓶颈,提升性能分析效率。
本样例支持的产品及CANN软件版本
| 产品 | CANN软件版本 |
|---|---|
| Ascend 950PR/Ascend 950DT | >= CANN 9.1.0 |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | >= CANN 9.0.0 |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | >= CANN 9.0.0 |
目录结构介绍
├── 08_simulator
│ ├── CMakeLists.txt // 编译工程文件
│ ├── data_utils.h // 数据读写辅助函数
│ ├── README.md // 样例说明
│ ├── scripts // 输入数据生成和结果校验脚本
│ └── simulator.asc // Ascend C样例实现和Host侧调用样例
样例描述
-
样例功能
本样例通过高阶Matmul API实现矩阵乘、Bias加法与LeakyRelu激活函数融合计算,计算公式如下:
C = A * B + Bias C = C > 0 ? C : C * 0.001其中,
LeakyRelu表示:当Temp >= 0时输出Temp,当Temp < 0时输出Temp * 0.001。样例中
M = 512,K = 128,N = 16。scripts/gen_data.py用于生成输入数据和golden数据,样例执行后将结果写入output/output.bin,再通过scripts/verify_result.py完成结果校验。 -
样例规格
表1:MatmulLeakyRelu样例规格描述 样例类型(OpType) MatmulLeakyRelu name shape data type format 样例输入 A [512, 128] float ND 样例输入 B [128, 16] float ND 样例输入 Bias [16] float ND 样例输出 C [512, 16] float ND 核函数名 matmul_leakyrelu_custom
编译运行
在本样例根目录下执行如下步骤,编译并执行程序。
-
配置环境变量
请根据当前环境上CANN开发套件包的安装方式,配置环境变量。💡 使用 msProf 工具需安装 CANN 商用/社区版,详细信息可参考msProf工具安装指南。
source ${install_path}/cann/set_env.sh说明:
${install_path}为CANN包安装目录,未指定安装目录时默认安装至/usr/local/Ascend下。 -
样例执行
在本样例目录下执行如下命令。
mkdir -p build && cd build cmake -DCMAKE_ASC_RUN_MODE=sim -DCMAKE_ASC_ARCHITECTURES=dav-2201 ..; make -j python3 ../scripts/gen_data.py msprof op simulator --soc-version=Ascend910B1 ./demo python3 ../scripts/verify_result.py ./output/output.bin ./output/golden.bin请根据实际测试的NPU硬件架构选择对应的
CMAKE_ASC_ARCHITECTURES参数。选项 说明 CMAKE_ASC_RUN_MODE指定为 sim,开启NPU仿真模式CMAKE_ASC_ARCHITECTURES指定NPU架构版本号。 dav-2201对应Atlas A2训练系列产品/Atlas A2推理系列产品和Atlas A3训练系列产品/Atlas A3推理系列产品,dav-3510对应Ascend 950PR/Ascend 950DT精度对比成功时,输出如下:
test pass!
仿真调优
基于./demo可通过msprof op simulator进行仿真性能分析,生成可视化的指令流水图等信息,指令如下:
msprof op simulator --soc-version=<soc_version> ./demo
AI处理器的型号
<soc_version>请通过如下方式获取:
- Atlas A2 训练系列产品/Atlas A2 推理系列产品
- 针对以上产品型号:在安装昇腾AI处理器的服务器执行
npu-smi info命令进行查询,获取Name信息。实际配置值为AscendName,例如Name取值为xxxyy,实际配置值为Ascendxxxyy。
- Ascend 950PR/Ascend 950DT
- Atlas A3 训练系列产品/Atlas A3 推理系列产品
- 针对以上产品型号,在安装昇腾AI处理器的服务器执行
npu-smi info -t board -i <id> -c <chip_id>命令进行查询,获取Chip Name和NPU Name信息,实际配置值为Chip Name_NPU Name。例如Chip Name取值为Ascendxxx,NPU Name取值为1234,实际配置值为Ascendxxx_1234。其中,
id为设备ID,通过npu-smi info -l命令查出的NPU ID即为设备ID;chip_id为芯片ID,通过npu-smi info -m命令查出的Chip ID即为芯片ID。
命令完成后,会在当前目录下生成以OPPROF_{timestamp}_XXX命名的文件夹,产物结构如下:
OPPROF_{timestamp}_XXX/
├── dump // 原始性能数据,用户无需关注
└── simulator
├── core*.veccore*/ // 各向量核的仿真指令流水图文件
├── trace.json // 仿真流水图和热点函数可视化呈现文件
└── visualize_data.bin // MindStudio Insight呈现文件
执行后可通过以下方式查看指令流水图:
-
MindStudio Insight:打开
visualize_data.bin或trace.json进行可视化呈现。更多详细内容可以查看msProf工具使用方式,MindStudio工具调优(msProf)快速入门。