当前位置: 首页 > news >正文

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工作负载的性能需求。目前有如下的解决方案:

    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层。

相关文章:

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 委托合并委托/多路广播委托 引用类型 引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。 对于引用类型,两种变量可引用同一对…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

今日科技热点速览

🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...