推理环境准备

ais_bench推理工具简介

昇腾离线OM模型的推理后端是ACL(Ascend Computing Language),其底层采用C实现,后来在ACL基础上又做了一套Python接口,命名为pyACL,为了方便开发,华为工程师又基于pyacl开发出一款推理工具ais_bench,此工具支持使用命令进行快捷地推理,并测试推理模型的性能(包括吞吐率、时延),同时ais_bench工具也对外开放推理相关的API。

推理工具下载

下载aclruntime和ais_bench推理程序的whl包,aclruntime包请根据当前环境选择适配版本:

aclruntime-0.0.2-cp39-cp39-linux_x86_64.whl

aclruntime-0.0.2-cp39-cp39-linux_aarch64.whl

ais_bench-0.0.2-py3-none-any.whl

推理工具安装

执行如下命令,进行安装:

# 安装aclruntime
pip3 install aclruntime-0.0.2-cp39-cp39-linux_aarch64.whl
# 安装ais_bench推理程序
pip3 install ais_bench-0.0.2-py3-none-any.whl

分别提示如下信息则表示安装成功:

# 成功安装aclruntime
Successfully installed aclruntime-{version}
# 成功安装ais_bench推理程序
Successfully installed ais_bench-{version}

设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

命令行推理

静态OM推理

纯推理场景

该场景主要用于模型性能测试。默认情况下,构造全为0的数据送入模型推理。
示例命令:

python3 -m ais_bench --model ./inference/om/det.om --output ./output/ --outfmt BIN --loop 5

推理结果:
在这里插入图片描述

调试模式

开启debug调试模式。
示例命令:

python3 -m ais_bench --model ./inference/om/det.om --output ./output/ --debug 1

调试模式开启后会增加更多的打印信息,包括:

  • 模型的输入输出参数信息
    在这里插入图片描述

  • 详细的推理耗时信息
    在这里插入图片描述

  • 模型输入输出等具体操作信息

文件输入场景

示例命令:

python3 -m ais_bench --model ./inference/om/det.om --input ./inference/image.npy

推理结果:
在这里插入图片描述

文件夹输入场景

使用–input参数指定模型输入文件所在目录,多个目录之间通过“,”进行分隔。
本场景会根据文件输入size和模型实际输入size进行组Batch。
示例命令:

python3 -m ais_bench --model ./inference/om/det.om --input ./inference/input/

推理结果:
在这里插入图片描述

特殊说明:
模型输入需要与传入文件夹的个数一致。
例如,bert模型有三个输入,则必须传入3个文件夹,且三个文件夹分别对应模型的三个输入,顺序要对应。 模型输入参数的信息可以通过开启调试模式查看,bert模型的三个输入依次为input_ids、 input_mask、 segment_ids,所以依次传入三个文件夹:

  • 第一个文件夹“./data/SQuAD1.1/input_ids",对应模型第一个参数"input_ids"的输入
  • 第二个文件夹"./data/SQuAD1.1/input_mask",对应模型第二个参数"input_mask"的输入
  • 第三个文件夹"./data/SQuAD1.1/segment_ids",对应模型第三个参数"segment_ids"的输入
python3 -m ais_bench --model ./save/model/BERT_Base_SQuAD_BatchSize_1.om --input ./data/SQuAD1.1/input_ids,./data/SQuAD1.1/input_mask,./data/SQuAD1.1/segment_ids

多Device场景

多Device场景下,可以同时指定多个Device进行推理测试。
示例命令:

python3 -m ais_bench --model ./inference/om/det.om --input ./inference/input/ --device 1,2

推理结果:
在这里插入图片描述

输出结果依次展示每个Device的推理测试结果,其中结果最后展示包括throughput(吞吐率)、start_time(测试启动时间)、end_time(测试结束时间)以及summary throughput(吞吐率汇总)。

动态BatchSize OM推理

以档位1 2 4 8档为例,设置档位为2,本程序将获取实际模型输入组Batch,每2个输入为一组,进行组Batch。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_batch_size_det.om --input ./inference/input/ --output ./inference/output/ --dymBatch 2

推理结果:
在这里插入图片描述

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_17-11_11_48
        ├── image_0.bin
    └── 2025_03_17-11_11_48_summary.json

动态分辨率 OM推理

以档位224,224;448,448档为例,设置档位为224,224,本程序将获取实际模型输入组Batch。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_image_size_det.om --input ./inference/input/ --output ./inference/output/ --dymHW 224,224

推理结果:
在这里插入图片描述

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_17-11_47_25
        ├── image_0.bin
    └── 2025_03_17-11_47_25_summary.json

动态维度 OM推理

固定维度模式

以设置档位1,3,224,224为例,本程序将获取实际模型输入组Batch。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_dims_det.om --input ./inference/input/ --output ./inference/output/ --dymDims x:1,3,224,224

