动态分配多任务资源的移动端深度学习框架

简介: 与云相比,移动系统受计算资源限制。然而众所周知,深度学习模型需要大量资源 。为使设备端深度学习成为可能,应用程序开发者常用的技术之一是压缩深度学习模型以降低其资源需求,但准确率会有所损失。尽管该技术非常受欢迎,而且已被用于开发最先进的移动深度学习系统,但它有一个重大缺陷:由于应用程序开发者独立开发自己的应用,压缩模型的资源-准确率权衡在应用开发阶段的静态资源预算的基础上就被预先确定了,在应用部署后仍然保持不变。

与云相比,移动系统受计算资源限制。然而众所周知,深度学习模型需要大量资源 。为使设备端深度学习成为可能,应用程序开发者常用的技术之一是压缩深度学习模型以降低其资源需求,但准确率会有所损失。尽管该技术非常受欢迎,而且已被用于开发最先进的移动深度学习系统,但它有一个重大缺陷:由于应用程序开发者独立开发自己的应用,压缩模型的资源-准确率权衡在应用开发阶段的静态资源预算的基础上就被预先确定了,在应用部署后仍然保持不变。

然而,由于开启新应用、关闭现有应用和应用优先级改变等事件,这些系统的可用运行时资源是动态变化的。因此,如果可用运行时资源无法满足压缩模型的资源需求,这些同时运行的应用就会互相争夺资源,导致流视频的处理帧率较低。另一方面,在有额外的运行时资源时,压缩模型也无法利用这些额外资源来修复准确率损失。

本文提出了一种新型框架 NestDNN,将运行时资源的动态变化纳入考量,生成一种资源感知的多重租赁设备端深度学习移动视觉系统。NestDNN 用灵活的资源-准确率权衡代替了固定的资源-准确率权衡。在运行时方面,该框架为每个深度学习模型动态地选择最优资源-准确率权衡,以满足模型对系统可用运行时资源的需求。采用这种方法,NestDNN 可以高效利用移动视觉系统中的有限资源,最大化所有并行应用程序的性能。

挑战与对策。NestDNN 的设计面临两大挑战。(i)现有方法的局限在于:压缩模型的资源需求和准确率之间的权衡是固定的。因此,第一大挑战在于设计一个能让深度学习模型提供灵活的资源-准确率权衡的方案。一种朴素的方法是在移动系统中安装所有具备可能资源-准确率权衡的模型变体。然而,由于这些模型变体各自独立,这种方法无法扩展,在移动系统同时运行多个深度学习模型(每个模型又有多个变体)时不具备可行性。(ii)为每个同时运行的深度学习模型选择资源-准确率权衡非常关键。这是因为不同的应用具有不同的推断准确率和处理延迟目标。以路况监督无人机为例:一个通过车辆计数来检测交通拥堵的应用不需要很高的准确率,但要求低延迟;而一个读取车牌的应用程序需要很高的车牌读取准确率,但不需要实时响应 [39]。

为应对第一个挑战,NestDNN 部署了一个新的模型剪枝和复原方案(recovery scheme),将深度学习模型转换为紧凑的多容量模型(multi-capacity model)。这一多容量模型由一组派生模型组成,每个派生模型提供不同的资源-准确率权衡。与彼此独立的传统模型变体不同,容量(即资源需求)较小的派生模型与拥有较大容量的派生模型共享模型参数,使其自身嵌入到较大容量的派生模型中,而无需占用额外的内存空间。采用这种做法,这种多容量模型可以提供多个资源-准确率权衡,其内存占用也较为紧凑。

为了应对第二个挑战,NestDNN 将每个并行应用的每个派生模型的推断准确率和处理延迟编码为一个成本函数。在给定所有成本函数的情况下,NestDNN 使用资源感知运行时调度器(resource-aware runtime scheduler)为每个深度学习模型选择最优资源-准确率权衡,并确定分配给每个模型的最佳运行时资源,以同时最大化整体推断准确率,最小化所有并行应用程序的总体处理延迟。

据我们所知,NestDNN 是第一个支持资源感知的多重租赁设备端深度学习移动视觉系统的框架。它为克服现有方法的局限性以及连续移动视觉中的独特挑战提供了新的技术。我们相信,我们的工作是将连续移动视觉的设想变为现实的重要一步

