0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow Lite (TFLite) 在内存使用方面的改进

Tensorflowers 来源:TensorFlow 作者: Juhyun Lee 和 Yury 2020-10-21 10:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

文 /Juhyun Lee 和 Yury Pisarchyk,软件工程师

由于资源限制严重,必须在苛刻的功耗要求下使用资源有限的硬件,因此在移动和嵌入式设备上进行推理颇有难度。在本文中,我们将展示 TensorFlow Lite (TFLite) 在内存使用方面的改进,更适合在边缘设备上运行推理。

中间张量

一般而言,神经网络可以视为一个由算子(例如 CONV_2D 或 FULLY_CONNECTED)和保存中间计算结果的张量(称为中间张量)组成的计算图。这些中间张量通常是预分配的,目的是减少推理延迟,但这样做会增加内存用量。不过,如果只是以简单的方式实现,那么在资源受限的环境下代价有可能很高,它会占用大量空间,有时甚至比模型本身高几倍。例如,MobileNet v2 中的中间张量占用了 26MB 的内存(图 1),大约是模型本身的两倍。

图 1. MobileNet v2 的中间张量(上图)及其到二维内存空间大小的映射(下图)。如果每个中间张量分别使用一个专用的内存缓冲区(用 65 种不同的颜色表示),它们将占用约 26MB 的运行时内存

好消息是,通过数据相关性分析,这些中间张量不必共存于内存中。如此一来,我们便可以重用中间张量的内存缓冲区,从而减少推理引擎占用的总内存。如果网络呈简单的链条形状,则两个大内存缓冲区即够用,因为它们可以在整个网络中来回互换。然而,对于形成复杂计算图的任意网络,这个NP 完备(NP-complete)资源分配问题需要一个良好的近似算法

我们针对此问题设计了许多不同的近似算法,这些算法的表现取决于神经网络和内存缓冲区的属性,但都通过张量使用记录。中间张量的张量使用记录是一种辅助数据结构,其中包含有关张量的大小以及在给定的网络执行计划中首次最后一次使用时间的信息。借助这些记录,内存管理器能够在网络执行的任何时刻计算中间张量的使用情况,并优化其运行时内存以最大限度减少占用空间。

共享内存缓冲区对象

在 TFLite GPU OpenGL 后端中,我们为这些中间张量采用 GL 纹理。这种方式有几个有趣的限制:(a) 纹理一经创建便无法修改大小,以及 (b) 在给定时间只有一个着色器程序可以独占访问纹理对象。在这种共享内存缓冲区对象模式的目标是最小化对象池中创建的所有共享内存缓冲区对象的大小总和。这种优化与众所周知的寄存器分配问题类似,但每个对象的大小可变,因此优化起来要复杂得多。

根据前面提到的张量使用记录,我们设计了 5 种不同的算法,如表 1 所示。除了“最小成本流”以外,它们都是贪心算法,每个算法使用不同的启发式算法,但仍会达到或非常接近理论下限。根据网络拓扑,某些算法的性能要优于其他算法,但总体来说,GREEDY_BY_SIZE_IMPROVED 和 GREEDY_BY_BREADTH 产生的对象分配占用内存最小。

理论下限
https://arxiv.org/abs/2001.03288

表 1. “共享对象”策略的内存占用量(以 MB 为单位;最佳结果以绿色突出显示)。前 5 行是我们的策略,后 2 行用作基准(“下限”表示最佳数的近似值,该值可能无法实现,而“朴素”表示为每个中间张量分配专属内存缓冲区的情况下可能的最差数)

回到我们的第一个示例,GREEDY_BY_BREADTH 在 MobileNet v2 上表现最佳,它利用了每个算子的宽度,即算子配置文件中所有张量的总和。图 2,尤其是与图 1 相比,突出了使用智能内存管理器的优势。

图 2. MobileNet v2 的中间张量(上图)及其大小到二维内存空间的映射(下图)。如果中间张量共享内存缓冲区(用 4 种不同的颜色表示),它们仅占用大约 7MB 的运行时内存

