调研汇总;神州信息与华为牵手 朗新科技发力泛电力
本文译自 Alasdair Allan 的 Benchmarking Machine Learning on the New Raspberry Pi 4, Model B 的 Part I — Benchmark,用意是让更多中文读者也能快速了解 AI 模型在 Raspberry Pi 4 上的性能测试结果。
想必大家都很好奇 AI 模型在 Model B 上的运算性能相较之前的硬件快了多少?答案是 — 真的快很多。
Raspberry Pi 3(蓝色,左侧)与 Raspberry Pi 4(绿色,右侧)的 inference 时间(毫秒)
上个月科技部落格作者 Alasdair Allan 把几台常见的 Edge 硬件跟上一代的 Raspberry Pi 拿来做比较。评估出来的结果,发现比预期的运算能力慢了许多。根据 community 的修正,不是硬件本身的问题,而是选错了软件。因为没用 Tensorflow Lite,而是用了比较慢的 Tensorflow,才造成这么明显的运算时间落差。
由于最近 Xnor.ai 新放出的 AI2GO 使用了新一代的二元权重(Binary Weight)模型,因此,作者 Allan 也将此模型加入比较,发现这些新一代的模型确实比「传统」的 TensorFlow 快了不少。
不过,计划赶不上变化,在此同时又新出了 Raspberry Pi 4B,于是,Alasdair Allan 重新做了一次性能测试,想看看新款 Raspberry Pi 4 的速度比前一代快多少。结果一如预期,新的真的比较快。
总体来说,新的 Raspberry Pi 4 比前代的Raspberry Pi 3 快得多。
不管是原始 TensorFlow 或者 Xnor AI2GO 平台的 inference 运算基准测试,都达到约 2 倍的性能改进。
上图 / 这是 MobileNet v1 SSD 0.75 深度模型和 MobileNet v2 SSD 模型的基准测试结果(以毫秒为单位),两者均使用 COCO 资料集进行训练,输入影像尺寸为 300×300,运行在 Raspberry Pi 3B+( 左)和新的Raspberry Pi 4B(右)
更有意思的是,从 Google 的 Coral USB AI 加速器的基准测试,我们可以看到相当大幅度的进步,这与 Raspberry Pi 4 新增的 USB 3.0 有关,比起连接 USB 2.0,整体的运算性能提升了 3 倍。
反之,如果把相同的 Coral USB AI 加速器连接到 USB 2 而不是 USB 3,在相同硬件、相同模型的比较基准之下,整体运算性能与 Raspberry Pi 3 相比却反而慢了 2 倍。对于这个结果让 Allan 有点讶异,因为单单只是改善系统架构,整体的运算就会因此改变。
对于性能测试的结果,Eben Upton,Raspberry Pi 基金会创始人是这样说的:「这显示了 NEON 运算性能的提升,以及采用 USB 3.0 所带来的好处。尽管我们变更 USB 设计原意,其实是为了让使用者能连接更大容量的保存设备,不过能看到这个设计在额外的应用获得改善很有趣。」
性能测试
更深入的分析
Raspberry Pi 3 上的测试是基于 TensorFlow 与 Tensorflow Lite 且运行在 Model B + 上,Raspberry Pi 4 的性能测试采取了相同的软件配置,硬件则使用了 Model B 配上 4GB RAM。
Inference 的模型是使用 MobileNet v2 SSD 以及 MobileNet v1 0.75 深度 SSD 来进行,两者都是基于 COCO 资料集所训练而成。
以上的测试配置同样也应用在新出的 Coral USB AI 加速器,并比较了 USB 2.0 与 USB 3.0 的差异。
补充:
原始的性能测试比较了 Coral Dev Board、NVIDIA Jetson Nano、Raspberry Pi 3B+ 加上 Coral USB Accelerator、RPi 3B+ 加上第一代 Intel Movidus Neural Compute Stick、以及 RPi 3B+ 加上第二代 Intel Neural Compute Stick,还有生产于 2016 年、作者自己的 Apple MacBook Pro(四核2.9 GHz Intel Core i7),并以无加速配备的 RPi 3B+ 当作标准。
Xnor.ai AI2GO 平台的性能测试使用的是厨房物体侦测模型。此模型是一个二元权重模型,虽然训练资料集并没有公开,但 Xnor.ai 提供了技术论文让使用者参考。
测试用的原始影像是一张 3888×2916 像素的照片,其内包含一只香蕉和一个苹果 。作者将此影像的尺寸调整为 300×300 像素并反复运行 inference 模型 10,000 次,最后取得平均 inference 时间。
由于 TensorFlow 模型第一次使用时要预载,因此,第一次 inference 运行的时间并未被算在平均之内。
上图 / MobileNet v1 SSD 0.75 深度的模型以及 MobileNet v2 SSD 模型都是以 COCO资料集进行训练,模型的输入尺寸为测 300×300。
温馨小提醒:
在测试过程中,为了运行 TensorFlow 、 AI2GO 以及 Coral USB AI 加速器,作者必须更新 RPi 上的 Raspbian 系统从 Stretch 升级到 Buster,也就是等于安装的 Python 版本 将会从 Python 3.5 升级到 3.7。
这个改动可能会造成 TensorFlow Lite,Movidus Neural Compute Stick 或 Intel Neural Compute Stick 2 无法运行。虽然 TensorFlow Lite 的问题可能很容易解决,但如果你想要使用 Intel OpenVINO 框架就没这么轻松了,需要花一点时间才能从 Python 3.5 移到 3.7 才能使用,可能会造成 Raspberry Pi 4 在短时间无法和 Intel Neural Compute Stick 搭配使用。
大致说来,如果是运行在 CPU 上的模型,在新款的 Raspberry Pi 上至少都能获得两倍的性能增长。
与 Raspberry Pi 3 相比,RPi 4 的 NEON 容量大约是其两倍。基于良好实做的 NEON 核心,以及解决温控调频问题,在 MobileNet v1 模型和 Xnor.ai AI2GO 框架运算获得两倍加速是符合预期的结果。
AI2GO 平台二元权重模型在未加速的 Raspberry Pi 4上,达到 inference 时间为 79.5 毫秒。性能足以与 2016 年的 MacBook Pro 匹敌(跑 MobileNet v2 SSD inference 时间为 71 毫秒)。
但是比较起来,MobileNet V2 模型的效能改进就小得多,表示 v2 模型在 TensorFlow 中运作时,某些运算的最佳化仍有改善空间。
上图 / 用于 MobileNet v1 SSD 0.75 深度模型(左)和 MobileNet v2 SSD 模型(右)的 Inference 时间(毫秒),均使用 COCO 资料集进行训练,模型输入大小为 300 ×300。Xnor AI2GO 平台的使用的是其专有的二元权重模型。Raspberry Pi 3B+ 的所有测试结果为黄色,Raspberry Pi 4B 为红色。其他平台则是绿色。
由于升级到 Python 3.7 的时候,wheel 包出现了一些问题,不过 Allan 估计 RPi4 的性能大概是 RPi3 的两倍。
对于想使用 Raspberry Pi 4 进行 inference 的使用者,最大的收获大概是 Coral USB AI 加速器比运行在 Raspberry Pi 3 上的性能增加了3倍。
上图 / 使用 MobileNet v1 SSD 0.75 深度模型和 MobileNet v2 SSD 模型的 Coral USB AI 加速器的性能的测试结果(毫秒),两者均使用Raspberry Pi 3B +(左)的 COCO 资料集进行训练,和Raspberry Pi 4B USB 3.0(中)和USB 2(右)。
根据测试结果, MobileNet V1 0.75 SSD 模型的运行速度从 49.3 毫秒降低到 14.9 毫秒,MobileNet V2 SSD 模型也从 58.1 毫秒降低到 18.2 毫秒。换句话说 Raspberry Pi 4B加上 Coral USB AI 加速器(配合USB 3.0)整体的 inference 时间低于 Coral Dev Board(15.7 和 20.9 ms)。
但很奇妙的是:如果通过 USB 2.0 来连接 Coral USB AI 加速器而不使用 USB 3.0,inference 时间较Coral Dev Board 却又慢了两倍,这是因为 XHCI host 位于 PCIe bus 的远端,因此可能有较长的延迟。而对于传输通道的使用,阻塞模式较串流模式来得慢。
补充:
作者使用了 4GB 的 RPi 4B,如果换成 1GB 或 2GB RAM 的 Raspberry Pi 4主板加上 Coral Dev Board,仍可预期得到相同或近似的性能测试结果。
环境因素
虽然 inference 速度对于运行 edge AI 的装置优劣可能是最重要的衡量标准,但我们还是要同时考虑散热与能耗,毕竟要达到最佳的运算速度,还是需要在各方因素中做取舍。
电量消耗
电流测量使用了通过 USB 线连接的万用电表进行,精度为 ±0.01 A(10mA)。电流消耗的闲置值与峰值,分别代表能耗测试进行前与进行中。所有通过 USB 连接的加速器的测量,均基于 Raspberry Pi 3B +。
除了 MacBook Pro 外,所有平台都采用标准 5V 输入电源。但实际上由于电路板的要求,电压会在一定程度上震荡,大多数 USB 电压实际上位于 +5.1 到 +5.2V 左右。因此,作者选择了 +5.15V 作为功率计算(以瓦特为单位)的标准。
尤其是使用周边设备时 Raspberry Pi 的能耗会震荡。也是应为这个原因,许多手机充电器无法很好的通过 micro USB 提供稳定的电流。这也是 Raspberry Pi 从 micro USB 转向标准 USB-C 的原因之一。
峰值电流(黄色,右)与闲置电流(绿色,左)的比较
在之前的性能测试中,Raspberry Pi 3B + 相对耗电,耗电的程度只输给 NVIDIA Jetson Nano。新的测量显示,Raspberry Pi 4 是所有 edge AI 平台中最耗电的,在峰值需要超过 1,400mA。闲置时的能耗也最高,比 Coral Dev Board 所需的电量还高。
发热与散热
在之前的测试中,Raspberry Pi 温度接近但不超过 80°C (如果超过,CPU 会自动进行热量节流)。
第一次进行 AI2GO 性能测试时, inference 时间为 90.9 ms,远远高于预期。然而在测试的过程中,作者发现温度远高于温控调频的门槛值。
在帮 Raspberry Pi 自带的 GPIO 加一个小风扇后,才让 CPU 温度保持在 45°C。
一个小风扇就足够让 CPU 的温度保持稳定
稳定 CPU 温度后,inference 时间从 90.9 ms 下降到 79.5 ms,比较接近预期结果。
由于在测试期间必须主动冷却 Raspberry Pi,如果长时间使用它进行 inference,作者建议至少添加一个被动散热片。如果想要避免 CPU 温控调频的限制,装个小风扇可能是个好主意。
总结
新的 Raspberry Pi 4 带来的性能提升,使其成为极具竞争力的机器学习 inference 平台。通过性能测试,RPi 4B 使用 AI2GO 平台的二元权重模型的 inference 时间足以跟 NVIDIA Jetson Nano 和 TensorRT 优化的 TensorFlow 模型相匹敌。而加了 USB 3.0 后,让 Raspberry Pi 不仅是运算性能有竞争力,价格竞争力也能与同类最佳的 Google Coral Dev Board 相匹敌。
售价 35 美元的 Raspberry Pi 4 的 1GB 版本比 149 美元的 Coral Dev Board 便宜得多。结合 74.99 美元的 Coral USB AI 加速器与 Raspberry Pi 4 ,意味着您可以以 109.99 美元的价格超越之前的「同类最佳」主板。性能不但超越 Coral Dev Board,还可以省下 39.01 美元。
编辑:AI智慧