移动设备支持深度学习的能力研究
探索移动设备在支持深度学习方面的移动设备的能力
1 引言
随着移动处理器的快速发展,用户可以在移动设备上完成大量日常任务。特别是深度学习利用计算密集型模型(如深度神经网络(DNN)),在移动设备上掀起了一波新的应用程序浪潮,例如增强现实、图像分类和人脸识别。这类模型通常使用可扩展的云资源进行训练,耗时数百至数千小时。
这种纯云端深度学习方法存在几个严重缺陷:1)移动设备通常必须依赖现成的预训练模型,限制了模型对用户本地输入的适应能力;2)用户需要可靠的网络连接,以便向云端训练的模型提供输入并获取结果;3)移动设备数量及其收集的数据快速增长,将很快超出云系统的承载能力。
相比之下,使用移动设备进行深度学习具有以下重要优势:1)个性化——用户可以利用本地可用的数据对模型进行定制,以更好地满足当前需求;2)隐私——用于训练定制模型的数据若保留在用户自己的设备上,而非存储在云端的共享资源中,则能获得更好的保护;3)响应性——在设备上进行学习可以提供更快速的结果,且不受云端可能的服务中断或网络连接不稳定的影响。
研究人员和开发者正在积极研究新技术以支持移动设备上的学习,但普遍缺乏对这类设备支持学习能力的充分理解。例如,模型压缩技术[6, 18, 18, 23,29]可以减小模型的大小,使其适应移动设备。另一种方法是知识迁移,即在较大的云端网络监督下训练较小的设备上网络[3,38, 40, 44]。然而,这些研究主要关注深度学习的算法层面,并未充分探索这些算法在移动设备上的实际表现。先前的研究[24, 36]探讨了在移动平台上进行神经网络推理,但未考虑训练过程,也未充分探索现代移动设备的能力。
本文研究了移动设备在支持深度学习算法方面的软硬件能力。我们的研究主要关注以下四个方面:1)网络架构(宽度、深度和不同类型的层)对设备上学习的影响;2)利用设备上可用的加速器辅助学习的有效性;3)学习对设备资源和电池消耗的影响;以及(4)对在同一设备上运行的其他应用程序性能的影响。
由于目前没有主流的深度学习框架支持在移动设备上进行训练,我们扩展了广泛使用的深度学习框架TensorFlow(版本 r1.3)[1],,以实现训练功能。原始的TensorFlow安卓版仅支持推理,而我们的扩展使其也能在安卓平台上训练深度神经网络。我们还对TensorFlow进行了扩展,利用设备上的图形处理器加速学习过程,使TensorFlow能够使用RenderScript[17]来发挥异构硬件的优势,从而加速推理和训练。与之前的工作[2],相比,我们显著改进了TensorFlow,实现了对训练和推理的双重加速,并对加速效果进行了全面研究。
我们重点关注了为图像分类任务设计的深度神经网络( DNNs),自AlexNet赢得ILSVRC以来,这类网络已展现出令人印象深刻的能力。我们研究了代表上述两种利用移动设备进行深度学习方法的模型:1)MobileNet,一种专为适应移动设备资源限制而设计的压缩模型;2)学员网络,一种可在设备上运行并接受来自云端导师网络指导的小型网络。此外,我们还研究了在服务器平台学习中广泛使用的模型ResNet。
我们的测试平台包括几代移动设备,如Pixel 2、Nexus 7、 Nexus 5,以及物联网(IoT)平台Raspberry Pi 3B。
我们研究的最重要结果如下:1)网络的规模(宽度和深度)及其所使用的层类型不仅对满足设备能力至关重要,而且对学习性能也有重要影响。基于卷积层的模型对深度更为敏感,而基于全连接层的模型对宽度更为敏感。此外,在设备上,卷积层的计算开销明显更高(比全连接层慢两个数量级);2)硬件加速对于提高学习速度并减少对设备上其他应用程序的影响至关重要。通过使用设备的图形处理器(GPU)来加速深度学习的前向和反向传播过程,我们扩展后的TensorFlow可将训练时间缩短44.8%。总体而言,我们得出结论:使用移动设备支持深度学习是可行的,但我们需要注意网络架构,并充分利用可用的加速器来加快训练速度。
据我们所知,我们的工作是首次对移动设备上的深度学习进行全面研究。本研究的贡献如下:(1)扩展常用的深度学习框架(如TensorFlow),以支持在移动设备上进行训练;(2)启用GPU以加速移动设备上的训练和推理;(3)深入考察移动设备在支持使用深度神经网络进行训练和推理方面的移动设备的能力;(4)定量分析移动设备上的学习对资源使用和用户体验的影响。
本文的其余部分组织如下:第2节介绍背景与动机;第3 节描述本研究的方法;第4节展示实验结果的分析;第5节对全文进行总结。
2 背景与动机
2.1 深度学习和移动计算
深度学习是实现各种移动计算任务的关键,例如语音识别、自然语言处理、图像分类和目标检测。相比其他机器学习算法,深度神经网络在上述应用程序中实现了显著的准确率。图像分类是深度学习算法的主要应用之一,该任务计算密集且涉及大量数据。此类任务以图像作为输入,并利用神经网络为每幅图像标注其所属类别。
神经网络由多个连接层组成。层是一种用于网络模块化设计的抽象概念,每一层执行特定的数学操作。常见的层包括全连接层(连接到前一层的所有神经元并输出加权和)和卷积层(使用不同大小的卷积核提取输入重叠区域的特征)。
深度学习任务包括训练模型以及使用该模型进行推理。训练沿着网络的反向路径进行,并迭代地更新每一层的权重以逼近目标。推理则遵循前向路径,利用各层的训练好的权重根据输入进行预测。在图像分类的场景中,训练通过更新模型的权重来减小预测结果与真实标签之间的差异,而推理则以图像作为输入来预测图像类别。图1展示了四层卷积神经网络( CNN)的前向路径和反向路径。反向路径需要计算前一层输入的偏导数,相比前向路径涉及更多的计算。此外,每一层都需要存储中间结果,以便完成偏导数的计算。因此,反向路径在计算和存储方面的要求均高于前向路径。
移动计算技术的快速发展正在推动更多基于学习的应用程序。这些应用程序通常计算密集且数据密集,但移动设备具有只有有限的资源。设备上的处理器设计侧重于高能效,而非高性能。由于设备的小巧外形,可用内存非常有限。设备由容量有限的电池供电。因此,充分理解移动设备在深度学习方面的移动设备的能力,对于边缘和移动计算领域许多正在进行和未来的研发工作至关重要。
2.2 在移动设备上学习
本文的结果可以为在移动和嵌入式设备上实现深度学习的多项相关工作带来益处。我们可以将这些工作 broadly 分为以下三个类别:
模型压缩。 有多种压缩技术可用于降低深度神经网络的复杂性,使其能够在设备上进行推理,包括:(1) 权重重用,通过使用单个值表示一组权重来减少网络参数的内存占用 [6, 18]; (2) 剪枝,通过消除低于预设阈值的权重来降低模型复杂度 [29];(3) 量化,通过减少表示权重所需的位数来缩小模型大小 [23];以及 (4) 编码,通过对中间层输出进行编码以减少内存占用 [22]。
知识迁移。 在云端训练的大型网络(导师网络)可以将其学习到的代表性特征迁移到在设备上训练的小型网络(学员网络),从而提高后者的准确性和收敛速度。知识迁移技术受到黑暗知识(DK)研究[19],的启发,该研究从softmax层输出中提取信息。Romero等人[38]扩展了DK方法,将学员网络的中间层也用于知识迁移。Sharma等人比较了不同知识迁移技术的有效性[40]。DeCAF[7]是一种相关解决方案,它仅对预训练模型的最后一层进行重新训练,以适应新的学习任务。
联邦学习 [25, 42]是一种通过聚合在移动设备上训练的多个小型分布式模型,在中心化服务器上训练大型全局模型的解决方案。每个移动设备作为一个节点,使用其本地数据从其小型模型中计算更新。该节点随后将此更新发送到全局模型。由于与全局共享输入数据相比,更新全局模型被认为隐私敏感性较低,因此联邦学习可以降低暴露用户数据的风险。
上述相关研究主要关注将移动设备应用于深度学习的算法方面,但并未充分探索这些算法在真实设备上的实际表现。此外,还有一些相关工作仅探讨了在移动设备上进行推理的应用。Lane等人提出了一种用于移动感知的推理引擎[28]。M. Alzantot等人和S. Rallapalli等人[2, 36]研究了使用设备端 GPU加速推理的方法。Neurosurgeon [24]考虑将网络层在设备与云端之间进行层分割,并针对推理速度和能耗进行优化。Chen等人[5]提出了一种编译器,可将深度学习部署到包括手机在内的不同硬件后端上。这些研究均未考虑训练,而训练比推理更具挑战性,并且对越来越多的移动应用[16]正变得愈发重要。此外,这些研究也未充分考虑现代移动设备的各种能力。
| 推理 | 训练 | 加速 | |
|---|---|---|---|
|
TensorFlow Mobile
TensorFlow Lite PyTorch Deeplearning4j MXNet Chainer MLib CNTK | ✓ | ✗ | ✗ |
| ✓ | ✗ | ✗ | |
| ✓ | ✗ | ✗ | |
| ✓ | ✗ | ✗ | |
| ✓ | ✗ | ✗ | |
| ✗ | ✗ | ✗ | |
| ✗ | ✗ | ✗ | |
| ✗ | ✗ | ✗ |
以支持深度学习。因此,迫切需要进行全面研究,以充分探索移动设备上深度学习的所有这些重要方面。本文其余部分将介绍我们的 findings。
3 方法论
3.1 将TensorFlow移植到移动设备
为了进行这项研究,我们需要一个能够在移动设备上支持训练和推理的框架。一些广泛使用的深度学习框架都有针对移动设备设计的版本,例如 TensorFlow Mobile [15],、 TensorFlow Lite [13], 和 Caffe 2[10],,但它们仅支持使用预训练网络进行推理。表1 对比了主流框架在移动设备上执行深度学习任务的能力。大多数框架仅支持在移动设备上的推理。
我们决定扩展 TensorFlow Mobile,使其也支持训练。TensorFlow 使用数据流图来表示计算。在数据流图中,节点表示操作,边表示被前一个或后一个计算所使用或生成的数据。多个操作构成一层,这是深度学习框架中的核心抽象,用于设计上的模块化。图2 展示了 TensorFlow 的通用架构(左侧)以及模型训练的数据流图(右侧)。
TensorFlow 由多个层组成。底层为各种设备编程模型提供了不同操作的具体实现,从而实现了在不同类型处理器上的加速。此外,它还提供了训练深度神经网络所需的各种类型操作。顶层则提供了多种接口以利用其核心功能。在我们的案例中,我们使用了 Java 接口并扩展了 Android 库以支持训练。图的右侧展示了训练过程的数据流,其中包括前向和反向计算。在前向路径中,层调用正常的计算内核(A、B),而在反向路径中,它们调用这些内核的梯度计算函数(C、D、E)。
TensorFlow Mobile 仅提供支持推理相关操作的接口。为了在设备上训练深度学习模型,我们扩展了该接口以支持训练。我们需要首先修改 Java 接口以支持与训练相关的操作,其次将训练所需的所有缺失库添加到 Android 库中。训练过程涉及的操作比推理过程更多。不同
从推理来看,训练过程需要执行一些不生成任何预测的操作,例如变量初始化。为了支持所有与训练相关的操作,我们修改了 Java接口中的Run()函数,使其能够执行不产生预测的操作。我们使用修改后的Run()函数来初始化所有变量并执行与训练相关的操作。然后,通过将卷积核从TensorFlow C++ core移植到安卓,我们将缺失的卷积核添加到了TensorFlow Mobile中。
我们称上述扩展框架为TensorFlow+。它利用在Python中定义的模型图,并提供与服务器端TensorFlow相同的设备上训练接口。模型图采用Protobuf格式,且不冻结任何变量。TensorFlow+通过TensorFlow Java接口加载模型图,然后从设备逐批加载数据集图像。通过使用我们的支持训练的 Java接口,TensorFlow+能够在设备上按照与服务器端 TensorFlow相同的方式训练网络模型。
3.2 加速推理和训练
我们进一步改进了我们的解决方案,以利用移动设备上可用的加速器(如GPU)来加速深度学习操作。现有的移动版 TensorFlow在安卓平台上仅使用中央处理器。它依赖于 Eigen库[9],,这是一个针对线性代数运算及相关算法优化的高级C++库。但随着网络模型变得越来越复杂(更深更宽),这种基于CPU的方法变得低效。与此同时,移动设备上日益普及的加速器使得利用它们来加速设备上的深度学习成为可能。
我们的通用方法是使用RenderScript[12]框架来实现深度学习中计算量大的操作。RenderScript在运行时间利用源自C99[37]标准的语言,在不同的处理器上并行化工作负载。在移动设备上利用GPU的其他选择还包括OpenGL ES和 OpenCL。但OpenGL ES主要用于图形任务;为了用它加速计算任务,我们需要自行实现所有功能,包括矩阵乘法。然而, OpenCL并未得到安卓系统的官方支持。此前 RSTensorFlow[2]采用了与我们相同的方法来加速推理过程中的矩阵乘法和卷积操作,这仅涉及DNN的前向路径。但它对卷积操作的加速效果不佳(卷积操作约占前向路径时间的 75%)。此外,它也不支持对DNN的反向路径进行加速,而反向路径是训练中最耗时的部分,根据我们的研究,其占总训练时间的70%。
为了加速DNN的反向路径,我们需要加速梯度计算。在 TensorFlow中,梯度在两个独立的卷积核中进行计算: conv_grad_input和conv_grad_filter,它们分别计算相对于输入和 filter的梯度。这两个卷积核涉及的主要计算是矩阵‐矩阵运算。在TensorFlow+中,我们将基于Eigen的实现替换为 RenderScript的单精度矩阵乘法(SGEMM),以加速梯度计算。SGEMM API执行操作C = α ⇥op(A)⇥ op(B)+ β ⇥ C,其中A、B和C为矩阵,α和β是参数。在conv_grad_input卷积核中,计算涉及三个矩阵:输入、 filter和输出。TensorFlow+ 将conv_grad_input卷积核中的矩阵重定向到SGEMM实现,以加快计算速度。类似地,TensorFlow+也使用SGEMM API来加速conv_grad_filter卷积核。除了GPU外,我们还考虑使用最近发布的Pixel视觉核心(PVC)——一种专用的图像处理器,以加速移动设备上的学习。然而,安卓提供用于访问该加速器的唯一API——Android神经网络(ANN)API,仅支持推理,不支持训练。
总之,我们将广泛使用的深度学习框架TensorFlow移植到了安卓平台,支持训练和推理,并通过利用移动设备上可用的加速器(图形处理器)提高了其性能。在下一节中,我们将对我们的解决方案TensorFlow+进行全面的评估,并分析移动设备在支持深度学习方面的性能。
4 评估
4.1 实验设置
模型。 我们考虑了适用于移动设备的网络架构,因为常用的 DNN模型(如VGG16)对于设备的内存大小来说过大。因此,我们首先研究了一种基于学员网络的架构,该架构最初为知识迁移而提出[19],,包含 个卷积层和三个全连接层,总共约有 2689万参数。我们还考虑了MobileNet[20],一种广泛用于移动和嵌入式设备上视觉应用程序的网络模型[41]。然而,该网络在训练时仍无法适应我们的测试设备,因此我们将基础 MobileNet模型缩减为一个六层模型(总共约548万参数),代价是损失部分准确率(相比原始模型Top‐5准确率下降约1%, Top‐1准确率下降约9%)。类似地,我们也把ResNet[45],一种在服务器平台上流行的模型 缩减为八层模型,以便能适配我们的测试设备。表2列出了这些模型的详细架构。
数据集。 我们研究了多种常用的数据集,并意识到由于内存有限,较大的输入往往迫使批量大小只能设置为较小的值。因此我们选择了 CIFAR-10,它包含 60 [11, 21, 30, 43], 000 32⇥32 10, ,图像,并且被广泛用于深度学习工作中作为基准数据集。使用CIFAR‐,我们能够以128的合理批量大小进行实验。
设备。 我们在几款不同代的移动设备上获得了实验结果,包括2012年发布的Nexus 7、2013年发布的Nexus 5以及2017年发布的Pixel 2。我们选择这些设备是因为它们代表了不同代的设备。例如,Pixel 2 的硬件规格与 iPhone 8 和三星 Galaxy S8 相似。Pixel 2 于2017年10月发布,基于高通骁龙835系统级芯片,配备八核高通Kryo 280 CPU,主频为2.45 GHz,以及运行在1866 MHz的4 GB LPDDR4内存。苹果iPhone 8也在相近时间发布,搭载A11仿生芯片,配备2.39 GHz六核(2 ⇥ Monsoon + 4 ⇥ Mistral)处理器和2133 MHz LPDDR4内存。Pixel 2 和 iPhone 8 在中央处理器速度和内存速度方面具有相似的规格。我们还在树莓派3B+上进行了实验,这是一个常用的物联网(IoT)平台,用于探索新兴物联网设备支持深度学习的能力。作为基线,我们还从一台典型的
| 规格 | Pixel 2 | Nexus 7 | Nexus 5 | Resberry Pi 3B+ | 服务器 |
|---|---|---|---|---|---|
| CPU | 2.45 GHz 八核 Kryo | 1.5 GHz四核Krait 300 | 2.26 GHz 四核 Krait 400 | 1.4 GHz 四核 Cortex A53 | 双路 Intel Xeon E5‐2630 |
| GPU | 710 MHz Adreno 540 | 400 MHz Adreno 320 | 450 MHz Adreno 330 | Nvidia Tesla K40 | |
| 内存 | 4 GB | 2 GB | 2 GB | 1 GB | 64 GB |
| OS | 奥利奥8.1.0 | 棉花糖6.0.1 | 棉花糖6.0.1 | Rasbian | Ubuntu 16.04 LTS |
表3:测试平台规格
4.2 总体性能和资源使用情况
我们首先研究在移动设备上使用 TensorFlow 训练学员网络、 MobileNet 和 ResNet 网络的性能和资源使用情况(不使用加速器)。
图3a展示了在不同平台上使用学员网络进行训练和推理的运行时间。训练和推理的批量大小均为128。训练结果仅针对一批图像的一次单次迭代。我们可以观察到,随着移动平台的持续进步,性能得到了显著提升。有趣的是,设备与服务器之间的性能差距在推理阶段比在训练阶段更为明显。例如,像 Pixel 2这样的高端设备,其训练时间比服务器更长,而推理时间也更长。
图3b和图3c显示了上述训练和推理实验的平均中央处理器和内存利用率。结果证实,训练和推理均对中央处理器要求较高。它们在训练和推理期间的平均内存利用率并不高。训练和推理都不需要进行频繁的内存分配,主要的内存分配发生在初始化阶段,此时系统需要为存储模型的参数和一批图像分配内存。随后,中央处理器执行计算,直到该批图像被完全处理完毕。
图3d比较了在Pixel 2上使用学员网络执行深度学习任务时各种情况下的电池消耗:(A)设备屏幕关闭时的训练/推理; (B)设备屏幕开启时的训练/推理。我们还测量了设备处于待机模式时的电池消耗作为基线。电池消耗通过设备电池的实时电流与电压相乘计算得出。我们使用安卓提供的接口测量实时电流。常用的性能分析工具Trepn [34],不支持Pixel 2,但我们使用它在较旧设备上验证了我们方法的正确性。结果证实,训练对设备的电池续航有合理的影响。
图4和图5展示了使用批量大小为128的简化六层 MobileNet模型和简化八层ResNet模型的训练时间和推理时间结果。训练结果仅针对一批图像的一次single迭代。从 MobileNet和ResNet的结果中,我们可以得出与上述学员网络实验类似的结论。为了简洁起见,在本文其余部分中,我们仅展示来自Pixel 2(一种较新一代的移动设备)的结果。
尽管上述结果证实了在移动设备上进行学习的可行性,但也表明仅依赖中央处理器无法实现移动设备上的高效训练。即使这些模型是专门为移动设备设计的,对单批图像进行一次迭代的训练时间也超过10秒。要达到较高的准确率,训练过程需要约100个训练轮次,这在移动设备上将耗时超过100小时。
为了加速如此漫长的训练过程,我们需要利用移动设备上的硬件加速器(如图形处理器)。我们将在第4.5节评估 TensorFlow+对硬件加速的支持情况。
4.3 仅全连接层和卷积层的模型
为了进一步研究在移动设备上训练深度神经网络的成本,我们仔细分析了深度神经网络中计算开销最大的两个基本模块——全连接层和卷积层
表4:仅全连接层模型中浮点运算次数( flops)和参数数量的估计。第一行表示模型的宽度,第一列表示模型的深度。每个单元格中的值分别为运算次数 flops和参数数量。
| 64 | 128 | 256 | 512 | |
|---|---|---|---|---|
| 1 |
15.1G, 196K
15.4G, 200K 16G, 209K 17G, 225K |
30G, 393K
31G, 409K 34G, 442K 39G, 508K |
60G, 786K
65G, 852.48K 75G, 984K 95G, 1.25M |
121G, 1.57M
141G, 1.84M 181G, 2.36M 252G, 3.41M |
| 2 | ||||
| 4 | ||||
| 8 |
在接下来的几个小节中。我们设计了实验,使用仅包含全连接层或仅包含卷积层的简单模型(无激活层或池化层)。由于网络的复杂性取决于其深度(层数)和宽度(每层神经元的数量),我们改变了网络的深度和宽度,以研究它们对性能的影响。我们使用CIFAR‐10数据集作为测试输入,批量大小为
所有以下测试中均为128。我们使用一批图像进行了单次迭代的训练和推理。
4.3.1 仅全连接层模型。
图6展示了使用仅全连接层模型时,训练和推理时间随网络深度和宽度不同组合的变化情况(每个模型的参数数量和 floating point operations列于表4中)。当深度从一层增加到八层时,训练时间增加了100%;当宽度从64增加到512时,训练时间增加了254%。推理时间随着深度的增加最多增加85.7%,随着宽度的增加最多增加457%。这些结果表明,全连接层的训练和推理时间对宽度的敏感性高于对深度的敏感性。
为了验证上述理解,我们展示了仅全连接层模型的计算成本如何随模型的宽度和深度变化。我们以模型的浮点运算次数( flops)来衡量计算成本。图7显示了相对于宽度为64的单层模型归一化后的结果。结果证实,仅全连接层模型的计算成本确实对宽度比对深度更敏感。全连接层中的每个神经元都需要与下一层的所有神经元进行交互,这解释了其对宽度的敏感性。基于这一观察,我们认为窄而深的模型更适合移动设备。
表5:仅卷积层模型中浮点运算次数(flops)和参数数量的估计值。第 first行表示模型的宽度,第 first列表示模型的深度。每个单元格中的数值分别为 flops数量和参数数量。
| 64 | 128 | 256 | 512 | |
|---|---|---|---|---|
| 1 |
1.3G, 1.7K 30G, 38.7K
88G,112K 204G, 260K |
2.7G, 3.5K
118G, 15K 350G, 446K 814G, 1M |
5.5G, 7K
469G, 597K 1397G, 1.78M 3253G, 4M |
11G, 14K
618G, 237M 5577G, 7.09M 13000G, 537M |
| 2 | ||||
| 4 | ||||
| 8 |
4.3.2 仅卷积层模型。
图8显示了使用不同配置的仅卷积层模型的训练时间和推理时间(每个模型的参数数量和浮点运算次数列于表5中)。当深度从一层增加到八层时,训练时间增加了 125⇥;当宽度从64增加到512时,训练时间增加了 64⇥。推理时间随着深度的增加最多增加625⇥,随着宽度的增加最多增加 75⇥。因此,仅卷积层模型的训练时间对深度增长的敏感性远高于宽度,这与仅全连接层模型的观察结果相反。
理论上,卷积层的计算成本与以下公式成正比:Dk ⇥Dk ⇥ M ⇥ N ⇥Df ⇥Df[20],,其中Dk表示卷积核的大小,M和N分别表示输入通道和输出通道的数量,Df表示 filter的大小。因此,将M的大小加倍所增加的成本大约相当于引入一个新层的成本。在仅卷积层模型中,使用不同宽度和深度进行训练时对 ops的测量也证实了上述理论。图9显示,与宽度增加相比,当深度增加时, ops的数量增长要快得多。卷积层对宽度的敏感性也体现在其内存需求上。当网络模型的宽度为512时,四层和八层的仅卷积层模型甚至由于内存不足错误而无法在设备上运行。
最后,比较仅包含全连接层和仅包含卷积层的模型之间的训练时间,后者
平均而言,具有相同深度和宽度的情况下,所需时间比前者多两个数量级。当模型不复杂时,仅卷积层模型的参数数量少于仅全连接层模型。但随着模型变得更为复杂,仅卷积层模型的参数数量增长速度远快于仅全连接层模型,如表4和表5所示。当宽度为128、深度为4时,仅卷积层模型的参数数量与仅全连接层模型大致相同。当模型深度为8层、宽度为512个神经元时,仅卷积层模型的参数数量是仅全连接层模型的4.85倍。参数数量的更快增长也解释了为何仅卷积层模型在深度增加时比仅全连接层模型更敏感。
为了降低卷积层的计算成本,Howard等人提出了深度可分离卷积[20],,该方法将标准卷积的计算过程分为两个步骤: 1)使用多个卷积核沿深度方向进行卷积,每个卷积核遍历输入的一个通道;2)使用1x1卷积核的标准卷积合并前一步骤中的所有结果。结果表明,深度可分离卷积相比标准卷积减少了 8到9倍的计算量,可能更适合移动设备上的深度学习。因此,我们也
探索移动设备在支持深度学习方面的移动设备的能力
4 评估(续)
4.3.2 仅卷积层模型(续)
评估了仅使用深度可分离卷积层的模型的性能。
图10比较了单个深度可分离卷积层(DW-conv)与单个标准卷积层(Conv)的训练时间。当宽度为64时,深度可分离卷积的训练时间已经快于标准卷积,且随着宽度增加,其训练时间增长不多。当宽度为512时,深度可分离卷积所需的训练时间仅为标准卷积的三分之一。在推理方面,当宽度为512时,深度可分离卷积的加速比为 2×。结果表明,深度可分离卷积在计算成本上确实显著优于标准卷积。
使用深度可分离卷积与标准卷积的主要权衡是速度与准确率之间的取舍。对于完整的MobileNet模型,实验结果表明,深度可分离卷积相比标准卷积的准确率损失为6%;而对于精简版MobileNet模型,准确率损失为12%。相比之下,我们观察到使用深度可分离卷积带来的加速比为 3×,这使其成为在资源受限设备上进行深度学习的一个值得选择的方案。
4.4 训练时间分解
先前的结果表明,在移动设备上,训练比推理耗费的计算资源要多得多,尤其是对于包含卷积层的模型。如图1所示,训练过程涉及更多计算密集型操作,例如梯度计算。为了了解哪些操作影响了训练时间,以及如何在移动设备上可能改进训练时间,我们分析了训练过程中各项操作的性能。
图11展示了四层仅卷积层模型的训练时间分解。在前向路径和反向路径中,卷积计算时间与输入尺寸成正比。我们还观察到,在前向路径中,卷积操作最慢;而在反向路径中,卷积梯度计算耗时最长。特别是,梯度计算时间占反向路径计算时间的91%,占总计算延迟的65%。上述结果促使我们将努力集中在降低梯度计算的计算延迟上,从而使移动设备能够更高效地支持深度学习任务。
4.5 硬件加速
在本节中,我们评估了TensorFlow+通过使用设备端GPU来加速训练所带来的性能提升。继上一节的讨论之后,我们首先评估加速单个卷积层训练中涉及的各个组件的有效性。图12显示,与TensorFlow的CPU实现相比,TensorFlow+减少了梯度计算中的计算时间。特别是,Conv2DbackpropInput的计算时间减少了37.5%,而Conv2DBackpropFilter的计算时间减少了90.6%。其他操作未被加速,其运行时间保持不变。基于此理解,接下来我们评估通过加速完整网络所实现的加速比。
图13显示了八层和四层仅卷积层模型在启用加速(TF+)和未启用加速(Eigen)情况下的训练时间。结果表明,硬件加速可实现最高达2.2×的加速比。为了展示加速反向路径的重要性(此前的研究[2]不支持该功能),我们还对比了仅使用RenderScript加速前向路径(RSTF)的性能,其加速比仅为30%。接着,我们进一步评估了加速在专为移动设备设计的真实网络MobileNet上的有效性。图14显示了简化后的六层MobileNet在启用加速(TF+)和未启用加速(Eigen)情况下的训练和推理时间。结果证实了在移动设备上使用硬件加速进行学习的有效性:训练加速比达到1.7×,推理加速比达到1.2×。
此外,我们还探讨了使用新的Pixel视觉核心(PVC)和Android神经网络API(ANN)的有效性以加速推理,与我们基于GPU的推理加速相比,显示出高达5.7×倍的加速比。GPU与PVC之间性能差异的原因有两点。首先,由于PVC拥有更多的算术逻辑单元(ALU),因此能够提供更高的吞吐量。PVC包含八个定制核心,每个核心具有512个ALU,而Adreno 540仅有256个ALU。PVC可提供3.28 Tflopes的原始计算能力,而Adreno 540仅能达到567 GFlops [14, 35]。其次,PVC使用TensorFlow Lite模型,其开销低于GPU所使用的TensorFlow模型。TensorFlow Lite使用优化转换器将预训练TensorFlow模型转换为TensorFlow Lite模型。该转换过程会对模型中的权重和偏置进行量化,以减少计算量和内存占用;同时融合激活以实现更好的数据级并行性。然而,PVC核心仅支持推理。因此,它能够很好地与通用GPU互补,在设备上分别用于加速推理和训练。
4.6 物联网设备上的深度学习
接下来,我们研究物联网设备在执行训练和推理方面的能力。我们使用精简版MobileNet模型,在常用于开发物联网应用的平台Raspberry Pi 3B+上进行训练和推理评估。
图15展示了在树莓派上运行精简版MobileNet模型的训练时间和推理时间。树莓派的内存比移动设备更少,我们只能在精简版MobileNet模型上运行批量大小为四的任务。资源利用率呈现出与我们在移动设备上结果相似的模式。单次迭代一批图像的训练时间要长6倍比推理时间更长。两者都比在移动设备上慢得多。缺乏加速器使得物联网设备支持深度学习任务更加困难。
4.7 用户体验
4.7.1 前台训练和后台训练。
由于训练是一项密集型任务,在后台运行可以减少对设备上其他应用程序用户体验的影响。因为安卓系统始终将前台应用程序的优先级设为高于后台应用程序,以快速响应用户输入,因此会向前台应用程序分配更多资源。与前台相比,后台训练因资源较少而不可避免地变慢。我们在图16中比较了在CPU和GPU上前台训练与后台训练的性能差异,结果表明前者比后者快3倍。
4.7.2 对其他应用程序的影响。
我们评估了学习任务对在同一设备上运行的其他应用程序性能的影响。我们使用移动基准测试 [33], PassMark 来模拟设备上的典型应用程序。该基准测试包含多个测试,可对设备的不同硬件组件施加压力。基准测试中的中央处理器测试包括寻找素数、加密和压缩,可用于模拟计算密集型任务。内存测试通过不同数据大小的块测量内存系统的访问延迟,可用于模拟内存密集型任务。图形测试通过在屏幕上渲染图像和类似游戏的场景来衡量图形处理器的渲染能力。
通过比较基准测试在运行学习任务和不运行学习任务时的性能,我们可以定量评估学习任务对其他应用程序的影响。由于
训练模型通常耗时较长且不需要用户交互,我们在前台运行基准测试的同时,在后台使用TensorFlow+进行训练。我们考虑了四种不同情况,即在有无图形处理器的情况下分别训练学员网络和MobileNet模型。图17显示了PassMark相对于无后台训练时独立性能的性能下降情况。
结果显示,训练对系统性能有显著影响,尤其是在中央处理器上运行时。训练MobileNet和学员网络时的中央处理器利用率分别约为305%和348%,导致PassMark中央处理器测试性能最高下降30%。结果还显示,在中央处理器性能测试中,精简版MobileNet相比学员网络的性能下降减少了15%。当模型在图形处理器上运行时,我们观察到中央处理器负载降低,从而减少了10%的性能下降。
内存测试结果表明,训练对内存密集型应用也有相当显著的影响。与学员网络相比,训练精简版MobileNet的影响较小,因为前者的网络相对更小。由于在移动SoC上中央处理器和图形处理器共享内存,将训练任务卸载到图形处理器无法减轻对内存性能的影响。
在图形体验方面,移动设备在运行训练任务时,2D 和 3D 渲染的得分均下降约 5%。值得注意的是,由于学员网络具有更宽的网络结构,能够增加数据并行性,因此相较于 MobileNet 能够利用更多的图形处理器(高出 50%)。但总体而言,训练对图形处理器密集型应用程序的性能影响远小于对中央处理器密集型应用程序的影响,这表明移动设备的图形处理器具备相当强的能力。
4.7.3 对用户交互的影响。
我们还研究了运行深度学习任务对用户交互的影响。我们的目标是了解运行深度学习任务是否会影响用户与设备的交互体验。我们通过一个应用程序进行测量,该应用程序通过从触摸屏获取用户输入并执行各种任务来模拟用户与设备的交互。根据用户输入,移动设备将在屏幕上渲染不同的输出响应。
通过分析针对用户输入的帧渲染数据,我们可以定量地理解用户交互。我们使用安卓 dumpsys工具 [8] 来收集帧渲染数据的聚合分析。有两个关注的指标:1)响应时间,即应用程序处理用户输入所需的时间;2)帧延迟,即根据用户输入完成新帧渲染所需的时间。我们再次通过在 Pixel 2 上训练计算密集型的学员网络(相比精简版 MobileNet),对系统施加压力。
表6列出了三种不同设置下的第90百分位响应时间和帧延迟:1)后台不进行训练(baseline);2)在中央处理器上训练学员网络(CPU);3)在图形处理器上训练学员网络(GPU)。结果表明,深度学习任务对用户输入处理的影响极小。当在中央处理器上进行训练时,响应时间仅增加了0.03毫秒,在图形处理器上训练时响应时间保持不变。我们可以得出结论,深度学习任务带来的影响对用户而言是不可感知的,因为可感知延迟的最小阈值为100毫秒[4, 31, 32]。
帧延迟结果显示,无论是在中央处理器还是图形处理器上进行训练,该应用程序每秒都能渲染超过60帧。在中央处理器和图形处理器上训练时,帧延迟分别仅增加0.26毫秒和0.29毫秒。如果一个应用程序以每秒60帧的速度渲染,则每帧的渲染截止时间为16毫秒(1000毫秒/60= 16毫秒)。运行深度学习任务所增加的帧延迟可以忽略不计,这意味着后台训练并未影响应用程序提供的图形体验。
| 基线 | CPU | GPU | |
|---|---|---|---|
| 第99百分位响应时间(毫秒) | 0.21 | 0.24 | 0.21 |
| 第99百分位帧延迟(毫秒) | 5.49 | 5.75 | 5.78 |
表6:后台训练对用户交互的影响。响应时间表示应用程序对用户输入事件的响应速度。帧延迟是指在发生用户输入事件后渲染一帧所需的时间。
5 结论
本文全面研究了移动设备在支持深度学习任务方面的软硬件能力。我们得出结论:移动设备能够以合理的性能和对用户体验的合理影响来支持使用深度神经网络进行推理和训练。但由于移动设备上资源可用性有限,我们需要精心设计深度学习模型以控制其复杂度,尤其是针对训练过程。联邦学习和知识迁移等新的学习范式是利用移动设备并提升深度学习效果的有前景的方法。我们的工作阐明了这些方法在现代智能手机和物联网平台上的有效性。
具体而言,我们的研究结果表明,网络的宽度和深度对不同类型的层具有不同的性能影响。全连接层对宽度更敏感,而卷积层对深度更敏感。这一见解有助于我们设计适用于移动设备的模型。我们的研究结果还表明,在移动设备上利用图形处理器对训练性能至关重要,而专用的图像和AI处理器在推理方面可实现显著的加速比。因此,结合使用这些加速器将极大有利于移动设备上的深度学习任务。另一个发现是,在设备后台运行深度学习任务对前台任务、用户交互以及资源和电池消耗的影响较小。
我们的解决方案,TensorFlow+,为移动设备上的深度学习对TensorFlow进行了多项关键扩展,包括支持训练和基于GPU的加速。它是开源的,并且可公开访问[27]。
6 致谢
本研究由美国国家科学基金会CAREER奖CNS‐1619653以及奖项CNS‐1562837、CNS‐1629888、IIS‐1633381和 CMMI‐1610282资助。我们感谢指导人阿坎克莎·乔杜里以及匿名评审人提供的宝贵建议。同时,我们也感谢赵凯奇、洪圣浩和尤金·库兹涅佐夫在论文评审过程中给予的帮助。
更多推荐



所有评论(0)