苏黎世联邦理工学院曾经开发了一款 AI Benchmark 应用,用于测试不同安卓设备和芯片的深度学习性能。近期,他们联合谷歌、高通、华为、联发科以及 Arm 发布了一篇 AI Benchmark 综合测试结果的论文,对超过 10000 部移动设备进行了定量 Benchmark 测试,涵盖了当今所有主要硬件配置,并全面比较了高通、海思、联发科和三星芯片组的 AI 加速性能。
论文:AI Benchmark: Running Deep Neural Networks on Android Smartphones
论文地址:https://arxiv.org/pdf/1810.01109.pdf
摘要:近年来,手机、平板等移动设备的计算能力显著提升,达到了台式计算机不久之前的水平。尽管标准智能手机 app 对于手机来说已经不成问题,但还有一些任务(即运行人工智能算法)可以轻易难倒它们,甚至高端设备也不例外。本文介绍了深度学习在安卓生态系统中的现状,介绍了可用的框架、编程模型以及在智能手机上运行人工智能算法的局限性。我们概述了四个主要移动芯片组平台(高通、海思、联发科和三星)上的可用硬件加速资源。此外,我们还展示了用 AI Benchmark 收集的不同移动 SoC 的真实性能结果,AI Benchmark 的测试涵盖了当今所有主要硬件配置。
图 1:为第三方人工智能应用程序提供潜在加速支持的移动 SoC。
AI Benchmark
AI Benchmark 是一款安卓应用程序,旨在检测在移动平台上运行 AI 和深度学习算法的性能和内存限制。该 Benchmark 包含由直接在安卓设备上运行的神经网络执行的几项计算机视觉任务。测试使用的网络代表了当前可部署在智能手机上的最流行、最常用的架构,其详细描述及应用程序的技术细节如下。
任务 1:目标识别/分类
神经网络:MobileNet - V1 | CPU, NPU, DSP
图像分辨率:224 x 224 px
ImageNet 准确率:69.7%。
这是一个非常基础但很强大的神经网络,能够基于一张照片识别 1000 个不同的对象类别,准确率约为 70%。经过量化,其大小可小于 5Mb,再加上低耗内存,它可在几乎所有现有智能手机上使用。
任务 2:目标识别/分类
神经网络:Inception - V3 | CPU, NPU, DSP
图像分辨率:346 x 346 px
ImageNet 准确率:78.0 %
这是对上一个网络的进一步扩展:更加精确,但代价是规模是原来的 4 倍且对计算的要求较高。一个明显的优势是——它可以处理分辨率更高的图像,这意味着更精确的识别和更小目标的检测。
任务 3:人脸识别
神经网络:Inception - Resnet - V1 |CPU
图像分辨率:512x512 px
LFW 得分:0.987
这个任务无需过多介绍:根据人脸照片识别出这个人。实现方式如下:对于每个人脸图像,神经网络会对人脸编码并生成一个 128 维的特征向量,该特征向量不随缩放、移动或旋转而改变。然后,在数据库中检索和此向量最匹配的特征向量(以及对应的身份),数据库里包含数亿个此类信息。
任务 4:图像去模糊
神经网络:SRCNN 9-5-5 | CPU, NPU, DSP
图像分辨率:300 x 300 px
Set-5 得分 (x3):32.75 dB
还记得用手机拍出的模糊照片吗?这个任务就是:让图片变得清晰。在最简单的情况下,这种失真是通过对未损坏的图像应用高斯模糊来建模的,然后尝试使用神经网络来恢复它们。在这个任务中,模糊是通过一种最原始、最简单、最轻量级的神经网络 SRCNN(只有 3 个卷积层)去除的。但是即便如此,它仍然显示出相当令人满意的结果。
任务 5:图像超分辨率
神经网络:VGG - 19 | CPU, NPU, DSP
图像分辨率:192 x 192 px
Set-5 得分 (x3):33.66 dB
你有过缩放照片的经历吗?缩放时是不是会有失真、细节丢失或清晰度下降的问题?这项任务就是让缩放过的照片看起来和原图一样。在本任务中,网络被训练用于完成一项等效的任务:将给定的缩小后图像(如缩小四倍)恢复至原图。此处我们使用一个 19 层的 VGG-19 网络。尽管目前来看,该网络的表现并不惊艳,也不能重建高频部分,但它对于绘画仍是理想的解决方案:该网络可以让图像变得更加清晰、平滑。
任务 6:图像超分辨率
神经网络:SRGAN | 仅 CPU
图像分辨率:512 x 512 px
Set-5 得分(x4):29.40 dB
任务同上,但完成方法略有不同:如果我们使用其他神经网络训练我们的神经网络会如何?我们安排两个网络去完成两个不同的任务:网络 A 尝试解决上面提到的超分辨率问题,网络 B 观察其结果,尝试找到其中的缺陷并惩罚网络 A。听起来是不是很酷?实际上真的很酷:尽管该方法不尽完美,但结果往往非常惊艳。
任务 7:语义图像分割
神经网络:ICNet | 仅 CPU
图像分辨率:384 x 576 px
CityScapes (mIoU):69.5 %
有没有想过在手机上运行自动驾驶算法?这没什么不可能,至少你可以完成一大部分任务——根据车载摄像头拍摄的照片检测 19 类目标(例如,车、行人、路、天空等)。在下图中,你可以看到最近专为低性能设备设计的 ICNet 网络的像素级分割结果(每个颜色对应每个目标类别)。
任务 8:图像增强
神经网络:ResNet - 12 | CPU, NPU, DSP
图像分辨率:128 x 192 px
DPED PSNR i-得分:18.11 dB
看旧手机上的照片是不是觉得很难受?这个问题可以解决:经过恰当训练的神经网络可以让旧手机(即使是 iPhone 3GS)上的照片看起来非常好、非常时髦。要做到这一点,网络要观察、学习如何将来自低端设备的照片优化成像用 DSLR 相机拍出来的一样。当然,这一奇迹有一些明显的缺陷(如:每次换新手机模型都要重新训练网络),但得到的图像看起来非常好,尤其是旧设备上的照片。
任务 9:内存极限
神经网络:SRCNN 9-5-5 | CPU, NPU, DSP
图像分辨率:4 MP
参数:69.162
在任务 4 中我们已经认识了 SRCNN,它是最轻便、简单的神经网络之一,但即便如此,在处理高分辨率照片时,它也会让大多数手机「给跪」:要处理高清照片,手机至少要有 6GB 的内存。这项测试的目的是找到你设备的极限:这个最简易的网络到底能处理多大的图像?
图 7:在相关深度学习测试中向用户展示的结果可视化示例。
图 8:测试结束后 AI Benchmark 给出的结果。
Benchmark 结果
我们展示了超过 10000 部移动设备的定量 Benchmark 结果。每部设备/SoC 的分数见表 2、表 3,包含每个测试/网络对一张图像的平均处理时间、可用 SRCNN 模型处理的最大可能图像分辨率,以及总计 AI 分数。这些分数是通过对应设备/SoC 的所有结果去除异常值之后取平均得到的。结果细节将在下文中介绍。
神经网络
表 1 总结了本 Benchmark 包含的所有深度学习架构的细节。表 2 与表 3 中的结果和网络的相对处理时间以及内存消耗的理论期望高度一致。尤其是,第一个测试的量化 MobileNet CNN 相比相同的浮点模型仅需要 1/3 到 1/4 的 RAM,并且其在 CPU 上的运行速度比 Inception-V3 CNN 快了一个数量级。第三个人脸识别测试处理的是两倍大的图像,并且比第二个测试需要大约两倍的推理时间,意味着 Inception-ResNet-V1 和 Inception-V3 的性能是相当的。
表 1:AI Benchmark 中用到的深度学习模型的特点总结。
在图像到图像的处理任务中,最高效的模型是 ICNet,因为计算主要发生在对图像/特征图的下采样。相同的方法也在 SRGAN 上使用,其中原始图像被下采样至 128x128 像素,并在这个分辨率上处理,直到最后两个层将其上采样至原始尺寸。因此,尽管使用了 12 个残差块,其处理时间仍然是合理的,不过使用下采样/上采样层处理 512x512 像素的图像使得 RAM 占用特别高。图像增强任务中使用的 DPED 网络包含 4 个残差块,在处理图像的过程中没有使用下采样,因此处理时间应该是之前案例的 128x128x12/128x192x4=2 倍,正如在实验中所展示的。
第五个测试中使用的 VGG-19 模型在所有 CNN 中是最消耗资源的,因为它由 19 个卷积层构成,在理论上其会比 DPED 慢 19/12=1.6 倍(它们的卷积层尺寸相似);但是 RAM 的消耗分布仍处于相近的范围,因为其主要由最大卷积层的维度决定。最后,SRCNN 模型比 VGG-19 和 DPED 都快得多,并且内存消耗由于相同的原因也非常相似。SRCNN 可以处理的最高图像像素的尺寸随设备的总 RAM 大小而线性增长,尽管由于 NNAPI 中的一个 bug,这对于安卓 8.1 以上的手机不适用,它们一般要消耗更多的 RAM。我们应该注意目前所有的结论都是基于不支持硬件加速的结果,因为硬件加速能显著改变测试 1、2、4、5、8 和 9 的结果。
表 2:多种安卓手机的 Benchmark 结果,完整列表在: http://ai-benchmark.com/ranking
表 3:几个 SoC 的 Benchmark 结果,完整列表请参考链接: http://ai-benchmark.com/ranking_processors
智能手机和移动芯片
表 2 和表 3 的结果展示了使用 AI Benchmark 获得的一些测试结果,其中分别包括安卓智能手机和移动端芯片。完整的列表可以在项目网站上查看。在具体讨论测试细节之前,我们首先要提到几个 Android NNAPI Bugs,这些漏洞同样影响了表中的一些结果。首先是 Android 8.1 默认 NNAPI 驱动的漏洞,卷积运算在禁用这些驱动的情况下要比在启用时性能快两倍。因此在为表 3 中展示的不同 SoC 计算平均 runtime 时,我们忽略了手机测试结果可能存在的这一问题。
虽然使用 Android 8.1 和 Kirin 970 芯片的华为手机使用的是他们自己定制的 NNAPI 实现,它还是会遇到另外不同的 Bug:在长待机后,麒麟的 NPU 时钟速度会下降,并且在重启之前不会恢复。两个表中的结果都是在华为设备刚启动时测试的。最后因为 3.2 节中描述的 ByteBuffer 问题,在图像到图像的测试中使用 Android NNAPI 的 RAM 消耗要高了两倍,它所造成的后果可以在最后的内存测试中观察到。
我们在下面总结了每个 Soc 制造商的测试结果,并描述了市场上对应芯片的性能。
高通:骁龙芯片(Snapdragon)现在能为量化神经网络提供硬件加速(当高通的 NNAPI 驱动存在时),不过现有的商业设备并不支持浮点模型。包含这些驱动的第一代智能手机是配备骁龙 845 SoC 和最新 Android P 固件的 OnePlus 6。它可以在 Hexagon DSP 上 25ms 内运行量化 MobileNet 模型,这比对应 CPU 速度(60-65ms)快得多。类似的性能在包含相同 Hexagon 685 DSP 的骁龙 670/710 芯片中获得。带有 Hexagon 682 的骁龙 835 和带有 Hexagon 680 的骁龙 636/660/820/821 都采用相同的高通 68x DSP 家族,应该具有更长的运行时。
虽然目前高通 NNAPI 驱动还没有所支持加速的浮点模型官方测试,但骁龙 625 SoC 相比于基于 CPU 的执行能实现两倍的加速,其中骁龙 625 SoC 可能使用集成 Adreno 506 GPU 驱动程序的 Beta 版。虽然 Adreno 506 的性能约为 130 GFLOPs,这意味着骁龙 845 SoC 中的 Adreno 630(727 GFLOPs)能潜在地提供 3 到 4 倍的加速,但具体的数字可能变化很大。
至于与矩阵/深度学习计算相关的 CPU 性能,目前最强大的高通核心是骁龙 845 SoC 中的 Kryo 385 Gold。与高通 835 的 Kryo 280 核心相比,它展现出大约 30%的提升。有趣的是,与带有定制化非 Cortex 的骁龙 820 SoC 及内部的第一代 Kryo 相比,Kryo 280 表现出相似或稍微降低的性能(每 GHz)。尽管第一代 Kryo 在设计上只有四个计算核心,但仍然比带有更新 Kryo 260 核心的骁龙 636/660 快一些。以前在 2013 年由骁龙 800/801 所代表的 Krait 微架构仍然展现出很有竞争力的结果,性能优于 2xx、4xx 和 6xx 系列的大多数结果,甚至紧随基于 Cortex-A57 微架构的 810 和 808 芯片的测试结果。我们还注意到定制的高通 CPU 核心通常比默认 ARM Cortex 架构表现出更好的结果。
华为:尽管海思 SoC 的 CPU 性能不如高通的那么令人印象深刻,其集成到麒麟 970 的 NPU 为浮点深度学习模型提供了巨大的加速效果。尤其是,根据任务类型,对比它的 CPU 它可以提供 7-21 倍加速的推理,对比总体最优的 CPU 结果它可以提供 4-7 倍的更优性能。在支持 GPU 加速的测试 2、4、5、8 中,它分别需要平均 132、274、240 和 193ms 的时间来处理一张图像。该 NPU 仅有的主要缺点是缺乏对量化模型的加速支持。在第一个测试中,所有的计算都是在 CPU 上运行的,每张图像的平均处理时间是 160ms,这相比骁龙 845 启用 DSP 时的对应结果要高得多。尽管这个问题可以通过在麒麟的 NNAPI 驱动程序中实现量化模式得到解决,目前这项功能仍处于开发阶段。
至于其它的海思芯片组,目前都不提供 AI 应用的加速,因此所有的计算都是在 CPU 上进行的。由于所有的海思的 SoC 都是基于标准的 Arm Cortex 核心,它们的性能和其它有相同 Cortex 架构的芯片组也很相似。
联发科:Helio P60 是首个能利用 NNAPI 驱动程序以加速浮点和量化模型的芯片组。量化网络在其集成的 APU 上运行,并展示了在第一个测试中处理一张图像时和 Hexagon 685 DSP—21ms 相似的性能。浮点网络在 Mali-G72 MP3 GPU 上执行,并对比 CPU 提供了 2-5 倍的加速,相比总体的最优 CPU 结果其运行时要快 1.5-2 倍。我们应该注意所有这些数值都是在 MediaTek 的开发者手机上获得的结果,而仅有的基于 Helio P60 和 NNAPI 驱动程序的市场手机(vivo V11)得到了稍微差一点的结果。
其它联发科芯片组目前不支持 AI 应用的加速。它们是在标准 Arm Cortex 设计的 CPU 核心上运行的。
三星:截至本文写作时,三星的所有 SoC 都不能提供第三方 AI 应用的加速:所有配置这些芯片组的手机使用了默认的 NNAPI 驱动程序。由于最新的 Exynos 9810 SoC 拥有相同的 Mali-G72 显卡。正如 MediaTek P60 芯片组一样(但其有 12 个核心而不是 3 个),如果 Arm NN 库被三星整合到 NNAPI 驱动程序中,我们预期对浮点神经网络会有 3-4 的额外加速因子。由于所有近期的 Samsung Exynos 处理器使用了 Arm Mali GPU,它们也适用同样的结论。
视任务类型而定,三星的 Mongoose M3 CPU 核心对比骁龙 845 的定制 Kryo 385 核心可以展示显著更好或者更差的性能,但它们的总体性能是相当的。Mongoose M2 微架构相对于第一个 M1 版本有 50% 的显著提升,同时第二代(M2)和第三代(M3)的性能很相似。最新的 Exynos 8895 和 9810 SoCs 的一个值得注意的问题和它们的集成能耗管理系统(可调整 CPU 性能)相关。它导致了大多数设备的非常不稳定的结果:尤其是,几个之后在相同的 Galaxy S9 手机上运行的 Benchmark(有 10 分钟的间隔,「高性能」模式)都展示了总体分数的 50% 的变动,从不同设备获得的结果甚至有更大的变动(例如,第七个测试的 200-800ms 的处理时间)。目前,尚未有对不同性能模式的外部控制手段,因为它们是基于内部逻辑而自动选取的。
其它:我们还获得了在其它不常用(如 Spreadtrum)或被制造商停产(例如,Intel Atom、Nvidia Tegra、TI OMAP)的芯片组上的测试结果。其中,在支持 CUDA 和专用于深度神经网络的 cuDNN GPU 加速库的 Nvidia Tegra 平台上测试 AI 和深度学习时我们得到了非常有趣的结果。不幸的是,自 2015 年以来没有新的设备使用过 Nvidia SoC,而已有的设备已经停产,并且不会再获得加速机器学习移动端框架的(NNAPI)驱动程序。
讨论
目前,对机器学习在移动设备上的软硬件支持发展得非常快,每隔几个月就有公司宣布里程碑式的技术。这些技术当然带来了新的可能性和更高的性能,但目前缺乏标准化要求和公开规范,造成无法确保对技术优劣势进行客观评估。下文介绍了我们通过 NNAPI 驱动程序使用移动机器学习框架和硬件加速芯片组的体验。
目前,开始在安卓设备上使用深度学习的最简单方式是使用成熟、相对稳定的 TensorFlow Mobile 框架。该框架出现于两年前,基本上解决了所有主要问题,且人们可在多个专门网站上找到关于细小问题的大量信息。如果硬件加速是关键问题,那么 TensorFlow Lite 仍然可以作为选择,但是我们不推荐使用它进行比用 MobileNet 或 Inception CNN 执行图像分类更复杂的任务,因为在移动平台上使用不标准的网络架构可能出现偶发问题。我们还提到从 TF Mobile 到 TF Lite 的迁移相对简单,因为它们使用的安卓编程接口很相似(最大的区别在于 TF Lite 将预训练模型转换成 .tflite,而不是 .pb 格式),我们可以在 TF Lite 得到更好支持的情况下再进行迁移。如果某个应用针对某些特定设备或 SoC,那么对应的专用 SDK 也可以使用,尽管这种情况下开发可能不那么容易、简便。至于 Caffe2 Mobile 和其他不那么广泛使用的框架,目前它们的社区还比较小,这意味着网络上几乎没什么教程和问题描述,因此所有出现的问题可能需要通过在对应的 GitHub repo 中创建新的 issue 来解决。
对安卓设备上的 AI 算法提供硬件支持目前是一个更有争议的话题。截至本文写作时,常规的浮点神经网络的最快运行时属于装载了麒麟 970 的华为手机,远远领先于市场平均水平。但是,我们仍要客观地看待未来的发展,我们的分析表明几乎所有 SoC 制造商都有潜力使用新的芯片组达到类似的结果。下一年年初情况将逐渐明晰,那时装载有麒麟 980、MediaTek P80 和新一代高通、Samsung Exynos premium SoC 的设备将上市。除了性能,我们还考察了它们的能耗,因为耗电过快会限制它们对一些标准相机内置处理技术的使用。
我们想解决的最后一个问题是量化网络的使用。它们的目前应用很受限,因为目前仍然没有用于量化网络的可靠、标准工具,即使是对简单的图像分类任务,更不用说复杂的任务了。目前,我们期待该领域的两种不同开发方式。第一种,量化问题将在某个时刻得到解决,部署在智能手机上的大多数神经网络都能被量化。第二种,支持浮点网络的特定 NPU 变得更加强大、高效,从而不再需要量化。当然我们没办法轻松地预测未来,但我们仍将在 AI benchmark 中使用量化和浮点模型的混合(浮点模型占主导),不过未来的版本中对应的比率可能会发生很大改变。
目前有很多重要的开放性问题可能会在出现新的机器学习相关软硬件和新的专用芯片后得到解决,因此我们计划出版介绍移动设备 AI 加速实际情况的常规 benchmark 报告,该报告也会涉及机器学习领域的改变以及 AI benchmark 所做出的相应调整。AI Benchmark 的最新测试结果和实际测试描述将在项目网站上进行每月更新。