SPINN:基于设备和云的神经网络协同递进推理
SPINN:基于设备和云的神经网络协同递进推理
论文标题:SPINN: synergistic progressive inference of neural networks over device and cloud
原文链接:https://dl.acm.org/doi/10.1145/3372224.3419194
论文动机
-
现代CNN过多的计算需求,阻碍了CNN驱动的应用部署在资源受限的移动设备上,仅在边缘设备上维持高性能的推理是非常困难的,边缘设备难以支持CNN工作负载的性能需求。目前有如下的解决方案:
- 方案一:以云作为计算中心,边缘设备收集到的输入会被传到远程服务器上,使用强大的加速器进行CNN推理。**缺点是:**对服务器有着较高的负担,云执行高度依赖动态的网络条件,一旦网络环境变差,性能会急剧下降。
- 方案二:通过边云协同进行CNN推理。将CNN作为一张计算图,将其化分给设备和云,客户端执行模型的第一部分,并将结果传输给服务器,服务器继续模型的执行,并将结果返回给设备。这种方案允许根据平台的能力调整将在每个平台上执行的CNN部分,但同样存在依赖网络条件的问题。
- 方案三:论文中提出的方法——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} 2N−1中分裂情况( 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} CN−10+CN−11+...+CN−1N−1=2N−1),但考虑到云服务器处理能力强大,并且边云通信会产生不少成本,因此作者只选择了一个分割点。
-
其次考虑分裂的层。分割点的输出值需要从边侧传输到云端,而网络的不同层分裂后,具有不同的传输成本和压缩潜力,而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层。
相关文章:
SPINN:基于设备和云的神经网络协同递进推理
SPINN:基于设备和云的神经网络协同递进推理 论文标题:SPINN: synergistic progressive inference of neural networks over device and cloud 原文链接:https://dl.acm.org/doi/10.1145/3372224.3419194 论文动机 现代CNN过多的计算需求&am…...
数据结构-二叉树
数据结构-二叉树 二叉树的概念二叉树的遍历分类 建立二叉树,并遍历二叉树的最小单元二叉树的最小单元初始化初始化二叉树前序遍历的实现中序遍历的实现后序遍历的实现计算节点的个数计算树的深度求第k层的个数查找二叉树的元素分层遍历 全部代码如下 二叉树的概念 二…...
Open3D 进阶(4)高斯混合点云聚类
目录 一、算法原理1、原理概述2、实现流程3、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 1、原理概述 高斯混合聚类(GMM)算法假设数据点是由一个或多个高斯分布生成的,并通过最大似然估计的方法来估计每个簇…...
计算机组成和IO
文章目录 计组和Epoll:计算机组成原理:网络数据接收的流程:内核如何管理socket以及状态的更新select系统调用的复杂度epoll的et和lt模式及java的选择 国内访问chatai就可以 https://aiweb.douguguo.com/?typeadd计组和Epoll: 计…...
STM32CUBUMX配置RS485 modbus STM32(从机)亲测可用
———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…...
系统设计类题目汇总
1 设计一个系统统计当前时刻北京用户在线人数 【Redis】位图以及位图的使用场景(统计在线人数和用户在线状态) 1.1 方案一: 在用户登录时,使用 Redis SET 将用户 ID 添加到一个特定的键(例如 “online:beijing”)。用户退出时&…...
css滚动条样式指南
css滚动条样式指南 滚动条是网页设计中经常被忽视的元素。虽然它看起来像是一个小细节,但它在网站导航中起着至关重要的作用。默认的滚动条可能看起来不合适,有损整体美观。本文将介绍如何使用 CSS 自定义滚动条。 在 Chrome、Edge 和 Safari 中设置滚…...
vue子组件修改父组件传递的变量(自定义日期时间组件,时间间隔为15分钟或者一个小时)
vue子组件修改父组件传递的变量 子组件不能直接修改父组件变量的值,但是可以通过调用父组件的方法来修改。 实现步骤 在父组件声明变量 export default {data() {return {startTime:"",......},......} }在父组件使用子组件并传递数据,修改…...
【PyTorch】nn.Conv2d函数详解
nn.Conv2d 是 PyTorch 中的一个卷积层,用于实现二维卷积操作 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone )参数解释 in_channels:输入的通…...
数智保险 创新未来 | GBASE南大通用亮相中国保险科技应用高峰论坛
本届峰会以“数智保险 创新未来”为主题,GBASE南大通用携新一代创新数据库产品及金融信创解决方案精彩亮相,与国内八百多位保险公司高管和众多保险科技公司技术专家,就保险领域数字化的创新应用及生态建设、新一代技术突破及发展机遇、前沿科…...
分布式天梯图算法在 Redis 图数据库中的应用
分布式天梯图算法在 Redis 图数据库中的应用 一、简介1 天梯图算法2 天梯图算法在Redis的应用 二、Redis分布式天梯图算法设计与优化1 基于天梯图的分布式算法设计2 多节点扩展与负载均衡优化3 数据存储方案与压缩策略 三、技术实现3.1 系统架构设计3.2 技术选型3.3 关键实现细…...
观察者模式——对象间的联动
1、简介 1.1、概述 在软件系统中,有些对象之间也存在类似交通信号灯和汽车之间的关系。一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动,正所谓“触一而牵百发”。为了更好地描述对象之间存在的这种一…...
【雕爷学编程】Arduino动手做(189)---特别苗条,使用微波传感器控制的纤细小车
装修屋子,找了一段墙面布线槽,外槽宽度只有23毫米,截取一段长为24厘米,尝试做个苗条小车 先在线槽上安装了二只N20小电机 装上二个快餐盒盖做轮子 测试一下使用3.7V锂电池的动力系统(视频) https://v.youk…...
机器学习基础算法及其实现
线性回归 知识点: 1. 线性回归模型可以使用不同的目标函数,最常用的是最小二乘法、最小绝对值法和最大似然法。 2. 在最小二乘法中,目标是最小化实际值与预测值之间的误差平方和,这可以通过求导数等方法来求解。 3. 在最小绝对值…...
docker安装MinIO
简介 Minio 是一个面向对象的简单高性能存储服务。使用 Go 语言编写,性能高、具有跨平台性。 Minio 官网为:https://min.io ,有一个中文站点,单内容更新不是很及时,建议从原始官网学习。 本文采用 Docker 安装&…...
第5章 运算符、表达式和语句
本章介绍以下内容: 关键字:while、typedef 运算符:、-、*、/、%、、--、(类型名) C语言的各种运算符,包括用于普通数学运算的运算符 运算符优先级以及语句、表达式的含义 while循环 复合语句、自动类型转换和强制类型转换 如何编写…...
24考研数据结构-图的存储结构邻接矩阵
目录 6.3 储存结构(邻接表表示法)1. 储存方式2. 结构3. 图的邻接表存储表示(算法)4. 结论5. 邻接矩阵和邻接表的对比邻接矩阵优点:缺点: 邻接表优点:缺点: 邻接矩阵与邻接表的关系 6…...
在线推算两个日期相差天数的计算器
具体请前往:在线推算两个日期相差天数的计算器...
Spring源码解析(七):bean后置处理器AutowiredAnnotationBeanPostProcessor
Spring源码系列文章 Spring源码解析(一):环境搭建 Spring源码解析(二):bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三):bean容器的刷新 Spring源码解析(四):单例bean的创建流程 Spring源码解析(五)&…...
【C#学习笔记】引用类型(1)
文章目录 引用类型class匿名类 记录引用相等和值相等record声明 接口delegate 委托合并委托/多路广播委托 引用类型 引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。 对于引用类型,两种变量可引用同一对…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