实验结果总结

我们开展了一系列实验来评估 NestDNN 的性能。为了评估多容量模型的性能,我们在六个移动视觉应用程序上对其进行了评估,这些应用针对移动视觉系统中一些最重要的任务。这些应用程序的开发基于两种广泛使用的深度学习模型——VGG Net [33] 和 ResNet [13],以及计算机视觉社区中常用的六个数据集。为了评估资源感知运行时调度器的性能,我们结合了两种广泛使用的调度方案,并在三部智能手机上实现了 NestDNN 和六款移动视觉应用程序。我们还实施了现有方法,该方法使用固定的资源-准确率权衡,因此是不考虑资源的。为了比较我们的资源感知方法和不考虑资源的现有方法之间的性能,我们设计了一个基准来模拟不同场景中的运行时应用程序查询。结果表明:

多容量模型能够提供嵌套在单个模型中的灵活、优化的资源-准确率权衡。通过参数共享,它显著减少了模型内存占用和模型切换开销。

资源感知运行时调度器在两种调度方案上都优于不考虑资源的调度器,推断准确率提高了 4.2 %,视频帧处理速度提高了 1 倍,能耗降低了 40%。

NestDNN 框架概览

1 展示了 NestDNN 的架构,由离线阶段和在线阶段组成。

离线阶段包含三个子阶段:模型剪枝(model pruning)、模型复原(model recovery)和模型配置(model profiling)。

9f88977476a631a4548319c674f55a49ea5fe446 

1:NestDNN 架构示意图

在模型剪枝阶段,NestDNN 使用当前最佳的三联响应残差(Triplet Response Residual,TRR)方法,基于给定深度学习模型(即原版模型)滤波器的重要性对滤波器进行排序,并迭代地对滤波器进行修剪。在每次迭代中,重要性较低的滤波器被裁剪,然后剪枝模型被重新训练以补偿滤波器修剪导致的准确率降低(如果存在的话)。当剪枝模型无法达到用户设定的最低准确率时,迭代过程结束。最小的剪枝模型被称为种子模型(seed model)。最终,一个滤波器修剪路径图被创建出来,其中路径图中的每个占用是一个带滤波器修剪记录的剪枝模型。

2933aa6558409640fb72ddcaebb19dec22a7d1c4 

2:滤波器剪枝的图示 [23]。通过修剪滤波器,模型大小和计算成本都有所降低

在模型复原阶段,NestDNN 使用了一种新的模型固化(model freezing)和滤波器增长(filter growing)方法(即 freeze-&-grow),以迭代的方式生成多容量模型。模型复原使用种子模型作为起点。在每一次迭代中,模型固化被首先应用于固化所有滤波器的参数。然后按照滤波器修剪路径图的逆向顺序,应用滤波器增长将修剪的滤波器加回去,从而生成一个拥有更大容量的派生模型,其准确率通过重新训练而恢复。通过重复迭代,新的派生模型基于之前的模型而生成。因此,最终的派生模型拥有所有之前模型的容量,因而被命名为多容量模型。

a830c19b0a4a1bcd118eab9926a5bed1de305d75 

3:模型固化和滤波器增长图示

在模型配置阶段,给定一个移动端视觉系统的规范,NestDNN 为每个多容量模型生成一个配置文件,包括推断准确率、内存占用,以及每个派生模型的处理延迟。

7f651236f20da8ef5677a8f90aa12ada9e7bf1db 

4:多容量模型的模型切换(模型升级与模型降级)图示

最后,在在线阶段,资源感知运行时调度器持续监控改变运行时资源的事件。一旦检测到这种事件,调度器会检查所有并行应用程序的配置文件,为每个应用程序选择最佳派生模型,并为每个选择的派生模型分配最佳数量的运行时资源,以同时最大化整体推断准确率,最小化所有应用程序的总体处理延迟。

