SPINN:基于设备和云的神经网络协同递进推理

news2024/9/23 15:24:05

SPINN:基于设备和云的神经网络协同递进推理

论文标题:SPINN: synergistic progressive inference of neural networks over device and cloud
原文链接:https://dl.acm.org/doi/10.1145/3372224.3419194

论文动机

  • 现代CNN过多的计算需求,阻碍了CNN驱动的应用部署在资源受限的移动设备上,仅在边缘设备上维持高性能的推理是非常困难的,边缘设备难以支持CNN工作负载的性能需求。目前有如下的解决方案:

    1. 方案一:以云作为计算中心,边缘设备收集到的输入会被传到远程服务器上,使用强大的加速器进行CNN推理。**缺点是:**对服务器有着较高的负担,云执行高度依赖动态的网络条件,一旦网络环境变差,性能会急剧下降。
    2. 方案二:通过边云协同进行CNN推理。将CNN作为一张计算图,将其化分给设备和云,客户端执行模型的第一部分,并将结果传输给服务器,服务器继续模型的执行,并将结果返回给设备。这种方案允许根据平台的能力调整将在每个平台上执行的CNN部分,但同样存在依赖网络条件的问题
    3. 方案三:论文中提出的方法——SPINN,采用渐进式推理。SPINN是一种分布式系统,可以在高动态环境中实现鲁棒CNN推理,通过渐进推理的新颖调度器实现,允许系统在推理过程中,根据输入的复杂性在CNN的不同部分提前推出,并且实现了对早期退出策略和CNN分离的协同优化。减轻了对可靠的设备-服务器通信的硬性要求。
  • 现存的解决方案对比图:
    在这里插入图片描述

系统组件

  • SPINN架构示意图:

在这里插入图片描述

渐进式推理模型生成器

  • 作用:给定一个CNN模型,SPINN推导出一个渐进推理网络。

  • 以FLOP计数,沿着体系结构的深度以相等的距离放置中间类,为了保证模型能够收敛,SPINN使用了6个"early exist",分别在体系结构的15%、30%、45%、60%、75%、90%的位置。

  • 从头开始联合培训所有的中间类,为了解决"overthinking"问题,即中间结果正常,更深层结果反而异常的情况,作者引入了成本函数。

  • 对于提前退出测量,作者使用了一个可调阈值 t h r c o n f thr_{conf} thrconf来决定输入从哪个"early exist"退出,同时使用softmax来计算各个"early exist"的预测置信度,如果某个"early exist"的预测置信度高于阈值,那输入就从这个"early exist"退出。

  • 下图分别展示了不同阈值对模型的准确率和退出率的影响,从图中可看出,阈值越大,模型准确率越高,而更多的阈值会导致更多的样本退出,所有阈值是一个提到参数,可以控制精度和总体处理时间。

在这里插入图片描述

在这里插入图片描述

模型分离

  • 作用:在从原始CNN派生出渐进推理模型之后,接下来要将模型分散到客户端和服务器上。

  • 首先考虑分割点的数目。以层的粒度考虑分裂,对于一个N层的模型,有N-1个分割点,可产生 2 N − 1 2^{N-1} 2N1中分裂情况( C N − 1 0 + C N − 1 1 + . . . + C N − 1 N − 1 = 2 N − 1 C_{N-1}^0+C_{N-1}^1+...+C_{N-1}^{N-1}=2^{N-1} CN10+CN11+...+CN1N1=2N1),但考虑到云服务器处理能力强大,并且边云通信会产生不少成本,因此作者只选择了一个分割点

  • 其次考虑分裂的层。分割点的输出值需要从边侧传输到云端,而网络的不同层分裂后,具有不同的传输成本和压缩潜力,而Relu层会将负数限制为0,因此具有更好的压缩潜力,所有作者选择在Relu层分裂。

  • 下图展示了不同的分割点,客户端计算时间、服务器计算时间和传输时间的变化:

在这里插入图片描述

分析器

  • 作用:为了确定模型的参数值,比如分离点、置信度阈值等,需要对模型的各项指标进行分析。
  • 首先在离线状态下,首先分析和设备无关的指标,包括CNN特有的指标,例如不同分割点下传输的数据大小,不同阈值下模型的平均精度,这些指标只会在模型部署前测量一次,然后分析器会通过测量CNN每层的平均执行时间,来获得每个设备特定的延迟估计
  • 运行时状态下,分析器会通过定期监控设备和服务器负载以及连接条件来更新离线的延迟估计。

