最佳做法

移动设备和嵌入式设备的计算资源有限,因此提高应用的资源效率非常重要。我们整理了一份最佳做法和策略的清单,可用于改善 Paddle Lite 模型的性能。

基于任务选择最佳模型

您需要根据任务在模型复杂性和大小之间进行权衡。

  • 如果您的任务需要高准确率,那么您可能需要一个大而复杂的模型。

  • 对于准确率要求较低的任务,则最好使用较小的模型,因为它们不仅占用的磁盘空间和内存更少,而且通常速度更快且更节能。

基于模型进行性能分析

在选择了合适的候选模型后,最好对模型进行性能分析和基准测试。Paddle Lite 基准测试工具 Profiler 工具有内置的性能分析器,可展示每个算子的性能分析数据。这能帮助理解性能瓶颈,以及哪些算子占据了大部分计算时间。

通过 Profiler 工具,根据每个算子的性能分析数据,可按照以下三个方面完成模型性能优化:

  • 基于模型和算法思想的性能优化

  • 基于硬件特点的性能优化

  • 基于特定场景/特定模型的性能优化

基于模型和算法思想的性能优化

首先,根据需求选择最小的模型进行推理,因为这些模型通常更快、更节能。Paddle Lite 现支持量化等多种优化技术,具体细节信息请查看量化文档

其次,分析模型结构,查看是否有可融合的算子(如 convolutionbatchnorm 可融合成 convolution 实现)/可并行计算的分支,以减少模型的计算量或 I/O 操作。这种情况应该不多见,因为 Paddle Lite 已完成大部分融合算子添加。但是,如果您发现更好的融合算子支持,可参考 Pass 文档添加新的融合算子支持。

最后,分析模型中占比较高算子的算法思想,查看是否还有可优化的空间。目前 Paddle Lite 为大多数算子提供了优化版本,如果您有更好的实现方法,可以参考新增 OP 文档添加实现。

基于硬件特点的性能优化

根据您使用的硬件设备结构特点,查看热点算子(模型中占比高的算子)是否仍有优化空间。目前,Paddle Lite 已支持大部分硬件优化,如 ARM CPU,添加了 A53、 A35 和其他处理器如 A73、A75 等三类处理器的优化实现。如果您发现其他硬件可进一步优化,也欢迎您参考新增硬件文档新增 OP 文档 添加新的硬件优化实现。

基于特定场景/特定模型的性能优化

基于您目前使用场景,分析各部分应用耗时占比,选择占比高的应用,用其他方法进行优化实现,进而提高整个应用程序的性能。例如:该应用程序包含前后预处理实现,可以基于硬件添加前后预处理的优化实现(用 ARM 汇编实现 OpenCV 图像处理算子,目前 Paddle Lite 已提供部分图像算子的优化实现,可供调用),进一步提升整个应用程序的性能。

基于第三方工具进行性能分析

基于第三方工具(如 Android ProfilerInstruments 提供了丰富的可被用于调试应用的性能分析信息。有时错误可能不在模型中,而在与模型交互的部分应用代码中。请务必熟悉平台特定的性能分析工具和适用于该平台的最佳做法。

基于异构硬件进行性能优化

Paddle Lite 添加了多个使用速度更快的硬件(如 GPU、NPU 和 APU 等)来加速模型的新方式,也支持多种异构硬件加速方法如 ARM CPU 和 NPU 异构加速检测模型性能。

请注意:

  • 有些加速器更适合不同类型的模型

  • 有些新硬件只支持浮点模型或以特定方式优化的模型

  • 请务必对每个硬件类型进行基准测试,以查看它是否适合您的应用

例如,如果您有一个非常小的模型,将该模型放在 GPU 可能不值得。相反,对于具有高运算强度的大型模型来说, GPU 就是很好的选择。