0


Qualcomm® AI Engine Direct 使用手册(6)

Qualcomm® AI Engine Direct 使用手册(6)


4.1.2 HTP - QNN HTP 分析(1)

QNN HTP 分析

基本分析

用于执行的基本分析报告提供了主机和加速器上的图形推理摘要。

HTP 执行基本分析事件 图表说明了 基本 HTP 执行分析事件以及在推理过程中如何测量它们。

HTP 执行基本分析事件

请添加图片描述
详细和 Linting 分析

详细的分析报告按周期计数而不是以微秒为单位的时间提供每个操作的分析结果。 由于并行执行,没有从周期计数到微秒的直接转换方法 行动的。因此,建议使用每层周期时序作为比较/测量的参考 相对性能,以了解其中哪些正在使用较低/较高的周期来完成执行。

特定于 HTP 的 linting 分析报告提供主线程上的每个操作周期计数以及后台 执行信息。在主线程上,每个操作都必须等待一些周期,因为执行 开始执行自己之前的最后一个操作。此等待期可归因于多种因素,例如 调度或等待某些后台 HVX 或 DMA 活动完成。在 linting 分析报告中,每个 op 有一个与之关联的周期计数,表示实际执行该 op 所花费的周期数 主线程。还有一个与每个操作关联的“等待”条目,对应于等待时间 前面提到过。除了描述主线程活动的这两个周期计数之外,每个操作还有两个 更多条目来描述后台活动。这两个条目中的第一个是“重叠”条目,表示 当操作在主线程上执行时,至少一个后台操作所花费的周期数。下一个, 每个操作都有一个“重叠(等待)”条目,该条目类似于“等待”条目,但周期 本条目中报告的对应于“等待”期(即,在至少一个后台操作上花费的周期,而 主线程正在等待)。不考虑主线程操作正在等待的后台操作 作为背景活动,因此不会对重叠条目报告的计数产生影响。每一个 重叠条目后面还有几条缩进线(最多 10 条),指示操作的名称 这有助于各自的重叠周期计数。最后,每个操作还有一个“资源”条目列表 该操作使用的不同资源。 可以通过在以下情况下指定 --profiling_level=backend 来启用特定于 HTP 的 linting 分析级别: 运行 qnn-net-run 以便使用后端特定配置文件中指定的分析级别。请 请参阅 qnn-net-run 的文档以了解有关 libQnnHtpNetRunExtensions.so 和特定于后端的更多信息 配置文件。对于 linting 分析,后端特定的配置文件应指定以下选项 与任何其他所需的选项:

  1. {"graphs":{...},"devices":[{..."profiling_level":"linting",..."cores":[{...}]}]}

请注意,上述配置结构将从 SDK 2.20 版本开始弃用,支持的新配置如下所示:

  1. {"graphs":[{....}....],"devices":[{..."profiling_level":"linting",..."cores":[{...}]}]}

使用此分析级别生成的分析输出可以使用 qnn-profile-viewer 工具及其 libQnnHtpProfilingReader.so 或 libQnnChrometraceProfilingReader.so 读取器插件。 libQnnHtpProfilingReader.so reader 提供每次运行的原始输出,而 libQnnChrometraceProfilingReader.so 提供平均值 所有运行的输出。此外,还可以生成包含 chrometrace 格式的分析数据的文件 如果在使用以下命令运行 qnn-profile-viewer 工具时使用 --output 选项指定了输出文件 libQnnChrometraceProfilingReader.so 阅读器插件。