动态调度器

  • 作用:在得到分析器的分析结果后,动态调度器负责在设备和云之间分配计算量,并决定提前退出策略,目标时产生满足应用程序需求的高性能配置。

  • 调度器结合了硬约束和软目标

    • 指标集:定义指标 M = { 延迟,吞吐量、服务器成本、设备成本、准确率 } M=\{延迟,吞吐量、服务器成本、设备成本、准确率\} M={延迟,吞吐量、服务器成本、设备成本、准确率},目前已经分析获得指标值集合

    • 硬约束:定义一个硬约束为 C i = { M , o p , t h r } C_i = \{M, op, thr\} Ci={M,op,thr},其中 M M M是一个给定的指标值。

    • 软目标:定义一个软目标 O i = { M , m i n    o r   max ⁡    o r   v a l u e } O_i = \{M, min\ \ or \ \max\ \ or \ value \} Oi={M,min  or max  or value},其中 M M M是一个给定的指标值

  • 动态调度器的算法执行过程:

    • 首先根据设备和服务器负载以及网络连接状态更新参数值,得到若干个解
    • 然后根据设定的硬约束丢弃所有不可行解,其中可行解会同时满足所有硬约束
    • 最后根据软目标得到最优参数值

CNN通信优化器

  • 作用:CNN层通常会产生大量的中间数据,这在网络传输方面带来很大代价,通信优化器模块(CNN-CO)可以缓解这一瓶颈。
  • CNN-CO分为两个阶段:
    • 在第一阶段使用了数据的精度表示,将数据数据精度由32为浮点位降低到8位定长数,在保持数据不会丢失太多的情况下减少了数据传输量,并且不会对模型的准确性产生太大影响。
    • 在第二阶段,由于现代CNN中广泛使用了Relu激活层,Relu层很大一部分激活值都是0,稀疏且容易压缩,并且由于精度下降,稀疏性进一步放大,作者使用了带位压缩的LZ4压缩器来实现压缩。

分布式执行引擎

  • 作用:减少数据传输和冗余的计算量。
  • 通过将模块和张量操作替换为自定义包装器,来拦截它们的函数,然后在网络执行的特定时间点完成相应的操作,包括:正常执行、卸载执行、恢复执行、提前退出

总结

  • 目前CNN的部署包括两个模型的维护:一个是在云端的大型、高精度模型,一个是在设备上的小型、低精度模型。设计训练出大型模型后,需要对大型模型进行压缩,以获得轻量型模型,压缩是一项艰巨的任务,并且压缩造成的精度损失需要在轻量级模型中调整。
  • SPINN可以解决上诉问题,SPINN会为其量身定制部署网络,部署后,调度器会根据估计的网络延迟、设备和服务器负载来调整模型,以实现在不同设置的先进系统上提供更高的性能。
  • 目前SPINN还存在一定的局限性,比如:虽然SPINN支持在网络中任意层进行拆分,但是由于Relu层的稀疏性和高度可压性,作者将分割点限制在Relu层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/839597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】2000-2022年1km精度人口分布栅格数据(免费获取/全球/全国/分省/分市)

人口空间分布数据是我们在各项研究中经常使用的数据,之前我们给大家分享过2000-2021年来自LandScan平台的1km精度的人口分布栅格数据集。LandScan人口数据集由美国能源部橡树岭国家实验室(ORNL)开发,East View Cartographic提供。…

1980-2020中国土地利用现状遥感监测数据(数据格式:shp)

LUCC分类体系 一级类型二级类型编号名称编号名称含义1耕地––指种植农作物的土地,包括熟耕地、新开荒地、休闲地、轮歇地、草田轮作物地;以种植农作物为主的农果、农桑、农林用地;耕种三年以上的滩地和海涂。––11水田指有水源保证和灌溉设…

HDFS中的NAMENODE元数据管理(超详细)

元数据管理 元数据是什么元数据管理概述内存元数据元数据文件fsimage内存镜像文件edits log编辑日志 namenode加载元数据文件顺序 元数据管理相关目录文件元数据相关文件VERSIONseen_txid 元数据文件查看(OIV,OEV)SecondaryNameNode介绍checkpoint机制SN…

SynergyNet(头部姿态估计 Head Pose Estimation)复现 demo测试

目录 0 相关资料1 环境搭建2 安装 SynergyNet3 下载相关文件4 编译5 测试 0 相关资料 SynergyNet(github):https://github.com/choyingw/SynergyNet 1 环境搭建 我用的AutoDL平台搭建 选择镜像 PyTorch 1.9.0 Python 3.8(ubuntu18.04) Cu…

2.Flink应用