推理结果:
在这里插入图片描述

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_17-11_53_04
        ├── image_0.bin
    └── 2025_03_17-11_53_04_summary.json            

自动设置维度模式

动态维度模型输入数据的Shape可能是不固定的,比如一个输入文件Shape为1,3,224,224,另一个输入文件Shape为 1,3,448,448。若两个文件同时推理,则需要设置两次动态Shape参数,当前不支持该操作。针对该场景,增加动态Dims模式,可以根据输入文件的Shape信息,自动设置模型的Shape参数。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_dims_det.om --input ./inference/input/ --output ./inference/output/ --auto_set_dymdims_mode 1

推理结果:
在这里插入图片描述

输入文件:

# 输入的input文件夹内容如下
ls ./inference/input/
image_1_224_224.npy  image_1_448_448.npy

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_18-23_54_55
        ├── image_1_224_224_0.bin
        ├── image_1_448_448_0.bin
    └── 2025_03_18-23_54_55_summary.json

动态shape OM推理

固定shape模式

以ATC设置[18,3,224448,224~448],设置档位1,3,256,256为例,本程序将获取实际模型输入组Batch。
动态Shape的输出大小通常为0,建议通过–outputSize参数设置对应输出的内存大小。

示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_shape_det_linux_aarch64.om --input ./inference/image.npy --output ./inference/output/ --dymShape x:1,3,256,256 --outputSize 10000

推理结果:
在这里插入图片描述

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_19-00_12_07
        ├── image_0.bin
    └── 2025_03_19-00_12_07_summary.json            

自动设置Shape模式

动态Shape模型输入数据的Shape可能是不固定的,比如输入文件Shape分别为1,3,224,224;1,3,256,256;1,3,448,448。若三个文件同时推理,则需要设置三次动态Shape参数,当前不支持该操作。针对该场景,增加动态Shape模式,可以根据输入文件的Shape信息,自动设置模型的Shape参数。

示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_shape_det_linux_aarch64.om --auto_set_dymshape_mode 1  --input ./inference/input/ --output ./inference/output/ --outputSize 10000

推理结果:
在这里插入图片描述

输入文件:

# 输入的input文件夹内容如下
ls ./inference/input/
image_1_224_224.npy  image_1_256_256.npy  image_1_448_448.npy

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_19-00_21_55
        ├── image_1_224_224_0.bin
        ├── image_1_256_256_0.bin
        ├── image_1_448_448_0.bin
    └── 2025_03_19-00_21_55_summary.json

注意:该场景下的输入文件必须为npy格式,如果是bin文件将获取不到真实的Shape信息。

profiler或dump场景

–profiler参数和–dump参数,必须要增加–output参数,指示输出路径。

–profiler和–dump可以分别使用,但不能同时启用。

python3 -m ais_bench  --model ./inference/om/det.om --output ./inference/output/ --dump 1
python3 -m ais_bench  --model ./inference/om/det.om --output ./inference/output/ --profiler 1

常见问题

未设置环境变量

每次使用离线推理前务必先设置环境变量:
source /usr/local/Ascend/ascend-toolkit/set_env.sh

实际输入HW和OM模型不一致

报错信息:
在这里插入图片描述

错误原因:
det.om模型的输入input_shape=x:1,3,224,224;而image.npy的输入为:1,3,256,256。

实际输入Dims和OM模型不一致

报错信息:
在这里插入图片描述

错误原因:
dynamic_dims_det.om模型的输入dynamic_dims=“1,224,224;8,448,448”;而实际的输入为:1,3,224,224;1,3,448,448。

动态OM模型未设置动态参数

报错信息:
在这里插入图片描述

错误原因:
使用动态OM模型(包括动态BatchSize、动态分辨率、动态维度、动态shape)推理,但并未设置相关的动态参数。

CANN包版本老旧

报错信息:
在这里插入图片描述

错误原因:
CANN包版本老旧,参考“环境准备->更新CANN包”章节更换CANN版本。

API推理

请参考ais_bench interface python API使用指南:
https://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/API_GUIDE.md

参考链接

  • ONNX离线推理流程:
    https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/ACL_PyTorch/docs

  • 性能优化案例:
    https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/ACL_PyTorch/docs/05.%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96.md

  • ais_bench推理工具使用指南:
    https://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/README.md

  • ATC 工具使用指南:
    https://www.hiascend.com/doc_center/source/zh/canncommercial/601/inferapplicationdev/atctool/CANN%206.0.1%20ATC%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97%2001.pdf
    ps://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/README.md

  • ATC 工具使用指南:
    https://www.hiascend.com/doc_center/source/zh/canncommercial/601/inferapplicationdev/atctool/CANN%206.0.1%20ATC%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97%2001.pdf

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