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