内存偏移量计算

对于在 CPU 上运行的 TFLite,适用于 GL 纹理的内存缓冲区属性不适用。因此,更常见的做法是提前分配一个大内存空间,并通过给定偏移量访问内存在所有不干扰其他读取和写入操作的读取器和写入器之间共享。这种内存偏移量计算法的目的是最大程度地减小内存空间的大小。

我们针对此优化问题设计了 3 种不同的算法,同时还分析了先前的研究工作(Sekiyama 等人于 2018 年提出的 Strip Packing)。与“共享对象”法类似,根据网络的不同,一些算法的性能优于其他算法,如表 2 所示。这项研究的一个收获是:“偏移量计算”法通常比“共享对象”法占用的空间更小。因此,如果适用,应该选择前者而不是后者。

Strip Packing
https://arxiv.org/abs/1804.10001

表 2. “偏移量计算”策略的内存占用量(以 MB 为单位;最佳结果以绿色突出显示)。前 3 行是我们的策略,接下来 1 行是先前的研究,后 2 行用作基准(“下限”表示最佳数的近似值,该值可能无法实现,而“朴素”表示为每个中间张量分配专属内存缓冲区的情况下可能的最差数)

这些针对 CPU 和 GPU 的内存优化默认已随过去几个稳定的 TFLite 版本一起提供,并已证明在支持更苛刻的最新模型(如 MobileBERT)方面很有优势。直接查看 GPU 实现和 CPU 实现,可以找到更多关于实现的细节。

MobileBERT
https://tfhub.dev/tensorflow/lite-model/mobilebert/1/default/1

GPU 实现
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/delegates/gpu/common/memory_management

CPU 实现
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/simple_memory_arena.h

致谢

感谢 Matthias Grundmann、Jared Duke 和 Sarah Sirajuddin,特别感谢 Andrei Kulik 参加了最开始的头脑风暴,同时感谢 Terry Heo 完成 TFLite 的最终实现。

责任编辑:xj

原文标题:优化 TensorFlow Lite 推理运行环境内存占用

文章出处:【微信公众号:TensorFlow】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4827

    浏览量

    106777
  • 张量
    +关注

    关注

    0

    文章

    7

    浏览量

    2682
  • tensorflow
    +关注

    关注

    13

    文章

    331

    浏览量

    61847
  • TensorFlow Lite
    +关注

    关注

    0

    文章

    26

    浏览量

    802