要从推理中检索 linting 信息,需要执行以下步骤:

  1. 将 $QNN_SDK_ROOT 设置为您所需的 QNN 版本
  2. 运行“源$QNN_SDK_ROOT/bin/envsetup.sh”
  3. 将需要的文件推送到设备- $QNN_SDK_ROOT/lib/aarch64-android/libQnnHtpNetRunExtensions.so- backend_extension_config.json- htp_config.json
  4. 在设备上运行推理,确保添加以下参数:“–profiling_level=backend 和 --config_file=backend_extension_config.json”
  5. 将输出日志拉取到linux
  6. 使用 qnn-profile-viewer 时,请确保指定以下参数:“–-reader $QNN_SDK_ROOT/lib/x86_64-linux-clang/libQnnHtpProfilingReader.so” backend_extension_config.json
  1. {"backend_extensions":{"shared_library_path":"./libQnnHtpNetRunExtensions.so","config_file_path":"./htp_config.json"}}

htp_config.json

  1. {"devices":[{"profiling_level":"linting"}]}

推理命令示例

  1. ./qnn-net-run --retrieve_context sample_model.bin --backend libQnnHtp.so --input_list target_raw_list.txt --config_file backend_extension_config.json --output_dir output_htp --profiling_level backend

配置文件查看器命令示例

  1. $QNN_SDK_ROOT/bin/x86_64-linux-clang/qnn-profile-viewer --reader $QNN_SDK_ROOT/lib/x86_64-linux-clang/libQnnHtpProfilingReader.so --input_log ./output/qnn-profiling-data_0.log

展示模型 1 图表展示了具有两个 每个分支在其结果用于子操作之前执行几次卷积。

展示模型1

