zoukankan      html  css  js  c++  java
  • 使用多个推理芯片需要仔细规划

    使用多个推理芯片需要仔细规划

    Using multiple inference chips takes careful planning

    在过去的两年里,推断芯片业务非常繁忙。有一段时间,似乎每隔一周又有一家公司推出了一种新的更好的解决方案。虽然所有这些创新都是伟大的,但问题是大多数公司不知道如何利用各种解决方案,因为无法分辨出哪种方案比另一种方案表现更好。在这个新的市场中,由于没有一套成熟的基准,要么必须非常迅速地在推理芯片上跟上速度,要么必须相信各个供应商提供的性能数据。             

    大多数供应商都提供了某种类型的性能数据,通常是任何让看起来不错的基准。一些供应商在谈到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、200万像素图像的激活输出大小和逐层累积的Mac操作(绘制了卷积层)。为了平衡两个芯片之间的工作负载,模型将减少大约50%的累计MAC操作-此时,从一个芯片到另一个芯片的激活是1MB或2MB。要在4个芯片之间分割,切割大约为25%、50%和75%;请注意,激活大小在开始时是最大的,因此25%的切割点有4个或8MB的激活要通过。

    YOLOv3/Winograd/2Mpixel图像的激活输出大小(蓝条)和逐层累积MAC操作(红线),显示工作负载如何在多个芯片之间分配。            

    性能工具             

    幸运的是,现在可以使用性能工具来确保高吞吐量。事实上,模拟单个芯片性能的同一工具可以推广到两个芯片的性能模型。虽然任何给定层的性能都是完全相同的,但问题是数据传输如何影响性能。建模工具需要考虑到这一点,因为如果所需的带宽不够,那么带宽将限制吞吐量。             

    如果做四个芯片,需要更大的带宽,因为模型第一季度的激活往往比模型后期的激活更大。因此,在通信资源上的投资将允许使用更多的芯片,但这将是一个开销,所有的芯片都必须承担,即使是独立的芯片。             

    结论             

    使用多个推断芯片可以显著提高性能,但前提是神经网络的设计如上所述。如果回顾一下高速公路的类比,那么使用错误的芯片和错误的神经网络模型,会有很多机会让交通堵塞。如果从正确的芯片开始,就在正确的轨道上。请记住,最重要的是吞吐量,而不是TOPS或Res-Net50基准测试。一旦选择了正确的推理芯片,就可以设计一个同样强大的神经网络模型,为应用程序提供最大的性能。

  • 相关阅读:
    JS实现对Date Range的认证
    SharePoint 用SafeControl的方式创建能够重复利用的Control
    设计模式详解(链接)
    Asp.net MVC3中进行自定义Error Page
    手动将自定制的WebPart部署到 SharePoint 2010 中
    获取 SharePoint 2010 中所有的User Profile Service Application
    自定义Data Service Providers — (5)最小化的运行时服务
    温总理对软件工作者的勉励
    自定义Data Service Providers —(9)关系
    自定义Data Service Providers — (7)交互式查询
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/13277842.html
Copyright © 2011-2022 走看看