尽管推理加速器最初是在数据中心开始的,但它们已迅速转向自动驾驶和医学成像等应用程序进行边缘推理。通过这种过渡,客户常常发现,通常很难的方法是,在数据中心中很好地处理图像的同一个加速器在边缘推理方面严重失败。原因很简单:一个处理一个数据池,另一个处理一个流。
流吞吐量是指批处理= 1时的处理量,池是指批处理=很多的处理量。在数据中心中,客户通常正在处理数据池,例如被标记的照片。目标是通过尽可能少的资源和功耗以及最佳的延迟来获取尽可能多的照片。
另一方面,边缘推理应用程序需要处理数据流。这些客户通常使用的相机每秒可产生30帧,每帧通常为2兆像素。通常,这相当于每个图像33毫秒,每秒约30帧。当您有从流中传入的图像时,如何处理取决于其需要执行的操作。
例如,使用推断进行零售分析的商店可能正在计算在任何给定时间排队的人数。在此示例中,他们确实不需要数小时甚至数天的结果。但是,如果您使用自动驾驶功能驾驶汽车,则只有几毫秒的时间来处理该图像,否则可能会撞到某人或某物。尽管在这两个示例中,相机每3毫秒每秒都会生成1帧图像,但所使用的推理加速器却大不相同。
让我们看一下数据流会发生什么。首先,您需要清理图像以去除诸如光条纹之类的东西,然后应用推断。推断完成后,您需要采取措施,并根据要处理的活动,所有这些需要在一定时间段内发生。如果几个小时都不需要结果,则可以对图像进行批处理。在这种情况下,延迟并不重要。重要的是以最少的成本和功耗获得最多的图像。
客户犯的最大错误之一是在不考虑延迟和流吞吐量的情况下选择边缘推理解决方案。假设您有一个推理加速器,该加速器每秒可以处理30帧,另一个可以每秒处理15帧。
大多数人自然会认为每秒30帧的解决方案更好-但是推理是绝对错误的。
加速器每秒获得30帧的速度可能会获得该吞吐量,因为它内部具有三个引擎,并且每个引擎的延迟时间都不同。这类引擎的一个例子是Nvidia的Xavier推理加速器。Xavier中的深度学习引擎需要大约300毫秒来处理图像,而GPU则需要大约90毫秒(请参阅脚注)。如果客户有两个正在运行的深度学习引擎,并且GPU也正在运行,则他们可能会在数据池上获得可观的吞吐量。
但是,如果需要从数据流中一次处理一个图像,则它不能有效地使用深度学习引擎,因此吞吐量会大大降低。在这种情况下,您需要查看最快执行单元的延迟,即90毫秒的GPU。分为1,000毫秒的帧数每秒,这意味着该吞吐量实际上仅是每秒10帧(而不是广告的30帧)。
寻找自动驾驶和航空航天等应用的客户只关心流吞吐量,因为他们正在处理数据流。即使它们是空闲的,他们也无法利用运行速度更慢的执行单元,因为它们需要在下一个图像可用之前处理第一个图像。在这些应用程序中,紧跟图像流非常重要,因为如果不这样做,则需要存储越来越多的数据。如果应用程序是自动驾驶,这将延长等待时间,并可能导致致命的后果。
总而言之,如果您正在研究推理加速器,请确保您了解它们的优化目的。
今年推出的大多数推理加速器均已针对ResNet-50进行了优化,ResNet-50的基准测试很差,因为它使用的是小图像,例如224×224。
对于自动驾驶等应用,您确实需要以1440×1440的分辨率处理2百万像素的图像。对于那些应用程序,YOLOv3是更好的基准。
我们也开始看到与ResNet-50和YOLOv3模型截然不同的新模型。在诸如生物医学工程或医学成像的市场中,它们正在处理不同种类的传感器,而不进行行人物体检测和识别。他们以非常不同的方式使用神经网络。在YOLOv3上表现良好的加速器可能会在这些模型上表现更好。