在这里插入图片描述
该模型的 linting 分析输出如下:

  1. Execute Stats(Average):------------------------
  2. Total Inference Time:---------------------
  3. NetRun:16792 us
  4. Backend(RPC(execute) time):16242 us
  5. Backend(QNN accelerator(execute) time):15190 us
  6. Backend(Num times yield occured):0 count
  7. Backend(Time for initial VTCM acquire):0 us
  8. Backend(Time for HVX + HMX power on and acquire):0 us
  9. Backend(Accelerator(critical path execute)time(cycles)):4327266 cycles
  10. Input OpId_2(cycles):0 cycles
  11. Wait(Scheduler) time:0 cycles
  12. Overlap time:0 cycles
  13. Overlap(wait) time:0 cycles
  14. Resources:OpId_0(cycles):8036 cycles
  15. Wait(Scheduler) time:629 cycles
  16. Overlap time:4770 cycles
  17. Overlap(wait) time:565 cycles
  18. Resources:
  19. model_convStart_Conv2D:OpId_21(cycles):147075 cycles
  20. Wait(Scheduler) time:32 cycles
  21. Overlap time:85292 cycles
  22. model_sub_sub:OpId_57
  23. Output OpId_3
  24. model_add_add:OpId_58
  25. model_tf_op_layer_stride_stride:OpId_24
  26. model_convStart_Conv2D:OpId_21
  27. Overlap(wait) time:32 cycles
  28. model_convStart_Conv2D:OpId_21
  29. Resources: HVX, HMX, DMA
  30. model_tf_op_layer_stride_stride:OpId_24(cycles):146494 cycles
  31. Wait(Scheduler) time:0 cycles
  32. Overlap time:70807 cycles
  33. model_add_add:OpId_58
  34. Output OpId_3
  35. model_convStart_Conv2D:OpId_21
  36. model_tf_op_layer_stride_stride:OpId_24
  37. Overlap(wait) time:0 cycles
  38. Resources: HVX
  39. model_convLeft1_Conv2D:OpId_34(cycles):288249 cycles
  40. Wait(Scheduler) time:425 cycles
  41. Overlap time:195988 cycles
  42. Output OpId_3
  43. model_add_add:OpId_58
  44. model_tf_op_layer_stride_stride:OpId_24
  45. model_convStart_Conv2D:OpId_21
  46. Overlap(wait) time:304 cycles
  47. Output OpId_3
  48. model_add_add:OpId_58
  49. model_convStart_Conv2D:OpId_21
  50. Resources: HMX, DMA
  51. model_convRight1_Conv2D:OpId_41(cycles):220391 cycles
  52. Wait(Scheduler) time:803 cycles
  53. Overlap time:135268 cycles
  54. Output OpId_3
  55. model_add_add:OpId_58
  56. model_tf_op_layer_stride_stride:OpId_24
  57. model_convStart_Conv2D:OpId_21
  58. Overlap(wait) time:557 cycles
  59. Output OpId_3
  60. model_tf_op_layer_stride_stride:OpId_24
  61. model_convStart_Conv2D:OpId_21
  62. Resources: HMX, DMA
  63. model_convRight2_Conv2D:OpId_48(cycles):181016 cycles
  64. Wait(Scheduler) time:1090 cycles
  65. Overlap time:69323 cycles
  66. model_sub_sub:OpId_57
  67. model_convStart_Conv2D:OpId_21
  68. Output OpId_3
  69. model_add_add:OpId_58
  70. Overlap(wait) time:489 cycles
  71. model_sub_sub:OpId_57
  72. model_convStart_Conv2D:OpId_21
  73. Output OpId_3
  74. model_add_add:OpId_58
  75. Resources: HMX, DMA
  76. model_convLeft2_Conv2D:OpId_55(cycles):233736 cycles
  77. Wait(Scheduler) time:1059 cycles
  78. Overlap time:93020 cycles
  79. model_sub_sub:OpId_57
  80. model_convStart_Conv2D:OpId_21
  81. Output OpId_3
  82. model_add_add:OpId_58
  83. model_tf_op_layer_stride_stride:OpId_24
  84. Overlap(wait) time:464 cycles
  85. model_sub_sub:OpId_57
  86. model_convStart_Conv2D:OpId_21
  87. Output OpId_3
  88. model_add_add:OpId_58
  89. Resources: HMX, DMA
  90. model_sub_sub:OpId_57(cycles):2165162 cycles
  91. Wait(Scheduler) time:0 cycles
  92. Overlap time:465046 cycles
  93. model_sub_sub:OpId_57
  94. Output OpId_3
  95. model_add_add:OpId_58
  96. model_convStart_Conv2D:OpId_21
  97. model_tf_op_layer_stride_stride:OpId_24
  98. Overlap(wait) time:0 cycles
  99. Resources: HVX
  100. model_add_add:OpId_58(cycles):525971 cycles
  101. Wait(Scheduler) time:0 cycles
  102. Overlap time:481468 cycles
  103. model_tf_op_layer_stride_stride:OpId_24
  104. model_convStart_Conv2D:OpId_21
  105. Output OpId_3
  106. model_add_add:OpId_58
  107. Overlap(wait) time:0 cycles
  108. Resources: HVX
  109. Output OpId_3(cycles):407091 cycles
  110. Wait(Scheduler) time:0 cycles
  111. Overlap time:115120 cycles
  112. Overlap(wait) time:0 cycles
  113. Resources: HVX

该模型的 linting 分析 chrometrace 输出如下:

展示模型 1 Chrometrace

在这里插入图片描述
从输出中可以看出,子操作 (OpId_57) 是最重要的贡献者 占总执行时间的 50% 左右。该操作也没有显着的并行操作 执行 - 其重叠时间为 465046 个周期,约占总执行时间的 21.5% - 表明这个操作是一个很好的优化瓶颈。我们可以设计一个等效模型 如展示模型 1 优化 所示 图表合并两个分支并手动用带有权重的卷积替换子操作 设计为使其执行与子操作相同的任务。

展示模型 1 优化

在这里插入图片描述

