docs/performance/best_practices.md
移动设备和嵌入式设备的计算资源有限,因此提高应用的资源效率非常重要。我们整理了一份最佳做法和策略的清单,可用于改善 Paddle Lite 模型的性能。
您需要根据任务在模型复杂性和大小之间进行权衡。
在选择了合适的候选模型后,最好对模型进行性能分析和基准测试。Paddle Lite 基准测试工具 Profiler 工具有内置的性能分析器,可展示每个算子的性能分析数据。这能帮助理解性能瓶颈,以及哪些算子占据了大部分计算时间。
通过 Profiler 工具,根据每个算子的性能分析数据,可按照以下三个方面完成模型性能优化:
首先,根据需求选择最小的模型进行推理,因为这些模型通常更快、更节能。Paddle Lite 现支持量化等多种优化技术,具体细节信息请查看量化文档。
其次,分析模型结构,查看是否有可融合的算子(如 convolution 和 batchnorm 可融合成 convolution 实现)/可并行计算的分支,以减少模型的计算量或 I/O 操作。这种情况应该不多见,因为 Paddle Lite 已完成大部分融合算子添加。但是,如果您发现更好的融合算子支持,可参考 Pass 文档添加新的融合算子支持。
最后,分析模型中占比较高算子的算法思想,查看是否还有可优化的空间。目前 Paddle Lite 为大多数算子提供了优化版本,如果您有更好的实现方法,可以参考新增 OP 文档添加实现。
根据您使用的硬件设备结构特点,查看热点算子(模型中占比高的算子)是否仍有优化空间。目前,Paddle Lite 已支持大部分硬件优化,如 ARM CPU,添加了 A53、 A35 和其他处理器如 A73、A75 等三类处理器的优化实现。如果您发现其他硬件可进一步优化,也欢迎您参考新增硬件文档 或 新增 OP 文档 添加新的硬件优化实现。
基于您目前使用场景,分析各部分应用耗时占比,选择占比高的应用,用其他方法进行优化实现,进而提高整个应用程序的性能。例如:该应用程序包含前后预处理实现,可以基于硬件添加前后预处理的优化实现(用 ARM 汇编实现 OpenCV 图像处理算子,目前 Paddle Lite 已提供部分图像算子的优化实现,可供调用),进一步提升整个应用程序的性能。
基于第三方工具(如 Android Profiler 和 Instruments 提供了丰富的可被用于调试应用的性能分析信息。有时错误可能不在模型中,而在与模型交互的部分应用代码中。请务必熟悉平台特定的性能分析工具和适用于该平台的最佳做法。
Paddle Lite 添加了多个使用速度更快的硬件(如 GPU、NPU 和 APU 等)来加速模型的新方式,也支持多种异构硬件加速方法如 ARM CPU 和 NPU 异构加速检测模型性能。
请注意:
例如,如果您有一个非常小的模型,将该模型放在 GPU 可能不值得。相反,对于具有高运算强度的大型模型来说, GPU 就是很好的选择。