2.1 数据流 DataStream:DataStream是Flink数据流的核心抽象,其上定义了对数据流的一系列操作DataStreamSource:DataStreamSource 是 DataStream 的 起 点 , DataStreamSource 在StreamExecutionEnvironment 中 创 建 ,…

Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明

目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfsHi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs 介绍 恩兔N2是一个家庭存储的系列产品, NS-1 是其中体积…

【数据结构和算法】排序算法

说明:以下排序如无特别说明,都是从小到大升序排序 1. 冒泡排序 核心思想:每个元素与其相邻元素比较,如果前者大于后者则交换,每次循环结束后会将最大值放到最后,像小水泡从底下冒到上面成大水泡一样&…

选择结构的学习

选择结构 思考以下问题: 常用的逻辑运算符及其作用? 请写出判断分数大于 60 并且分数小于 100 的表达式 if-else 选择结构执行的顺序是什么? 多重 if 选择结构的执行流程是怎样的? if 选择结构书写规范有哪些? 通过下…

SAP通过 SWO3找一些不在事务码BAPI里面的BAPI

找BAPI BAPI_SALESDOCUMENT_COPY 首先事务码BAPI: 下面的所有方法都找不到(随便点开一个) 进SWO3 双击进去,继续往下点,找到了

学习左耳听风栏目90天——第一天 1-90(学习左耳朵耗子的工匠精神,对技术的热爱)【洞悉技术的本质,享受科技的乐趣】

洞悉技术的本质,享受科技的乐趣 第一篇,我的感受就是 耗叔是一个热爱技术,可以通过代码找到快乐的技术人。 作为it从业者,我们如何可以通过代码找到快乐呢?这是一个问题? 至少目前,我还没有这种…

调试技巧(2)

6. 如何写出好(易于调试)的代码 6.1 优秀的代码: 代码运行正常bug很少效率高可读性高可维护性高注释清晰文档齐全 常见的coding技巧: 使用assert尽量使用const养成良好的编码风格添加必要的注释避免编码的陷阱。 这里讲一下assert…

python中计算2的32次方减1,python怎么算2的3次方

大家好,给大家分享一下怎么样用python编写2的n次方,n由键盘输入,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! ---恢复内容开始--- 1、内置函数:取绝对值函数abs() 2、内置函数:取最大值max()&#xff…

【数据结构与算法——TypeScript】算法的复杂度分析、 数组和链表的对比

【数据结构与算法——TypeScript】 算法的复杂度分析 什么是算法复杂度(现实案例)? ❤️‍🔥 前面已经解释了什么是算法? 其实就是解决问题的一系列步骤操作、逻辑。 ✅ 对于同一个问题,我们往往有很多种解决思路和方法&#x…

url重定向

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。 如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话 就可能发生"跳错对象"的问题。 url跳转比较直接的危害是…

【网络工程】网络流量分析工具 Wireshark

文章目录 第一章:WireShark介绍第二章:WireShark应用第三章:Wireshark 实战 第一章:WireShark介绍 Wireshark (前身 Ethereal):它是一个强大的网络包分析工具 ! 此工具主要是用来捕获网络数据包的,并且自动…

CBCGPRibbon 添加背景图片

resource.h中声明资源的ID:ID_RIBBON_BACKIMAGE rc文件中添加png图片路径: ID_RIBBON_BACKIMAGE PNG DISCARDABLE "res\\bkribbon.png" 代码中添加下测: //添加背景图片 m_wndRibbonBar.SetBackgroundImage(ID_RIB…

Redis 总结【6.0版本的】

如果源码不编译,是无法实现自动跳转的, Redis在win上编译有点麻烦,我是使用的CentOS环境,Clion编译 编译完就可以直接通过shell连接Redis server了 server.c 中放的是就是主类 :6000多行左右是入口main()函数位置 Red…

RabbitMQ 教程 | 第10章 网络分区

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

分布式电网动态电压恢复器模拟装置电子设计大赛

wx供重浩:创享日记 对话框发送:85电网 获取完整论文报告结构框图工程源文件 摘要:本装置采用DC-AC及AC-DC-AC双重结构,前级采用功率因数校正(PFC)电路完成AC-DC变换,改善输入端电网电能质量。后…

01背包笔记

01背包题目链接 题意&#xff1a;有一个容量为m的背包以及n个可以拿的物品&#xff0c;给出n个物品的体积和价值&#xff0c;要求输出可以拿的最大价值 思路&#xff1a;代表在前i件物品中拿取总体积不超过j的最大价值 由此可以分情况讨论状态转移 当j<v[i]时&#xff0c;说…