原文标题:优化 TensorFlow Lite 推理运行环境内存占用

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【上海晶珩睿莓1开发板试用体验】将TensorFlow-Lite物体归类(classify)的输出图片移植到LVGL9.3界面中

    既然调通了TensorFlow-Lite物体归类(classify)和LVGL9.3代码,那么把这两个东西结合起来也是没问题的,需要注意的是,TensorFlow-Lite是C++代码,而
    发表于 09-21 00:39

    【上海晶珩睿莓1开发板试用体验】TensorFlow-Lite物体归类(classify)

    库,则编译出来的OpenCV库不可以给TensorFlow-Lite代码使用,并且睿莓1开发板自带的2G内存其实也无法支撑OpenCV的完整编译过程,在编译途中就会发生内存交换错误。要解决此问题,方法
    发表于 09-12 22:43

    了解SOLIDWORKS202仿真方面的改进

    和效率,从而帮助设计师更好地应对复杂的设计挑战。本文将深入探讨SOLIDWORKS 2025在仿真方面的改进,揭示这些改进如何助力设计师实现更有效、更准确的仿真分析。
    的头像 发表于 09-04 10:36 492次阅读
    了解SOLIDWORKS202仿真<b class='flag-5'>方面的</b><b class='flag-5'>改进</b>

    澜起科技凭借在内存接口和高速互连芯片领域的突破性创新荣膺《财富》中国科技50强

    近日,《财富》杂志正式发布“中国科技50强”榜单,澜 起科技凭借在内存接口和高速互连芯片领域的突破性创新与全球影响力成功入选,成为中国半导体行业中技术实力与国际化发展兼备的杰出代表企业之一。 据悉
    的头像 发表于 08-25 10:03 2222次阅读
    澜起科技凭借<b class='flag-5'>在内存</b>接口和高速互连芯片领域的突破性创新荣膺《财富》中国科技50强

    如何进行tflite模型量化

    在windows上,如果我们按照上一期的方式安装了tflite2pb,是不能直接运行的。因为命令行工具是为linux编译的。
    的头像 发表于 08-13 11:45 1434次阅读
    如何进行<b class='flag-5'>tflite</b>模型量化

    无法将Tensorflow Lite模型转换为OpenVINO™格式怎么处理?

    Tensorflow Lite 模型转换为 OpenVINO™ 格式。 遇到的错误: FrontEnd API failed with OpConversionFailure:No translator found for TFLi
    发表于 06-25 08:27

    通过什么方法能获得关于Ethercat方面的设计方案和设计资料

    您好通过什么方法能获得关于Ethercat方面的设计方案和设计资料,我们主要关于主站,从站IO和运动控制方面的资料,谢谢!!
    发表于 05-28 10:07

    FlexBuild构建Debian 12,在“tflite_ethosu_delegate”上构建失败了怎么解决?

    /workspace/tn_debian_FlexBuild 构建/components_lsdk2412/apps/ml/tflite/tensorflow/lite/tools/cmake
    发表于 04-01 06:53

    用树莓派搞深度学习?TensorFlow启动!

    介绍本页面将指导您在搭载64位Bullseye操作系统的RaspberryPi4上安装TensorFlowTensorFlow是一个专为深度学习开发的大型软件库,它消耗大量资源。您可以在
    的头像 发表于 03-25 09:33 959次阅读
    用树莓派搞深度学习?<b class='flag-5'>TensorFlow</b>启动!

    使用OpenVINO™ 2020.4.582将自定义TensorFlow 2模型转换为中间表示 (IR)收到错误怎么解决?

    转换自定义 TensorFlow 2 模型 mask_rcnn_inception_resnet_v2_1024x1024_coco17 要 IR 使用模型优化器命令: 注意上面的链接可能无法
    发表于 03-07 07:28

    OpenVINO™是否与TensorFlow集成支持Raspberry Pi?

    无法确定OpenVINO™是否与 TensorFlow* 集成支持 Raspberry Pi。
    发表于 03-05 08:26

    新唐科技微控制器在触控应用方面的优势

    应用带来创新解决方案。本次新闻稿将涵盖更多产品系列和技术细节,更全面地展示 NuMicro 微控制器在触控应用方面的优势。
    的头像 发表于 02-27 15:52 1040次阅读

    海力士展示AI专用计算内存解决方案AiMX-xPU

    在Hot Chips 2024上,海力士专注于AI加速器的标准DRAM之外的产品。该公司展示了其在内存计算方面的最新进展,这次是用其AiMX-xPU和LPDDR-AiM进行LLM推理。其理念是,无需
    的头像 发表于 01-09 16:08 1245次阅读
    海力士展示AI专用计算<b class='flag-5'>内存</b>解决方案AiMX-xPU

    中科创达RUBIK AI Glass Lite版预计2025年实现量产

    AI眼镜点燃了市场的热情,成为全球关注的焦点。中科创达最新推出的RUBIK AI Glass Lite版解决方案,很好地满足了当下AI眼镜在时尚、轻量化及自然语言交互方面的市场需求。目前,RUBIK AI Glass Lite
    的头像 发表于 12-27 10:57 2126次阅读

    南亚科技与补丁科技携手开发定制超高带宽内存

    Memory)的开发。 此次合作将充分融合南亚科技在10nm级DRAM技术领域的深厚积累,以及补丁科技在定制内存产品设计方面的卓越能力。双方将强强联手,共同打造出针对AI与边缘应用需求的高附加值、高性能、低功耗的定制超高带宽内存
    的头像 发表于 12-20 14:28 931次阅读