跳转至

6. IPU 性能分析

1. IPU 性能分析

1.1 Offline模型信息查看

Offline模型信息查看工具:SGS_IPU_Toolchain/DumpDebug/show_img_info.py。

(1) 工具使用命令

python3 show_img_info.py \
-m deploy_fixed.sim_sgsimg.img \
--soc_version chip型号

(2) 必选参数

-m, --model: 离线模型的路径

--soc_version: chip型号

使用后将显示如下信息:

说明

  • Offline IMG Version: 所用数据集生成该离线模型时用的SDK版本信息。

  • Offline Model Size: 该离线模型的大小,单位是byte。

  • Offline Model Max Batch Numer: 该离线模型的最大batch数。(Compiler工具-b,--batch参数)

  • Offline Model Suggested Batch: n_buf模型内可参考的batch数,实际使用时可设置为小于等于Max Batch Numer的任意batch数。(Compiler工具--batch_mode参数)

  • Offline Model Supported Batch:one_buf模型内可使用的batch数,只能在这些batch数中进行选择。(Compiler工具--batch_mode参数)

  • Offline Model Variable Buffer Size: 该离线模型的Variable Buffer大小,单位是byte。

  • Offline_Model:

    • Input

      name: 模型输入Tensor名称。

      index: 模型输入Tensor索引。

      dtype: 模型输入Tensor的数据类型,uint8/allint16

      layouts: 模型输入Tensor的数据排布,NCHW/NHWC

      shape: 模型输入Tensor的shape信息。

      training_input_formats:网络训练时的图片格式信息(input_configtraining_input_formats参数)

      input_formats:网络模型在SigmaStar芯片上运行的图片输入格式(input_configinput_formats参数)

      input_width_alignment:数据作为网络输入时Width方向对齐的数量(input_configinput_width_alignment参数)

      input_height_alignment:数据作为网络输入时Height方向对齐的数量(input_configinput_height_alignment参数)

      batch:该离线模型的batch数

      batch_mode:模型的batch模式,n_buf/one_buf

    • Output

      name:模型输出Tensor名称。

      index:模型输出Tensor索引

      dtype:模型输出Tensor的数据类型,uint8/allint16

      shape:模型输出Tensor的shape信息。

      batch:该离线模型的batch数

      batch_mode:模型的batch模式,n_buf/one_buf


1.2 IPU 性能查看

Linux SDK-alkaid已提供sdk/verify/release_feature/source/dla/dla_dla_show_img_info的app。

板端执行prog_dla_dla_show_img_info这个可执行文件,可以通过打印查看模型的性能数据。

说明

  • Invoke Time: 板端Invoke API耗时。板端Invoke API耗时包含:CPU驱动IPU工作耗时,IPU Time,模型输出数据同步DRAM耗时等。

  • IPU Time: IPU硬件耗时。

  • BandWidth: 模型运行一次访问DRAM的数据量。

  • Variable size: 模型运行时需要申请的运行内存。多个模型可以共享该内存,因此需要选用多个模型中最大的Variable size

  • work_mode: 模型单核/双核模式信息。

  • Batch mode: 模型Batch模式信息。

  • Setting batch: 转换离线模型时设置的batch值。

  • Suggest batch: 离线模型内部包含的batch值。


1.3 IPU Log性能分析

IPU Log性能分析工具位置:SGS_IPU_Toolchain/Scripts/example/performance_timeline.py ,将模型运行时生成的IPU Log 传入解析脚本,会在当前目录下生成一个json格式文件,打开Google Chrome浏览器,敲入chrome://tracing,将生成的json文件拖入浏览器即可。

1.3.1 运行offline模型,生成IPU Log。

Linux SDK-alkaid已提供sdk/verify/release_feature/source/dla/dla_dla_show_img_info的app。

在板端执行prog_dla_dla_show_img_info这个可执行文件,生成ipu_log,ipu_log包括以_core0.bin/_core1.bin/_corectrl0.bin为结尾的二进制文件。

./prog_dla_dla_show_img_info \
-m deploy_fixed.sim_sgsimg.img \
--ipu_log logdir
参数解释如下:

-m, --model : 离线模型的路径

--ipu_log : 生成ipu log的保存目录

注意

  • IPU Log的buf大小如果不够,在串口或者dmesg会有如下图红框的报错,此时生成的IPU Log是不完整的,需要增大--ipu_log_size的参数重新生成IPU Log。

  • 生成IPU Log期间打印的Invoke Time / IPU Time / BandWidth等信息不可信,请收集关闭生成IPU Log期间的打印作为模型的性能信息。


1.3.2 如何使用IPU log生成json 文件

python3 ~/SGS_IPU_Toolchain/Scripts/example/performance_timeline.py \
-c0 log_core0.bin\
-c1 log_core1.bin \
-cc log_corectrl0.bin \
-f 900 \
-v muffin

参数解释如下:

-c0, --core0 : core0 ipu log 文件的路径 (单核只需 core0 ipu log)

-c1, --core1 : core1 ipu log 文件路径

-cc, --corectrl : corectrl ipu log 文件路径 (可选)

-f, --frequency : ipu clk freq (默认为800)

-v, --ipu_version : ipu chip version (如:muffin)

运行结束后,会在运行目录下生成log_ctrl0.json文件,将生成的json文件拖入Google Chrome浏览器chrome://tracing即可显示每层的性能耗时占比,其中各指标术语解释如下:

