中文 英语
www.vw011.com
的意见

最大化边缘AI性能

简单的步骤,以确保您得到最快的推论。

人气

卷积神经网络模型的推理在算法上很简单,但是要使应用程序获得最快的性能,在部署时需要记住一些陷阱。许多因素使高效推理变得困难,我们将首先对这些因素进行分析,然后再深入研究具体的解决方案来解决每个问题。在本文结束时,您将在构建系统之前使用四个工具。

为什么要加速卷积层?

广泛地说,卷积是关于滑动别的功能。在图像数据的上下文中,我们将窗口与三个通道(RGB)一起滑动像素,并在每个窗口上应用相同的功能。


图1:将一个窗口在图像上进行卷积。

在CNN的卷积层中,在每个窗口中执行的函数实际上是具有称为滤波器的固定值的矩阵(必然是等大小)的元素-Wise乘法。一组多个过滤器也称为卷积核。此内核中的过滤器数将最终是图层将输出的通道数。


图2:在卷积层中,我们进行卷积的实际函数是一系列元素级矩阵乘法与不同的滤波器。注:每个数学运算实际上是一个融合的乘法和加法(FMA)运算,也被称为“张量运算”。

使用快速矩阵乘法算法

CNN推理的第一个也是最大的挑战是,正如上面提到的,每一层都需要大量的矩阵乘法。操作的数量与图像的大小以及每层过滤器的数量成比例。虽然没有办法避免这些计算,但专门的推理解决方案拥有用于快速矩阵乘法算法(如Winograd变换)的硬件。在常见的3×3卷积内核上,这样的转换可以减少所需的操作数量2.25x!因此,您可以进行的第一个也是最通用的优化是确保您的部署解决方案能够利用Winograd等快速矩阵乘法算法所提供的优势。例如,像Flex Logix的InferX X1这样的专用soc内置了可以动态执行Winograd乘法所需的转换的电路。

量化到精度较低的数据类型

就像复制的数量在层之间可能会有很大的不同,需要在层之间传递的数据量也会有很大的不同。这个数据被称为活化能或活化能。神经网络本质上是近似的,一旦用FP32或FP16训练了一个函数,这些数据类型提供的额外精度对于推理是不必要的。改变CNN数据类型的过程被称为量化。在像PyTorch和TensorflowLite这样的常见框架中,只需使用训练所需的一小部分数据和几行额外的代码,就可以在训练之后完成对INT8的量化。即使在FP16中,对推理进行量化的好处也可以使推理的延迟立即提高2倍!

选择灵活的硬件

接下来,随着推理通过CNN进行,每层从前一层进行不同的卷积。无论是改变内核的窗口大小还是使用不同数量的过滤器,模具和形状激活的操作都最终具有不同的存储器访问比率。早期层可能具有相对于其所需的内存量的更多计算,而中间层将在非常大的激活数据上操作,但仅执行计算的一部分。因此,本身,可以适应这些变化的内存和计算访问模式的架构将具有优于一个不存在的优势。例如,Ifferx X1利用Flex Logix的EFPGA技术动态重新配置在层之间,以在整个推理中保持最佳数据路径。因此,在要部署时,请选择可以适应的架构。

流数据

最后,在训练模型时,在一个称为反向传播的过程中,会生成大量的信息来根据每条训练数据更新模型的权值。减少所需内存带宽的一种方法是对数据进行“批处理”,并将对该数据集的这些权重的不同更改汇总起来。在推理上下文中,对多个推理进行批处理和并行计算的方法也可以提高吞吐量,但代价是延迟。例如,在实时应用程序中,在启动之前必须等待足够的数据进入,在某些硬件中,不是在单个作业中使用所有的处理元素,而是将资源分割开来并行处理多个推断。如果您的应用程序需要考虑尽可能快的推断,请记住在批大小为1的情况下进行推断。

结论

对实时应用程序更快的推断开辟了新的设计可能性,最终不仅可以为您和您的客户节省时间,还可以节省金钱。正如本文所强调的,现在您有了一个模板,可以应用它来改善最终应用程序中的推理性能,无论是用于医疗成像、工厂自动化、ADAS还是其他完全不同的应用程序!请记住这四个关键工具:1)确保您利用了快速矩阵乘法算法,2)量化到INT8, 3)部署在灵活的硬件上,4)使用batch=1用于实时应用程序。利用这些工具将确保为您的应用程序获得尽可能快的推断。



留下一个回复


(注意:此名称将公开显示)