在不损失泛化性能的情况下,我们将 CIFAR-10、GTSRB 和 Adience-Gender 随机分配给 VGG-16,并将 ImageNet50、ImageNet-100 和 Places-32 分配给 ResNet-50,以分别创建被标记为 VC(即在 CIFAR-10 数据集上训练的 VGG-16)、RI-50、RI-100、VS、VG 和 RP 的六个移动视觉应用程序。我们严格遵循上述每个数据集提供的协议来训练和测试所有原版 DNN 模型和 NestDNN 生成的所有派生模型。

2 对这些数据集、DNN 模型和移动视觉应用程序进行了总结。

0b23879c0ed220035b96490967ddfb07daeadb91 

2:本研究使用的数据集、DNN 模型和移动视觉应用概览

多容量模型的性能

优化的资源-准确率权衡

如图 6 所示,我们从结果中得到两个关键结论。一,在这六个应用的不同大小的模型中,派生模型的准确率一直高于基线模型。派生模型的平均准确率比基线模型高 4.98%。这表明我们每个容量的派生模型都能够在给定内存条件下获得当前最优的推断准确率。二,规模较小的派生模型性能优于规模较大的派生模型。两个最小的派生模型的平均准确率比对应的基线模型高出 6.68%,而两个最大的派生模型的平均准确率比对应的基线模型高 3.72%。这是因为我们的 TRR 方法能够保存重要的滤波器,并剪掉不那么重要的滤波器。尽管容量小,但规模较小的派生模型从重要的滤波器中受益很多,而对应的基线模型无法从中获益。

319659898ed889a286a71605e9b7927c77668257 

6:派生模型和基线模型的 Top-1 准确率 vs. 模型大小对比

7 展示了六个应用的五个派生模型和对应原版模型的计算成本对比(指标:GFLOPs,即 GigaFLOPs)。如图所示,所有派生模型的 GFLOPs 都比对应原版模型低。这表明我们的滤波器剪枝方法能够有效减少这六个应用的计算成本,且该方法可泛化至在不同数据集上训练的不同深度学习模型。

777b4e8b18afb48434b225227af55054f44c55b2 

7:派生模型和原版模型的计算成本对比

内存占用减少

3 列举了六个移动视觉应用的对比结果。显然,每个应用的多容量模型的规模小于对应的累积模型(accumulated model)规模。此外,模型尺寸较大的深度学习模型从参数共享中受益更多。例如,VC 是六个应用中模型规模最大的。在参数共享方面,它的内存占用减少了 241.5 MB。最后,如果我们考虑同时运行这六个应用,则多容量模型内存占用减少 587.4 MB,在内存占用减少方面受益最大。

2f52a3d4bfb2f330ff5dd3ba8bf23ed6519a2abf 

3:多容量模型的内存占用减少状况

资源感知调度器(Resource-Aware Scheduler)的性能

推断准确率和帧率的改进

9(a) 展示了在 MinTotalCost 调度方案下,NestDNN 和基线模型的运行时性能对比。黄色圆圈代表基线模型的运行时性能。每个蓝色方块代表在公式(2)定义的损失函数中使用特定 α 进行调度时所获得的运行时性能。

9(b) 展示了在 MinMaxCost 调度方案下,NestDNN 和基线模型的运行时性能对比。当 NestDNN 和基线模型的平均 top-1 准确率一样时,NestDNN 的平均帧率速度是基线模型的 1.9 倍。当 NestDNN 和基线模型的平均帧率一致时,NestDNN 的平均准确率比基线模型高 4.2%。在「knee」处,NestDNN 相对基线模型达到了 1.5 倍的平均帧率加速和 2.1% 的平均准确率提升。

644524d00e94d28248b32963cd851c5be8c960f4 

9:在 (a) MinTotalCost 和 (b) MinMaxCost 机制下,NestDNN (资源感知) 和现有方法(不考虑资源)的运行时对比


能耗减少

除了推断准确率和帧率方面的改进以外,NestDNN 的能耗也比较低。图 10(a) 展示了在 MinTotalCost 调度方案下,在「knee」处,NestDNN 和基线模型的能耗对比。在不同的推断数上,NestDNN 的平均能耗相比基线模型减少了 40%。类似地,图 10(b) 展示了在 MinTotalCost 调度方案下的能耗对比。NestDNN 的平均能耗相比基线模型减少了约 33%。