此优化模型的 linting 分析输出如下:

  1. Execute Stats(Average):------------------------
  2. Total Inference Time:---------------------
  3. NetRun:11884 us
  4. Backend(RPC(execute) time):11525 us
  5. Backend(QNN accelerator(execute) time):10481 us
  6. Backend(Num times yield occured):0 count
  7. Backend(Time for initial VTCM acquire):0 us
  8. Backend(Time for HVX + HMX power on and acquire):0 us
  9. Backend(Accelerator(critical path execute)time(cycles)):1374349 cycles
  10. Input OpId_2(cycles):0 cycles
  11. Wait(Scheduler) time:0 cycles
  12. Overlap time:0 cycles
  13. Overlap(wait) time:0 cycles
  14. Resources:OpId_0(cycles):3500 cycles
  15. Wait(Scheduler) time:1284 cycles
  16. Overlap time:3221 cycles
  17. Overlap(wait) time:1268 cycles
  18. Resources:
  19. model_convStart_Conv2D:OpId_21(cycles):487448 cycles
  20. Wait(Scheduler) time:32 cycles
  21. Overlap time:475888 cycles
  22. Output OpId_3
  23. model_add_add:OpId_50
  24. model_tf_op_layer_stride_1_stride_1:OpId_24
  25. model_convStart_Conv2D:OpId_21
  26. Overlap(wait) time:32 cycles
  27. model_convStart_Conv2D:OpId_21
  28. Resources: HVX, HMX, DMA
  29. model_tf_op_layer_stride_1_stride_1:OpId_24(cycles):10422 cycles
  30. Wait(Scheduler) time:0 cycles
  31. Overlap time:10075 cycles
  32. model_convStart_Conv2D:OpId_21
  33. model_tf_op_layer_stride_1_stride_1:OpId_24
  34. Overlap(wait) time:0 cycles
  35. Resources: HVX
  36. model_convCombined1_Conv2D:OpId_34(cycles):337711 cycles
  37. Wait(Scheduler) time:82 cycles
  38. Overlap time:307394 cycles
  39. Output OpId_3
  40. model_tf_op_layer_stride_1_stride_1:OpId_24
  41. model_convStart_Conv2D:OpId_21
  42. Overlap(wait) time:50 cycles
  43. Output OpId_3
  44. model_convStart_Conv2D:OpId_21
  45. Resources: HMX, DMA
  46. model_convCombined2_Conv2D:OpId_41(cycles):295022 cycles
  47. Wait(Scheduler) time:1184 cycles
  48. Overlap time:286062 cycles
  49. model_add_add:OpId_50
  50. Output OpId_3
  51. model_convStart_Conv2D:OpId_21
  52. model_tf_op_layer_stride_1_stride_1:OpId_24
  53. Overlap(wait) time:1140 cycles
  54. model_add_add:OpId_50
  55. Output OpId_3
  56. model_convStart_Conv2D:OpId_21
  57. model_tf_op_layer_stride_1_stride_1:OpId_24
  58. Resources: HMX, DMA
  59. model_subConv_Conv2D:OpId_48(cycles):48720 cycles
  60. Wait(Scheduler) time:1186 cycles
  61. Overlap time:46686 cycles
  62. model_add_add:OpId_50
  63. model_tf_op_layer_stride_1_stride_1:OpId_24
  64. Output OpId_3
  65. model_convStart_Conv2D:OpId_21
  66. Overlap(wait) time:1142 cycles
  67. model_add_add:OpId_50
  68. Output OpId_3
  69. model_convStart_Conv2D:OpId_21
  70. Resources: HMX, DMA
  71. model_add_add:OpId_50(cycles):110698 cycles
  72. Wait(Scheduler) time:0 cycles
  73. Overlap time:108524 cycles
  74. model_add_add:OpId_50
  75. Output OpId_3
  76. model_convStart_Conv2D:OpId_21
  77. model_tf_op_layer_stride_1_stride_1:OpId_24
  78. Overlap(wait) time:0 cycles
  79. Resources: HVX
  80. Output OpId_3(cycles):77054 cycles
  81. Wait(Scheduler) time:0 cycles
  82. Overlap time:75438 cycles
  83. Overlap(wait) time:0 cycles
  84. Resources: HVX

本文转载自: https://blog.csdn.net/weixin_38498942/article/details/135266600
版权归原作者 weixin_38498942 所有, 如有侵权,请联系我们删除。

“Qualcomm® AI Engine Direct 使用手册(6)”的评论:

还没有评论