神经网络在始终在线的IoT边缘设备中变得越来越流行,这些IoT边缘设备从源头开始执行数据分析,从而减少了数据通信的延迟和能耗。
CMSIS-NN是一组高效的神经网络核的集合,为了最大限度地提高以智能物联网边缘设备为目标的Arm Cortex-M处理器上神经网络性能的同时最大限度降低内存占用。基于CMSIS-NN核的神经网络推理可将运行时间/吞吐量提高4.6倍,将能效提高4.9倍。
CMSIS-NN库
CMSIS-NN库由两部分组成:NNFunctions和NNSupportFunctions。 NNFunctions包含实现流行的神经网络层类型的函数,例如卷积,深度可分离卷积,全连接(即内积),池化和激活。
应用程序代码用这些函数来实现神经网络推理应用。 保持简单的核API便可以轻松地把核API重新定位为任意机器学习框架。 NNSupportFunctions包含不同的效用函数,例如NNFunctions中使用的数据转换和激活函数表。 这些效用函数还可以被应用程序代码用来构建更复杂的NN模块,例如 长短期记忆(LSTM)或门控循环单元(GRU)。
不同版本的核函数被运用在某些核上(例如:全连接和卷积)。我们提供的一个基础版本对于任何层参数都可以按照“原样”工作。我们还实现了其他版本提供了进一步的技术优化,但是要么需要使用转换后的输入,要么会导致对层参数的限制。理想情况下,可以使用简单的脚本来解析网络拓扑并自动确定要使用的适当功能。
在卷积神经网络上测试
我们在使用CIFAR-10数据集训练的卷积神经网络(CNN)上测试了CMSIS-NN核,CIFAR-10由60,000张32x32彩色图像组成并分为10个输出类别。网络拓扑有三个卷积层和一个全连接层,基于Caffe中提供的内置示例。下表显示了使用CMSIS-NN核的层参数和详细的运行时结果。运行时的测量在包含216 MHz Arm Cortex-M7内核的STMicoelectronics NUCLEO-F746ZG mbed开发板上完成。
整个图像分类的速度大约在99.1ms/每图像(相当于每秒10.1张图像)。 运行神经网络时的CPU计算吞吐量约为每秒249 Mops。经过预量化的网络在CIFAR-10测试仪上的精度达到了80.3%。 在Arm Cortex-M7内核上运行的8位量化网络则可达到79.9%的精度。使用CMSIS-NN核的最大内存占用量约为133 KB,其中卷积使用了partial im2col 来节省内存,之后进行矩阵乘法。 如果不使用partial im2col ,内存占用量将增至约332 KB,这样神经网络将无法适用于开发板。
为了量化CMSIS-NN核相对于现有解决方案的优势,我们还使用1D卷积函数(来自CMSIS-DSP的arm\_conv),类似Caffe的池化和ReLU实现了一个基线版本。对于CNN应用,下表总结了基线函数和CMSIS-NN核的比较结果。 与基线函数相比,CMSIS-NN核的运行时/吞吐量提高了2.6-5.4倍,能源效率的提高与吞吐量的提高一致。
总结
高效的NN核是启用基于Arm Cortex-M CPU推理的关键。 CMSIS-NN提供优化的函数来加速关键的NN层,例如卷积,池化和激活。
此外,CMSIS-NN还有助于减少存储器空间占用,这对于受内存限制的MCU而言至关重要。 更多详细信息请参见我们的白皮书,您可以从康奈尔大学图书馆网站下载。
您可以在GitHub页面上找到CMSIS-NN核。应用程序代码可以直接使用这些核在Arm Cortex-M CPU上实现神经网络算法。 或者,框架可以把这些核用作原语来部署经过训练的模型。
有关更多帮助您应对ML挑战的资源,详细的产品信息和教程,请访问我们新的机器学习开发人员网站。
作者:Vikas Chandra
翻译:Khorina
原文链接:https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/new-neural-network-kernels-boost-efficiency-in-microcontrollers-by-5x