ARM NN是Android和Linux的最性能机器学习(ML)推理引擎,在ARM Cortex-A CPU和Arm Mali GPU上加速ML。该ML推理引擎是一种开源SDK,它弥合了现有的神经网络框架与功率高效ARM IP之间的差距。
ARM NN通过使用ARM Compute库(ACL)而优于ARM结构特定优化(例如SVE2)引起的通用ML库。为了靶向ARM ETHOS-N NPU,ARM NN使用Ethos-N NPU驱动器。有关ARM Cortex-M加速度,请参阅CMSIS-NN。
ARM NN使用便携式C ++ 17编写,并使用CMAKE构建 - 从各种主机环境中为各种目标平台启用构建。 Python开发人员可以通过使用我们的ARM NN TF LITE代表与ARM NN连接。
ARM NN TF LITE代表在ARM NN提供了最广泛的ML操作员支持,这是加速您的ML模型的一种简单方法。要开始使用TF Lite代表,请首先下载预先构建的二进制文件,以获取ARM NN的最新版本。使用Python解释器,您可以将TF Lite模型加载到ARM NN TF LITE委托并加速推理中。请参阅GITHUB上的此快速启动指南或此更全面的ARM开发人员指南,以获取有关如何使用ARM NN TF Lite代表加速TF Lite模型的信息。
将ARM NN集成到Android应用程序中的最快方法是将我们的ARM NN AAR(Android Archive)文件与Android Studio一起使用。 AAR文件很好地包装了ARM NN TF Lite代表,ARM NN本身和ACL;准备将其集成到您的Android ML应用程序中。使用AAR可以使您从ARM NN TF Lite代表的庞大操作员支持中受益。我们举行了ARM AI技术对话,涉及如何使用此AAR文件在5分钟内加速ML图像细分应用程序。要下载ARM NN AAR文件,请参阅下面的“预构建二进制文件”部分。
我们还为ARM NN提供了Debian套餐,这是一种开始使用ARM NN和TF Lite Parser的快速方法(尽管ML操作员的支持少于TF Lite代表)。这里有一个安装指南,可提供有关如何安装ARM NN核心和Ubuntu 20.04的TF Lite解析器的说明。
为了从头开始建造ARM NN,我们提供了ARM NN构建工具。该工具由参数化的bash脚本组成,伴随着用于构建ARM NN及其依赖项的Dockerfile ,包括ARM Compute库(ACL) 。该工具替换/取代了大多数现有的ARM NN构建指南,以构建ARM NN的用户友好方式。从头开始构建ARM NN的主要好处是能够准确选择要构建哪些组件的目标,该组件针对您的ML项目。
操作系统 | 特定于架构的版本档案(下载) |
---|---|
Android(AAR) | |
Android 11“ R/红色天鹅绒蛋糕”(API级30) | |
Android 12“ S/Snow锥”(API级别31) | |
Android 13“ T/Tiramisu”(API级别33) | |
Android 14“ U/倒置蛋糕”(API级别34) |
ARM NN还为Android提供了预先建造的多ISA二进制文件。 V8A二进制文件包括基本V8A架构和向上的支持。 v8.2a二进制文件包括v8.2a及向上的支持。其中包括对SVE,SVE2,FP16和一些点产品内核的支持。这些内核需要适当的硬件才能进行。
多ISA架构 | 发布档案(下载) |
---|---|
Linux ARM V8A | |
Linux ARM V8.2A | |
Android 31 V8A | |
Android 31 V8.2A |
ARM NN SDK支持Tensorflow Lite (TF Lite)和ONNX格式中的ML模型。
ARM NN的TF Lite代表通过Python或C ++ API加速了TF Lite模型。支持的TF Lite运营商由ARM NN加速,任何无支撑的操作员都会委派(后备)将其委托给参考TF Lite运行时 - 确保广泛的ML操作员支持。使用ARM NN的推荐方法是将您的模型转换为TF Lite格式并使用TF Lite代表。请参阅快速起步指南,以获取有关如何使用TF Lite代表的更多信息。
ARM NN还提供TF Lite和ONNX解析器,它们是C ++库,用于将TF Lite或ONNX型号集成到您的ML应用程序中。请注意,与ARM NN TF LITE代表相比,这些解析器不提供广泛的ML操作员覆盖范围。
Android ML应用程序开发人员有许多使用ARM NN的选项:
ARM还提供了Android-NN-Driver,该驱动器为Android NNAPI实现了硬件抽象层(HAL)。当Android NN驱动器集成在Android设备上时,Android应用中使用的ML模型将通过ARM NN自动加速。
有关ARM NN组件的更多信息,请参阅我们的文档。
ARM NN是机器学习平台的关键组成部分,该平台是Linaro Machine Intelligence Initiative的一部分。
有关常见问题解答和故障排除建议,请参阅常见问题解答或查看以前的GitHub问题。
参与的最佳方法是使用我们的软件。如果您需要帮助或遇到问题,请作为GitHub问题提出。也可以随意查看我们的任何开放问题。我们也欢迎对我们的文档进行反馈。
没有志愿者实施它们的功能请求已关闭,但是具有“帮助”标签,可以在此处找到。一旦找到合适的问题,请随时重新打开并添加评论,以便ARM NN工程师知道您正在努力并可以提供帮助。
实现该功能后,将删除“帮助想要”标签。
ARM NN项目欢迎贡献。有关贡献ARM NN的更多详细信息,请参阅mlplatform.org网站上的贡献页面,或查看贡献者指南。
尤其是如果您想在我们的CPU旁边实施自己的后端,GPU和NPU后端会有后端开发指南:后端开发指南,动态后端开发指南。
ARMNN/测试目录包含在ARM NN开发过程中使用的测试。其中许多依赖于第三方IP,模型Protobufs和未与ARM NN分发的图像文件。某些测试的依赖项可以在Internet上自由使用,对于那些希望进行实验的人,但不会用完。
NN由MIT许可提供。有关更多信息,请参见许可证。根据相同的许可,对该项目的贡献被接受。
单个文件包含以下标签,而不是完整的许可文本。
SPDX-License-Identifier: MIT
此启用了基于此处可用的SPDX许可证标识符的许可证信息:http://spdx.org/licenses/
ARM NN符合ARM的包容性语言政策,据我们所知,不包含任何不包含语言的语言。
如果您发现与您有关的东西,请发送电子邮件至[email protected]
ARM NN使用的第三方工具:
工具 | 许可证(SPDX ID) | 描述 | 版本 | 可靠的能力 |
---|---|---|---|---|
cxxopts | 麻省理工学院 | 轻巧的C ++选项解析器库 | 3.1.1 | https://github.com/jarro2783/cxxopts |
医生 | 麻省理工学院 | 仅标题C ++测试框架 | 2.4.6 | https://github.com/onqtam/doctest |
FMT | 麻省理工学院 | {FMT}是一个开源格式库,为C stdio和C ++ iostreams提供了快速安全的替代方案。 | 8.30 | https://github.com/fmtlib/fmt |
GHC | 麻省理工学院 | 仅标头单文件std ::文件系统兼容助手库 | 1.3.2 | https://github.com/gulrak/filesystem |
一半 | 麻省理工学院 | IEEE 754 16位半精度浮点库 | 1.12.0 | http://half.sourceforge.net |
MAPBOX/变体 | BSD | “ boost :: variant'的仅标题替代品” | 1.1.3 | https://github.com/mapbox/variant |
STB | 麻省理工学院 | 图像加载器,调整大小和作家 | 2.16 | https://github.com/nothings/stb |
ARM NN在其代码中使用以下相关构建标志:
建立标志 |
---|
-墙 |
-wextra |
-Wold-style-cast |
-wno-Missing-Braces |
-wconversion |
-wsign-conversion |
-werror |