移动设备和嵌入式设备的计算资源有限, 务必要确保应用资源高效。我们汇总了一个列表 有助于改进 TensorFlow 的最佳实践和策略 精简版模型性能。
为任务选择最佳模型
根据具体任务,您需要在模型复杂度之间进行权衡 和大小。如果您的任务需要高精度,那么您可能需要 复杂模型。对于精度要求较低的任务,最好使用 因为它们不仅占用了更少的磁盘空间和内存, 而且通常速度更快、能源效率更高例如,下面的图表显示了 一些常见图片分类模型在准确率和延迟时间方面的权衡。
针对移动设备优化的模型的一个例子是 针对移动设备进行了优化的 MobileNets 视觉应用。Kaggle “模型”会列出 专门针对移动和嵌入式设备进行了优化的模型。
您可以使用转移作业,基于自己的数据集重新训练列出的模型 学习。
剖析模型的性能
选择适合任务的候选模型后, 对模型进行性能分析和基准测试的好方法。LiteRT 基准化分析 工具 具有内置性能分析器,可以按操作员显示性能分析统计信息。这可以 有助于了解性能瓶颈以及哪些运算符占主导地位 计算时间。
您还可以使用 LiteRT 跟踪来分析 将模型推送到 Android 应用中,并使用标准的 Android 系统跟踪, 并通过基于 GUI 的分析功能按时间直观呈现运算符调用 工具。
分析并优化图中的运算符
如果某个运算符频繁出现在模型中,并且根据 就会发现操作器耗费的时间最多, 如何优化该运算符这种情况应该很少见,因为 TensorFlow Lite 具有针对大多数运营商的优化版本。不过,您或许能够 如果您知道 运算符。请查看自定义运算符指南。
优化您的模型
模型优化旨在创建较小的模型,这些模型通常速度更快, 因此能在移动设备上部署 LiteRT 支持多种优化技术,例如量化。
如需了解详情,请参阅模型优化文档。
调整线程数量
LiteRT 支持许多运算符的多线程内核。您可以 增加线程数并加速运算符的执行。上升 但线程数量会使模型使用更多的资源, 电源。
对于某些应用,延迟时间可能比能效更为重要。您 可以通过设置解释器的数量来增加线程数 线程。 然而,多线程执行以提升性能为代价 取决于并发执行的其他任务。这是 尤其是在移动应用中例如,隔离测试可能会显示 2 倍 与单线程相比,速度提升快一些,但是,如果同时执行另一个应用 可能会导致性能低于单线程
消除冗余副本
如果您的应用设计不严谨,可能就会有
在将输入馈送给模型并从中读取输出时,请务必
消除冗余副本。如果您使用的是更高级别的 API(如 Java),
请务必仔细查看相关文档,了解性能注意事项。例如:
如果将 ByteBuffers
用作模板,Java API 的速度会快得多
输入。
使用平台专用工具分析您的应用
平台特有的工具,例如Android 性能分析器和 乐器能为我们带来 可用于调试应用的分析信息。有时, 性能 bug 可能不在模型中,而是出现在 与模型交互。确保您熟悉平台 特定分析工具和最佳做法。
评估使用设备上提供的硬件加速器是否受益于模型
LiteRT 增加了使用更快的硬件加速模型的新方式 如 GPU、DSP 和神经加速器。通常,这些加速器 解释器执行的各个部分。LiteRT 可以通过以下方式使用委托:
- GPU 委托适用于 Android 和 iOS,使用 OpenGL/OpenCL 和 Metal, 。如需试用这些模块,请参阅 GPU 委托。
- 如果您拥有 非标准硬件请参阅 LiteRT 受托人,了解更多信息。
请注意,有些加速器更适合不同类型的模型。部分 代理仅支持浮动模型或以特定方式优化的模型。时间是 务必要对每个委托进行基准测试,以确定其是否是优质 例如,如果您的模型非常小, 将模型委托给 GPU 是不值得的。相反,加速器是 非常适合具有高算术强度的大型模型。