指标术语

  • start:该层开始时间

  • wall duration:该层耗时

  • total_cycle:该层cycle数,与“wall duration”可以换算,wall duration = total_cycle/freq

  • conv_cycle_percent:该层conv运行时间占该层运行时间百分比

  • vector_cycle_percent:该层vector运行时间占该层运行时间百分比

  • dma_load_cycle_percent:该层dma load运行时间占该层运行时间百分比

  • dma_store_cycle_percent:该层dma store运行时间占该层运行时间百分比

  • conv/vertor/dma_load/dma_store指令可以并行执行,所以百分比相加不是100%


1.3.3 如何使用统计op耗时工具

python3 ~/SGS_IPU_Toolchain/Scripts/DumpDebug/get_op_time_cost.py \
-m /path/to/fixed.sim \
--ipu_log_file /path/to/log.json

参数解释如下:

-m:传入fixed.sim模型。

ipu_log_file:传入1.3.2节生成的json文件。

mode:支持 each 和 total 两种模式,默认是total。

total是打印op type的耗时占比,运行结束后,屏幕上会按每类op耗时占比从高到底进行打印。示例onnx_yolov8s的显示如下:

CONV_2D                      80.743%
SOFTMAX                      8.033%
CONCATENATION                5.006%
TRANSPOSE                    2.304%
Fix2Float                    1.121%
LOGISTIC                     0.755%
RESIZE_NEAREST_NEIGHBOR      0.739%
MUL                          0.536%
MAX_POOL_2D                  0.405%
ADD                          0.321%
STRIDED_SLICE                0.022%
SUB                          0.013%

each是按照fixed模型op index打印每个op的耗时占比,示例onnx_yolov8s的显示如下:

0       CONV_2D                      7.880%
1       CONV_2D                      0.000%
2       CONV_2D                      0.000%
3       CONV_2D                      2.976%
4       CONV_2D                      0.000%
5       CONCATENATION                1.214%
6       CONV_2D                      4.951%
7       CONV_2D                      0.000%
8       CONV_2D                      0.000%
9       CONV_2D                      1.132%
10      CONV_2D                      1.132%
11      CONV_2D                      1.128%
12      CONV_2D                      1.132%
13      CONCATENATION                0.577%
14      CONV_2D                      1.283%
15      CONV_2D                      2.706%
16      CONV_2D                      0.542%
17      CONV_2D                      1.187%
18      CONV_2D                      1.189%
19      CONV_2D                      1.186%
20      CONV_2D                      1.187%
21      CONCATENATION                0.141%
22      CONV_2D                      1.153%
23      CONV_2D                      2.470%
24      CONV_2D                      0.592%
25      CONV_2D                      1.162%
26      CONV_2D                      1.165%
27      CONCATENATION                0.063%
28      CONV_2D                      0.816%
29      CONV_2D                      0.309%
30      MAX_POOL_2D                  0.135%
31      MAX_POOL_2D                  0.135%
32      MAX_POOL_2D                  0.135%
33      CONV_2D                      1.090%
34      RESIZE_NEAREST_NEIGHBOR      0.205%
35      CONV_2D                      2.078%
36      CONV_2D                      1.186%
37      CONV_2D                      1.187%
38      CONCATENATION                0.106%
39      CONV_2D                      0.831%
40      RESIZE_NEAREST_NEIGHBOR      0.534%
41      CONV_2D                      1.833%
42      CONV_2D                      1.129%
43      CONV_2D                      1.129%
44      CONCATENATION                0.314%
45      CONV_2D                      0.904%
46      CONV_2D                      1.362%
47      CONV_2D                      0.899%
48      CONV_2D                      1.186%
49      CONV_2D                      1.186%
50      CONCATENATION                0.105%
51      CONV_2D                      0.825%
52      CONV_2D                      1.192%
53      CONV_2D                      0.866%
54      CONV_2D                      1.159%
55      CONV_2D                      1.156%
56      CONCATENATION                0.095%
57      CONV_2D                      0.854%
58      CONV_2D                      0.602%
59      CONV_2D                      0.084%
60      CONV_2D                      0.016%
61      CONV_2D                      1.178%
62      CONV_2D                      0.300%
63      CONV_2D                      0.031%
64      CONCATENATION                0.027%
65      TRANSPOSE                    0.049%
66      CONV_2D                      1.208%
67      CONV_2D                      0.286%
68      CONV_2D                      0.046%
69      CONV_2D                      2.409%
70      CONV_2D                      1.187%
71      CONV_2D                      0.102%
72      CONCATENATION                0.089%
73      TRANSPOSE                    0.206%
74      CONV_2D                      2.249%
75      CONV_2D                      1.127%
76      CONV_2D                      0.384%
77      CONV_2D                      10.019%
78      CONV_2D                      0.000%
79      CONV_2D                      0.000%
80      CONCATENATION                0.919%
81      TRANSPOSE                    0.978%
82      CONCATENATION                1.356%
83      TRANSPOSE                    0.756%
84      SOFTMAX                      8.033%
85      TRANSPOSE                    0.316%
86      CONV_2D                      0.184%
87      STRIDED_SLICE                0.011%
88      MUL                          0.311%
89      STRIDED_SLICE                0.011%
90      ADD                          0.306%
91      ADD                          0.015%
92      SUB                          0.013%
93      MUL                          0.225%
94      LOGISTIC                     0.755%
95      Fix2Float                    1.121%

并且会在1.3.2节生成的json文件的路径下重新生成一个前缀为new_的json文件,当发现1.3.2节生成的json文件在Google Chrome浏览器chrome://tracing中显示的index和fixed模型中op的index对应不上时,将这个新生成的json拖入到浏览器中,index显示可以一致。

chrome://tracing中常用快捷键:

W: 放大

S: 缩小

A: 左移

D: 右移