最近,我们发布了神经网络机器学习(ML)软件Arm NN,它使用的关键技术使在基于Arm的平台上构建和运行低功耗ML应用变得非常容易。
本质上,这个软件在现有的神经网络框架(例如TensorFlow或Caffe)和嵌入式Linux平台上运行的基础处理硬件(例如CPU,GPU或新的Arm Machine Learning处理器)之间建立了桥梁。 开发人员可以继续使用他们首选的框架和工具,而Arm NN可以将结果无缝转换到基础平台上运行。
机器学习需要一个训练阶段进行学习(“这些是猫的图片”),在推理阶段应用所学到的知识(“这个图片是猫吗?”)。训练阶段通常在服务器或类似设备上进行,但是推理阶段正越来越接近边缘,这是此次发布的Arm NN的主要研究方向。
对象识别是在嵌入式平台上运行机器学习的工作负载之一
一切都与平台有关
机器学习工作负载(有计算量大和内存带宽需求的特点)是移动和嵌入式设备面临的最大挑战之一。随着运行ML需求的增长,合理划分这些工作负载从而充分利用可用的计算资源变得越来越重要。对于有各种潜在平台可以选择的软件开发人员来说,这才是真正的问题:CPU通常具有多个内核(使用Arm DynamIQ big.LITTLE,甚至是多个内核类型),但是同时需要考虑GPU –以及潜在的许多其他类型的专用处理器(包括Arm Machine Learning处理器)都可能成为整体解决方案的一部分。
这就是Arm NN的用武之地。
从下表中可以看到,Arm NN在隐藏基础硬件平台复杂性方面起着关键作用,同时允许开发人员继续使用他们选择的神经网络框架。
ML 应用程序 | 编写需要ML的应用程序 |
TensorFlow, Caffe 等 | 继续使用现有的高级别ML框架和支持工具 |
Arm NN | 自动将上述格式转换为Arm NN格式,优化图像并针对不同的硬件使用Compute Library中的函数 |
Compute Library | 针对各种硬件内核(当前为Cortex-A和Mali GPU)优化的低级别ML功能 |
CMSIS-NN | 针对Cortex-MCPU优化的低级别NN功能 |
平台 | 包含多内核和内核类型(例如CPU,GPU,以及将来的Arm Machine Learning处理器) |
Arm NN SDK概述(第一版)
你会注意到Arm NN的一个关键需求是Compute Library,这是一组面向Arm Corte-A CPU和Arm-Mali GPU的低级别ML和计算机视觉的函数。我们的目标是让这个库为这些函数提供最佳优化,最近的优化达到了显著的性能提升,相对同等的OpenCV函数提高了15倍。如果你是Cortex-M CPU的用户,现在也推出了一个ML原语库, 那就是最近发布的CMSIS-NN。
主要优势:
有了这个堆栈,开发人员将立即获得以下关键优势:
• 可以在嵌入式平台上轻松运行TensorFlow和Caffe
• Compute Library中一流的优化功能可以使你轻松访问基础平台的功能
• 无论针对的内核类型是什么,编程模型都相同
• 现有软件可以自动利用新的硬件功能
就像Compute Library一样, Arm NN 作为开源软件发布意味着针对Arm合作伙伴的其他内核也可以相对容易地被扩展。
安卓系统的Arm NN
早在5月的Google I / O上,Google就发布了适用于安卓系统的TensorFlow Lite,关于这款新API功能的首个提示就是它可以在支持安卓系统的Arm平台上部署神经网络。 从表面上看,它提供了与安卓系统下的Arm NN SDK非常相似的解决方案。机器学习工作负载在CPU上运行时默认使用NNAPI,但是硬件抽象层(HAL)机制也支持在其他类型的处理器或加速器上运行这些工作负载。 Google宣布之时,我们关于Arm NN的计划正在进行中,因此,使用Arm NN为Mali GPU提供HAL的步骤相对简单。 我们将在今年晚些时候为Arm Machine Learning处理器做同样的处理。
Arm对Google NNAPI的支持概述
你可以在 “ Arm support for Android NNAPI gives >4xperformance boost” 了解有关工作的更多信息。
CMSIS-NN
CMSIS-NN是高效神经网络核的集合,为了在针对智能IoT的边缘设备的Arm Cortex-M处理器内核上最大化性能的同时最小化神经网络的内存占用而开发。目的是为了在这些资源受限的Cortex CPU上压缩神经网络推理的每一点性能。 基于CMSIS-NN核的神经网络推理在运行时间/吞吐量和能效方面均实现了约5倍的改进。
你可以在Vikas的博客里了解更多信息:新型CMSIS-NN神经网络核:MCU效率提高约5倍!
Arm NN的发展
这只是Arm NN的一个开始:我们计划添加其他高级神经网络作为输入,并对Arm NN调度器进行进一步的图形级优化,以及开发针对其他类型的处理器或加速器的支持……因此请关注这一领域来获取有关今年我们进一步发展的更多信息!
实用链接:
•Arm NN SDK
•Arm NN SDK GitHub repository
•Arm NN Driver GitHub repository
•Machine Learning on Arm - Frameworks Supporting Arm IP
•Arm ML Processor
•Compute Library
•Cortex Microcontroller Software Interface Standard (CMSIS)
相关内容
相关ML资源
作者:Tim Hartley
翻译:Khorina
原文链接:https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/arm-nn-sdk