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