使用多个推理芯片需要仔细规划
过去两年,推理芯片业务异常繁忙。有一段时间,似乎每隔一周就有一家公司推出一个新的更好的解决方案。尽管所有这些创新都很棒,但问题是大多数公司不知道如何使用各种解决方案,因为他们无法分辨哪个比另一个表现更好。由于在这个新市场上没有既定的基准,他们要么必须在推理芯片上非常迅速地跟上速度,要么不得不相信各个供应商提供的性能数据。
大多数供应商提供了某种类型的性能数据,通常是任何使它们看起来不错的基准。一些供应商在谈论 TOPS 和 TOPS/Watt 时没有指定型号、批量大小或工艺/电压/温度条件。其他人使用了 ResNet-50 基准,这是一个比大多数人需要的模型简单得多的模型,因此它在评估推理选项方面的价值值得怀疑。
从早期开始,我们已经走了很长一段路。公司慢慢发现,在衡量推理芯片的性能时,真正重要的是 1) 高 MAC 利用率,2) 低功耗和 3) 您需要保持一切小。
我们知道如何衡量 - 下一步是什么?
既然我们对如何衡量一个推理芯片相对于另一个的性能有了一个相当好的了解,公司现在开始询问在同一设计中一起使用多个推理芯片的优点(或缺点)是什么。简单的答案是使用多个推理芯片,当推理芯片以正确的方式设计时,可以实现性能的线性增长。当我们考虑使用多个推理芯片时,高速公路的类比并不遥远。公司想要单车道高速公路还是四车道高速公路的性能?
显然,每家公司都想要一条四车道高速公路,所以现在的问题变成了“我们如何在不造成交通和瓶颈的情况下提供这条四车道高速公路?”答案取决于选择正确的推理芯片。为了解释,我们先来看一个神经网络模型。
神经网络被分解成层。 ResNet-50 等层有 50 层,YOLOv3 有超过 100 层,每一层都从前一层接收一个激活。因此,在第 N 层,它的输出是进入第 N+1 层的激活。它等待该层进入,计算完成,输出是进入第 n+2 层的激活。这将持续层的长度,直到您最终得到结果。请记住,此示例的初始输入是图像或模型正在处理的任何数据集。
当多个筹码发挥作用时
现实情况是,如果您的芯片具有一定的性能水平,那么总会有客户想要两倍或四倍的性能。如果您分析神经网络模型,在某些情况下是可以实现的。你只需要看看你是如何在两个芯片或四个芯片之间拆分模型的。
多年来,这一直是并行处理的一个问题,因为很难弄清楚如何划分您正在执行的任何处理并确保将其全部加起来,而不是在性能方面被减去。
与并行处理和通用计算不同,推理芯片的好处在于客户通常提前知道他们是否想要使用两个芯片,这样编译器就不必即时计算——它是在编译时完成的。使用神经网络模型,一切都是完全可以预测的,因此我们可以准确地分析和弄清楚如何拆分模型以及它是否会在两个芯片上运行良好。
为了确保模型可以在两个或多个芯片上运行,重要的是要逐层查看激活大小和 MAC 的数量。通常发生的情况是最大的激活出现在最早的层中。这意味着激活大小随着层数的增加而缓慢下降。
查看 MAC 的数量以及每个周期中完成的 MAC 数量也很重要。在大多数模型中,每个周期中完成的 MAC 数量通常与激活大小相关。这很重要,因为如果您有两个芯片并且想要以最大频率运行,则需要为每个芯片分配相同的工作负载。如果一个芯片负责模型的大部分工作,而另一个芯片只负责模型的一小部分,那么您将受到第一个芯片的吞吐量的限制。
如何在两个芯片之间拆分模型也很重要。您需要查看 MAC 的数量,因为这决定了工作负载的分布。您还必须查看芯片之间传递的内容。在某些时候,您需要在传递的激活尽可能小的地方对模型进行切片,以便所需的通信带宽量和传输延迟最小。如果在激活非常大的点对模型进行切片,激活的传输可能成为限制双芯片解决方案性能的瓶颈。
下图显示了 YOLOv3、Winograd、2 兆像素图像的激活输出大小和逐层累积的 Mac 操作(绘制了卷积层)。为了平衡两个芯片之间的工作负载,模型将在大约 50% 的累积 MAC 操作时被削减——此时从一个芯片传递到另一个芯片的激活是 1MB 或 2MB。要在 4 个筹码之间拆分,削减幅度约为 25%、50% 和 75%;请注意,开始时激活大小最大,因此 25% 的切点有 4 或 8MB 激活要通过。
<中心>
单击此处查看大图
YOLOv3/Winograd/2Mpixel 图像的激活输出大小(蓝色条)和逐层累积 MAC 操作(红线) ,显示工作负载如何在多个芯片之间分配(图片:Flex Logix)
中心> 性能工具
幸运的是,现在可以使用性能工具来确保高吞吐量。事实上,可以将模拟单个芯片性能的相同工具推广到模拟两个芯片的性能。虽然任何给定层的性能完全相同,但问题是数据传输如何影响性能。建模工具需要考虑到这一点,因为如果所需的带宽不够,该带宽将限制吞吐量。
如果您正在制作四个芯片,您将需要更大的带宽,因为模型第一季度的激活往往大于模型后期的激活。因此,您投资的通信资源量将允许您使用更多的芯片流水线,但这将是所有芯片必须承担的开销成本,即使它们是独立芯片。
结论
使用多个推理芯片可以显着提高性能,但前提是神经网络按上述方式正确设计。如果我们回顾一下高速公路的比喻,有很多机会通过使用错误的芯片和错误的神经网络模型来增加交通量。如果您从正确的芯片开始,那么您就走在正确的轨道上。请记住,最重要的是吞吐量,而不是 TOPS 或 Res-Net50 基准测试。然后,一旦您选择了正确的推理芯片,您就可以设计一个同样强大的神经网络模型,为您的应用需求提供最大的性能。
— Geoff Tate 是 Flex Logix 的首席执行官
嵌入式