a0edd581e79772adea0bcde9a8fd9321fdc7cb6e 

10:在 (a) MinTotalCost 和 (b) MinMaxCost 机制下,NestDNN(资源感知)和现有方法(不考虑资源)的能耗对比

相关文章
|
4月前
|
机器学习/深度学习 数据采集 算法
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
本文探讨了在深度学习和机器学习中针对非时间序列的回归任务的多种改进策略,包括数据预处理、数据集增强、特征选择、模型选择、模型正则化与泛化、优化器选择、学习率调整、超参数调优以及性能评估与模型解释,旨在提升模型的性能和可解释性。
85 1
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
|
4月前
|
机器学习/深度学习 数据采集 人工智能
《零基础实践深度学习》基于线性回归实现波士顿房价预测任务1.3.3
这篇文章详细介绍了如何使用线性回归算法实现波士顿房价预测任务,包括数据读取、形状变换、集划分、归一化处理、模型设计、前向计算以及损失函数的计算等步骤,并提供了相应的Python代码实现。
 《零基础实践深度学习》基于线性回归实现波士顿房价预测任务1.3.3
|
1月前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
49 7
|
1月前
|
机器学习/深度学习 自然语言处理 并行计算
DeepSpeed分布式训练框架深度学习指南
【11月更文挑战第6天】随着深度学习模型规模的日益增大,训练这些模型所需的计算资源和时间成本也随之增加。传统的单机训练方式已难以应对大规模模型的训练需求。
128 3
|
2月前
|
机器学习/深度学习 存储 自然语言处理
深度学习之任务序列中的快速适应
基于深度学习的任务序列中的快速适应是指模型在接连处理不同任务时,能够迅速调整和优化自身以适应新任务的能力。这种能力在动态环境和多任务学习中尤为重要,旨在减少训练时间和资源需求。
43 3
|
4月前
|
机器学习/深度学习 算法 前端开发
《零基础实践深度学习》波士顿房价预测任务1.3.3.5 总结
使用Numpy实现梯度下降算法来构建和训练线性模型进行波士顿房价预测的过程,并提供了模型保存的方法,同时提出了几个关于梯度计算、参数更新和神经网络训练的作业题目。
 《零基础实践深度学习》波士顿房价预测任务1.3.3.5 总结
|
3月前
|
机器学习/深度学习 人工智能 算法
操作系统的未来:从多任务到深度学习的演变之路
本文将探讨操作系统如何从处理简单多任务发展到支持复杂的深度学习任务。我们将分析现代操作系统面临的新挑战,以及它们如何适应人工智能和大数据时代的要求。文章不仅回顾过去,也展望未来,思考操作系统在技术演进中的角色和方向。
68 3
|
4月前
|
机器学习/深度学习 算法 TensorFlow
深入探索强化学习与深度学习的融合:使用TensorFlow框架实现深度Q网络算法及高效调试技巧
【8月更文挑战第31天】强化学习是机器学习的重要分支,尤其在深度学习的推动下,能够解决更为复杂的问题。深度Q网络(DQN)结合了深度学习与强化学习的优势,通过神经网络逼近动作价值函数,在多种任务中表现出色。本文探讨了使用TensorFlow实现DQN算法的方法及其调试技巧。DQN通过神经网络学习不同状态下采取动作的预期回报Q(s,a),处理高维状态空间。
69 1
|
4月前
|
机器学习/深度学习 算法 数据处理
《零基础实践深度学习》波士顿房价预测任务1.3.3.4训练过程
这篇文章详细阐述了如何使用线性回归对波士顿房价进行预测,包括构建神经网络模型、数据处理、模型设计、训练过程、梯度下降法以及随机梯度下降法(SGD)的应用,并提供了完整的Python代码实现。
|
4月前
|
机器学习/深度学习 算法 程序员
《零基础实践深度学习》波士顿房价预测任务 02
这篇文章通过"波士顿房价预测"任务,介绍了使用Python和Numpy构建神经网络模型的基本思路和操作,首先以线性回归模型为例,解释了神经网络中损失函数的选择和模型的构建过程。
下一篇
DataWorks