diff --git a/tools/infer_tool/README.md b/tools/infer_tool/README.md index 3d336c5d3190cbf62a3159eaf391d0439a051cc6..5c8865121de492b0b66d624b2c801b229ed39a03 100644 --- a/tools/infer_tool/README.md +++ b/tools/infer_tool/README.md @@ -9,7 +9,7 @@ ### 环境和依赖 -- 目前ais_bench推理工具支持trtexec和aclruntime推理后端,使用本工具时确保安装这两个后端,且这两个后端可以正常运行。 +- 目前ais_bench推理工具支持trtexec和aclruntime推理后端,使用时确保对应后端可以正常运行。 - 安装Python3、Python包模块numpy、tqdm、wheel。 ### 工具安装方式 @@ -25,7 +25,7 @@ ais_bench推理工具的安装方式包括:一键式编译安装和源代码 在安装环境执行如下命令安装ais_bench推理程序包: ```bash - pip3 install -v 'git+https://gitee.com/aisbench/inference.git#egg=ais_bench&subdirectory=tools/infer_tool/' + pip3 install -v 'git+https://gitee.com/aisbench/inference.git#egg=ais_bench&subdirectory=tools/infer_tool/' ``` 说明:若为覆盖安装,请增加“--force-reinstall”参数强制安装,例如: @@ -40,8 +40,6 @@ ais_bench推理工具的安装方式包括:一键式编译安装和源代码 Successfully installed ais_bench-{version} ``` - - #### 源代码编译安装 1. 从代码开源仓[Gitee](git+https://gitee.com/aisbench/inference.git#egg=ais_bench&subdirectory=tools/infer_tool/)克隆/下载工具压缩包“inference-master.zip”。 @@ -89,9 +87,7 @@ ais_bench推理工具的安装方式包括:一键式编译安装和源代码 ## 使用方法(以接入aclruntime后端为例) -### 工具介绍 -ais_bench推理工具的使用方法主要通过命令行使用。 -#### 使用入口 +### 使用入口 ais_bench推理工具可以通过ais_bench可执行文件方式启动模型测试。启动方式如下: @@ -99,18 +95,18 @@ ais_bench推理工具可以通过ais_bench可执行文件方式启动模型测 python3 -m ais_bench --model ``` -#### 参数说明 +### 参数说明 ais_bench推理工具可以通过配置不同的参数,来应对各种测试场景以及实现其他辅助功能。 参数按照功能类别分为**基础功能参数**和**高级功能参数**: - **基础功能参数**:主要包括输入输入文件及格式、debug、推理次数、预热次数、指定运行设备以及帮助信息等。 -- **高级功能参数**:主要包括动态分档场景和动态Shape场景的ais_bench推理测试参数以及profiler或dump数据获取等。 +- **高级功能参数**:主要包括动态分档场景和动态Shape场景的ais_bench推理测试参数等。 **说明**:以下参数中,参数和取值之间可以用“ ”空格分隔也可以用“=”等号分隔。例如:--debug 1或--debug=0。 -##### 基础功能参数 +#### 基础功能参数 | 参数名 | 说明 | 是否必选 | | --------------------- | ------------------------------------------------------------ | -------- | @@ -123,13 +119,13 @@ ais_bench推理工具可以通过配置不同的参数,来应对各种测试 | --debug | 调试开关。可打印model的desc信息和其他详细执行信息。1或true(开启)、0或false(关闭),默认关闭。 | 否 | | --run_mode | 推理执行前的数据加载方式:可取值:array(将数据转换成host侧的ndarray,再调用推理接口推理),files(将文件直接加载进device内,再调用推理接口推理),tensor(将数据加载进device内,再调用推理接口推理),full(将数据转换成host侧的ndarray,再将ndarray格式数据加载进device内,再调用推理接口推理),默认为array。 | 否 | | --display_all_summary | 是否显示所有的汇总信息,包含h2d和d2h信息。1或true(开启)、0或false(关闭),默认关闭。 | 否 | -| --loop | 推理次数。默认值为1,取值范围为大于0的正整数。 profiler参数配置为true时,推荐配置为1。 | 否 | +| --loop | 推理次数。默认值为1,取值范围为大于0的正整数。 | 否 | | --warmup_count | 推理预热次数。默认值为1,取值范围为大于等于0的整数。配置为0则表示不预热。 | 否 | | --device | 指定运行设备。根据设备实际的Device ID指定,默认值为0。多Device场景下,可以同时指定多个Device进行推理测试,例如:--device 0,1,2,3。 | 否 | | --divide_input | 输入数据集切分开关,1或true(开启)、0或false(关闭),默认关闭。多Device场景下,打开时,工具会将数据集平分给这些Device进行推理。| 否 | | --help | 工具使用帮助信息。 | 否 | -##### 高级功能参数 +#### 高级功能参数 | 参数名 | 说明 | 是否必选 | | ------------------------ | ------------------------------------------------------------ | -------- | @@ -143,8 +139,6 @@ ais_bench推理工具可以通过配置不同的参数,来应对各种测试 | --auto_set_dymshape_mode | 自动设置动态Shape模式。取值为:1或true(开启)、0或false(关闭),默认关闭。
针对动态Shape模型,根据输入的文件的信息,自动设置Shape参数,注意输入数据只能为npy文件,因为bin文件不能读取Shape信息。
配合input参数使用,单独使用无效。
例如:--input 1.npy --auto_set_dymshape_mode 1 | 否 | | --batchsize | 模型batchsize。不输入该值将自动推导。当前推理模块根据模型输入和文件输出自动进行组Batch。参数传递的batchszie有且只用于结果吞吐率计算。自动推导逻辑为尝试获取模型的batchsize时,首先获取第一个参数的最高维作为batchsize; 如果是动态Batch的话,更新为动态Batch的值;如果是动态dims和动态Shape更新为设置的第一个参数的最高维。如果自动推导逻辑不满足要求,请务必传入准确的batchsize值,以计算出正确的吞吐率。 | 否 | | --output_batchsize_axis | 输出tensor的batchsize轴,默认值为0。输出结果保存文件时,根据哪个轴进行切割推理结果,比如batchsize为2,表示2个输入文件组batch进行推理,那输出结果的batch维度是在哪个轴。默认为0轴,按照0轴进行切割为2份,但是部分模型的输出batch为1轴,所以要设置该值为1。 | 否 | -| --backend|指定trtexec开关。需要指定为trtexec。配合--perf参数使用,单独使用无效。|否| -| --perf|调用trtexec开关。1或true(开启)、0或false(关闭),默认关闭。配合--backend参数使用,单独使用无效。|否| | --pipeline |指定pipeline开关,用于开启多线程推理功能。1或true(开启)、0或false(关闭),默认关闭。|否| | --threads |指定threads开关,用于设置多计算线程推理时计算线程的数量。默认值为1,取值范围为大于0的正整数。需要配合--pipeline 1参数使用,单独使用无效。|否| @@ -323,50 +317,6 @@ python3 -m ais_bench --model --outputSiz python3 -m ais_bench --model --outputSize 100000 --dymShape_range actual_input_1:1,3,224,224~226 ``` - -#### trtexec场景 - -ais_bench支持ONNX模型推理(集成trtexec),trtexec为NVIDIA TensorRT自带工具,作为推理后端。用户使用ais_bench拉起trtexec工具进行推理性能测试,测试过程中实时输出trtexec日志,打印在控制台,推理性能测试完成后,将性能数据输出在控制台。 -##### 前置条件 -推理性能测试环境需要配置有GPU,安装 CUDA及TensorRT,并且trtexec可以通过命令行调用到,安装方式可参考[TensorRT](https://github.com/NVIDIA/TensorRT)。 - -示例命令如下: - -```bash -python3 -m ais_bench --model --backend trtexec --perf 1 -``` - -输出结果推理测试结果,示例如下: - -```bash -[INFO] [05/27/2023-12:05:31] [I] === Performance summary === -[INFO] [05/27/2023-12:05:31] [I] Throughput: 120.699 qps -[INFO] [05/27/2023-12:05:31] [I] Latency: min = 9.11414 ms, max = 11.7442 ms, mean = 9.81005 ms, median = 9.76404 ms, percentile(90%) = 10.1075 ms, percentile(95%) = 10.1624 ms, percentile(99%) = 11.4742 ms -[INFO] [05/27/2023-12:05:31] [I] Enqueue Time: min = 0.516296 ms, max = 0.598633 ms, mean = 0.531443 ms, median = 0.5271 ms, percentile(90%) = 0.546875 ms, percentile(95%) = 0.564575 ms, percentile(99%) = 0.580566 ms -[INFO] [05/27/2023-12:05:31] [I] H2D Latency: min = 1.55066 ms, max = 1.57336 ms, mean = 1.55492 ms, median = 1.55444 ms, percentile(90%) = 1.55664 ms, percentile(95%) = 1.55835 ms, percentile(99%) = 1.56458 ms -[INFO] [05/27/2023-12:05:31] [I] GPU Compute Time: min = 7.54407 ms, max = 10.1723 ms, mean = 8.23978 ms, median = 8.19409 ms, percentile(90%) = 8.5354 ms, percentile(95%) = 8.59131 ms, percentile(99%) = 9.90002 ms -[INFO] [05/27/2023-12:05:31] [I] D2H Latency: min = 0.0130615 ms, max = 0.0170898 ms, mean = 0.015342 ms, median = 0.0153809 ms, percentile(90%) = 0.0162354 ms, percentile(95%) = 0.0163574 ms, percentile(99%) = 0.0168457 ms -[INFO] [05/27/2023-12:05:31] [I] Total Host Walltime: 3.02405 s -[INFO] [05/27/2023-12:05:31] [I] Total GPU Compute Time: 3.00752 s -``` - -**字段说明** - -| 字段 | 说明 | -| --------------------- | ------------------------------------------------------------ | -| Throughput | 吞吐率。 | -| Latency | H2D延迟、GPU计算时间和D2H延迟的总和。这是推断单个执行的延迟。 | -| min | 推理执行时间最小值。 | -| max | 推理执行时间最大值。 | -| mean | 推理执行时间平均值。 | -| median | 推理执行时间取中位数。 | -| percentile(99%) | 推理执行时间中的百分位数。 | -| H2D Latency | 单个执行的输入张量的主机到设备数据传输的延迟。 | -| GPU Compute Time | 为执行CUDA内核的GPU延迟。 | -| D2H Latency | 单个执行的输出张量的设备到主机数据传输的延迟。 | -| Total Host Walltime | 从第一个执行(预热后)入队到最后一个执行完成的主机时间。 | -| Total GPU Compute Time| 所有执行的GPU计算时间的总和。 | - #### 输出结果文件保存场景 默认情况下,ais_bench推理工具执行后不保存输出结果数据文件,配置相关参数后,可生成的结果数据如下: @@ -375,13 +325,11 @@ python3 -m ais_bench --model --backend trtexec --p | ---------------------------------------- | ------------------------------------------------------------ | | {文件名}.bin、{文件名}.npy或{文件名}.txt | 模型推理输出结果文件。
文件命名格式:名称_输出序号.后缀。不指定input时(纯推理),名称固定为“pure_infer_data”;指定input时,名称以第一个输入的第一个名称命名;输出的序号从0开始按输出先后顺序排列;文件名后缀由--outfmt参数控制。
默认情况下,会在--output参数指定的目录下创建“日期+时间”的目录,并将结果文件保存在该目录下;当指定了--output_dirname时,结果文件将直接保存在--output_dirname参数指定的目录下。
指定--output_dirname参数时,多次执行工具推理会导致结果文件因同名而覆盖。 | | xx_summary.json | 工具输出模型性能结果数据。默认情况下,“xx”以“日期+时间”命名;当指定了--output_dirname时,“xx”以--output_dirname指定的目录名称命名。
指定--output_dirname参数时,多次执行工具推理会导致结果文件因同名而覆盖。 | -| dump | dump数据文件目录。使用--dump开启dump时,在--output参数指定的目录下创建dump目录,保存dump数据文件。 | -| profiler | Profiler采集性能数据文件目录。使用--profiler开启性能数据采集时,在--output参数指定的目录下创建profiler目录,保存性能数据文件。 | - 仅设置--output参数。示例命令及结果如下: ```bash - python3 -m ais_bench --model ./pth_resnet50_bs1.om --output ./result + python3 -m ais_bench --model --output ./result ``` ```bash @@ -400,7 +348,7 @@ python3 -m ais_bench --model --backend trtexec --p ``` ```bash - python3 -m ais_bench --model ./pth_resnet50_bs1.om --input ./data --output ./result + python3 -m ais_bench --model --input ./data --output ./result ``` ```bash @@ -432,45 +380,18 @@ python3 -m ais_bench --model --backend trtexec --p `-- subdir_summary.json ``` -- 设置--dump参数。示例命令及结果如下: - - ```bash - python3 -m ais_bench --model --output ./result --dump 1 - ``` - - ```bash - result - |-- 2022_12_17-07_37_18 - │   `-- pure_infer_data_0.bin - |-- dump - `-- 2022_12_17-07_37_18_summary.json - ``` - -- 设置--profiler参数。示例命令及结果如下: - - ```bash - python3 -m ais_bench --model --output ./result --profiler 1 - ``` - - ```bash - result - |-- 2022_12_17-07_56_10 - │   `-- pure_infer_data_0.bin - |-- profiler - │   `-- PROF_000001_20221217075609326_GLKQJOGROQGOLIIB - `-- 2022_12_17-07_56_10_summary.json - ``` - #### 多线程推理场景 ```bash - python3 -m ais_bench --model --pipeline 1 +python3 -m ais_bench --model --pipeline 1 ``` + 在单线程推理的命令行基础上加上--pipeline 1即可开启多线程推理模式,实现计算-搬运的并行,加快端到端推理速度。 ```bash - python3 -m ais_bench --model --pipeline 1 --threads 2 +python3 -m ais_bench --model --pipeline 1 --threads 2 ``` + 在多线程推理的命令行基础上加上--threads {$number of threads},即可开启多计算线程推理模式,实现计算-计算的并行,提高推理吞吐量。 ### 输出结果 @@ -512,3 +433,58 @@ ais_bench推理工具执行后,打屏输出结果示例如下: | D2H_latency (ms) | Device to Host的内存拷贝耗时。单位为ms。 | | throughput | 吞吐率。吞吐率计算公式:1000 *batchsize/npu_compute_time.mean | | batchsize | 批大小。本工具不一定能准确识别当前样本的batchsize,建议通过--batchsize参数进行设置。 | + +## 使用方法(以接入trtexec后端为例) + +ais_bench支持ONNX模型推理(集成trtexec),trtexec为NVIDIA TensorRT自带工具,作为推理后端。用户使用ais_bench拉起trtexec工具进行推理性能测试,测试过程中实时输出trtexec日志,打印在控制台,推理性能测试完成后,将性能数据输出在控制台。 + +### 前置条件 + +推理性能测试环境需要配置有GPU,安装 CUDA及TensorRT,并且trtexec可以通过命令行调用到,安装方式可参考[TensorRT](https://github.com/NVIDIA/TensorRT)。 + +### 使用入口 + +```bash +python3 -m ais_bench --model --backend trtexec --perf 1 +``` + +### 参数说明 + +| 参数名 | 说明 | 是否必选 | +| --------- | ------------------------------------------------------------ | -------- | +| --model | 需要进行推理的离线模型文件。 | 是 | +| --backend | 指定trtexec开关。需要指定为trtexec。配合--perf参数使用,单独使用无效。 | 是 | +| --perf | 调用trtexec开关。1或true(开启)、0或false(关闭),默认关闭。配合--backend参数使用,单独使用无效。 | 否 | + +### 输出结果 + +输出结果推理测试结果,示例如下: + +```bash +[INFO] [05/27/2023-12:05:31] [I] === Performance summary === +[INFO] [05/27/2023-12:05:31] [I] Throughput: 120.699 qps +[INFO] [05/27/2023-12:05:31] [I] Latency: min = 9.11414 ms, max = 11.7442 ms, mean = 9.81005 ms, median = 9.76404 ms, percentile(90%) = 10.1075 ms, percentile(95%) = 10.1624 ms, percentile(99%) = 11.4742 ms +[INFO] [05/27/2023-12:05:31] [I] Enqueue Time: min = 0.516296 ms, max = 0.598633 ms, mean = 0.531443 ms, median = 0.5271 ms, percentile(90%) = 0.546875 ms, percentile(95%) = 0.564575 ms, percentile(99%) = 0.580566 ms +[INFO] [05/27/2023-12:05:31] [I] H2D Latency: min = 1.55066 ms, max = 1.57336 ms, mean = 1.55492 ms, median = 1.55444 ms, percentile(90%) = 1.55664 ms, percentile(95%) = 1.55835 ms, percentile(99%) = 1.56458 ms +[INFO] [05/27/2023-12:05:31] [I] GPU Compute Time: min = 7.54407 ms, max = 10.1723 ms, mean = 8.23978 ms, median = 8.19409 ms, percentile(90%) = 8.5354 ms, percentile(95%) = 8.59131 ms, percentile(99%) = 9.90002 ms +[INFO] [05/27/2023-12:05:31] [I] D2H Latency: min = 0.0130615 ms, max = 0.0170898 ms, mean = 0.015342 ms, median = 0.0153809 ms, percentile(90%) = 0.0162354 ms, percentile(95%) = 0.0163574 ms, percentile(99%) = 0.0168457 ms +[INFO] [05/27/2023-12:05:31] [I] Total Host Walltime: 3.02405 s +[INFO] [05/27/2023-12:05:31] [I] Total GPU Compute Time: 3.00752 s +``` + +**字段说明** + +| 字段 | 说明 | +| --------------------- | ------------------------------------------------------------ | +| Throughput | 吞吐率。 | +| Latency | H2D延迟、GPU计算时间和D2H延迟的总和。这是推断单个执行的延迟。 | +| min | 推理执行时间最小值。 | +| max | 推理执行时间最大值。 | +| mean | 推理执行时间平均值。 | +| median | 推理执行时间取中位数。 | +| percentile(99%) | 推理执行时间中的百分位数。 | +| H2D Latency | 单个执行的输入张量的主机到设备数据传输的延迟。 | +| GPU Compute Time | 为执行CUDA内核的GPU延迟。 | +| D2H Latency | 单个执行的输出张量的设备到主机数据传输的延迟。 | +| Total Host Walltime | 从第一个执行(预热后)入队到最后一个执行完成的主机时间。 | +| Total GPU Compute Time| 所有执行的GPU计算时间的总和。 |