如何优化 TensorFlow Lite 运行时内存?( 二 )


图 2
图 2:MobileNet V2 的中间张量(上)及其在 2D 存储空间(下)上的映射 。 如果中间张量共享内存缓冲区(用 4 种不同的颜色表示) , 它们只占用约 7MB 的运行时内存
内存偏移量计算对于在 CPU 上运行的 TFLite , 适用于 GL 纹理的内存缓冲区属性并不适用 。 因此 , 更常见的做法是预先分配一个巨大的内存空间 , 并让所有访问它的读取器和写入器共享它 , 这些读取器和写入器通过给定的偏移量访问它 , 而不会干扰其他读取和写入 。 这种内存偏移量计算方法的目标是最大程度地减少内存空间 。
我们已经为这个优化问题设计了 3 种不同的算法 , 并探索了先前的研究工作( Sekiyama 等人在 2018 年提出的 Strip Packing ) 。 与共享对象方法类似 , 有些算法的性能优于其他算法 , 具体取决于网络 , 如表 2 所示 。 从这个调查中我们可以看出 , 偏移量计算方法比一般的共享对象方法占用的空间更小 , 因此 , 如果可行的话 , 我们应该选择前者而非后者 。
如何优化 TensorFlow Lite 运行时内存?文章插图
表 2
表 2:偏移量计算策略的内存占用(以 MB 为单位;最佳结果以绿色高亮显示) 。 前 3 行是我们的策略 , 接下来的 1 行是先前的研究工作 , 最后 2 行作为基线(下限表示可能无法实现的最佳数字的近似值 , 而 Naive 表示每个中间张量分配自己的内存缓冲区可能出现的最差数值)
这些针对 CPU 和 GPU 的内存优化 , 默认情况下已经与最近几个稳定的 TFLite 版本一起提供 , 并且在支持诸如 MobileBERT 等更高要求、最先进的模型方面证明了它们的价值 。 你可以通过直接查看 GPU 实现和 CPU 实现来找到有关实现的更多详细信息 。
原文链接:
延伸阅读:
跨越重重“障碍” , 我从 PyTorch 转换为了 TensorFlow Lite-InfoQ
【如何优化 TensorFlow Lite 运行时内存?】关注我并转发此篇文章 , 私信我“领取资料” , 即可免费获得InfoQ价值4999元迷你书 , 点击文末「了解更多」 , 即可移步InfoQ官网 , 获取最新资讯~


推荐阅读