ARM NN es el motor de inferencia de aprendizaje automático más jugador (ML) para Android y Linux, acelerando ML en las CPU de la corteza del brazo y las GPU MALI ARM . Este motor de inferencia de ML es un SDK de código abierto que une la brecha entre los marcos de red neuronales existentes y la IP de brazo eficiente de energía.
ARM NN supera a las bibliotecas ML genéricas debido a las optimizaciones específicas de la arquitectura ARM (por ejemplo, SVE2) utilizando la Biblioteca de cálculo del brazo (ACL) . Para atacar el Ethos-N NPUS del brazo, el brazo NN utiliza el controlador Ethos-N NPU. Para la aceleración de Cortex-M ARM, consulte CMSIS-NN.
ARM NN se escribe con C ++ 17 portátil y se construye usando CMake, lo que permite compilaciones para una amplia variedad de plataformas objetivo, desde una amplia variedad de entornos de host. Los desarrolladores de Python pueden interactuar con el brazo nn a través del uso de nuestro brazo nn tf lite delegado .
El ARM nn Tf Lite Delegate proporciona el soporte del operador ML más amplio en el brazo NN y es una manera fácil de acelerar su modelo ML. Para comenzar a usar el TF Lite Delegate, primero descargue los binarios preconstruidos para el último lanzamiento de Arm Nn. Usando un intérprete de Python, puede cargar su modelo TF Lite en el brazo nn tf lite delegado y ejecutar inferencia acelerada. Consulte esta guía de inicio rápido en GitHub o esta Guía de desarrollador de brazos más integral para obtener información sobre cómo acelerar su modelo TF Lite utilizando el ARM nn TF Lite Delegate.
La forma más rápida de integrar el brazo nn en una aplicación Android es mediante el uso de nuestro archivo ARR NN AAR (Android Archive) con Android Studio . El archivo AAR empaqueta bien el brazo y el delegado de lite, el brazo en sí mismo y la ACL; Listo para integrarse en su aplicación ML Android. El uso del AAR le permite beneficiarse del vasto soporte del operador del Delegado del brazo nn tf lite. Hicimos una charla AR ARM AI Tech sobre cómo acelerar una aplicación de segmentación de imágenes ML en 5 minutos usando este archivo AAR. Para descargar el archivo ARR NN AAR, consulte la sección Binarios preconstruidos a continuación.
También proporcionamos paquetes de Debian para ARM nn, que son una forma rápida de comenzar a usar el brazo NN y el analizador TF Lite (aunque con menos soporte de operador ML que el delegado TF Lite). Hay una guía de instalación disponible aquí que proporciona instrucciones sobre cómo instalar el núcleo del brazo nn y el analizador TF lite para Ubuntu 20.04.
Para construir el brazo y desde cero, proporcionamos la herramienta de construcción del brazo y la construcción . Esta herramienta consiste en scripts bash parametrizados acompañados de un Dockerfile para construir el brazo NN y sus dependencias, incluida la biblioteca de cómputo de brazo (ACL) . Esta herramienta reemplaza/reemplaza a la mayoría de las guías de compilación del brazo nn existentes como una forma fácil de usar para construir el brazo nn. El principal beneficio de construir el brazo nn desde cero es la capacidad de elegir exactamente qué componentes construir, dirigidos a su proyecto ML .
Sistema operativo | Archivo de lanzamiento específico de la arquitectura (descargar) |
---|---|
Android (AAR) | |
Android 11 "R/Red Velvet Cake" (Nivel API 30) | |
Android 12 "S/cono de nieve" (Nivel API 31) | |
Android 13 "T/Tiramisu" (Nivel API 33) | |
Android 14 "Cake U/Upside Down" (Nivel API 34) |
ARM NN también proporciona binarios múltiples de ISA preconstruidos para Android. El binario V8A incluye el soporte de la arquitectura básica V8A y hacia arriba. El binario V8.2A incluye soporte de V8.2A y hacia arriba. Estos incluyen soporte para SVE, SVE2, FP16 y algunos núcleos de productos DOT. Estos núcleos necesitan hardware apropiado para trabajar.
Arquitectura múltiple ISA | Archivo de lanzamiento (descargar) |
---|---|
Arm Linux V8A | |
Arm Linux V8.2A | |
Android 31 V8A | |
Android 31 V8.2a |
El brazo NN SDK admite modelos ML en formatos TensorFlow Lite (TF Lite) y ONNX .
El delegado TF Lite de Arm NN acelera los modelos TF Lite a través de las API Python o C ++ . Los operadores de LITE compatibles están acelerados por el brazo NN y cualquier operador no compatible se delegan (retroceso) a la referencia TF Lite Runtime, lo que garantiza un amplio soporte de operadores de ML. La forma recomendada de usar el brazo nn es convertir su modelo en formato TF Lite y usar el delegado TF Lite. Consulte las Guías de inicio rápida para obtener más información sobre cómo usar el delegado TF Lite.
ARM NN también proporciona analizadores TF Lite y ONNX que son bibliotecas C ++ para integrar modelos TF Lite o ONNX en su aplicación ML. Tenga en cuenta que estos analizadores no proporcionan una cobertura de operador ML extensa en comparación con el delegado del brazo nn tf lite.
Los desarrolladores de aplicaciones de Android ML tienen una serie de opciones para usar ARM nn:
ARM también proporciona un conductor de Android-NN que implementa una capa de abstracción de hardware (HAL) para Android NNAPI. Cuando el controlador Android NN está integrado en un dispositivo Android, los modelos ML utilizados en aplicaciones Android se acelerarán automáticamente por ARM NN.
Para obtener más información sobre los componentes del brazo nn, consulte nuestra documentación.
ARM NN es un componente clave de la plataforma de aprendizaje automático, que forma parte de la iniciativa de inteligencia de la máquina de Linaro.
Para las preguntas frecuentes y los consejos de solución de problemas, vea las preguntas frecuentes o eche un vistazo a los problemas anteriores de GitHub.
La mejor manera de involucrarse es usar nuestro software. Si necesita ayuda o encuentra un problema, plantearlo como un problema de GitHub. Siéntase libre de echar un vistazo a cualquiera de nuestros problemas abiertos también. También damos la bienvenida a los comentarios sobre nuestra documentación.
Las solicitudes de funciones sin un voluntario para implementarlas están cerradas, pero tienen la etiqueta de 'Ayuda Wanted', estas se pueden encontrar aquí. Una vez que encuentre un problema adecuado, no dude en volver a abrirlo y agregar un comentario, para que los ingenieros de ARM y los ingenieros sepan que está trabajando en ello y puede ayudarlo.
Cuando se implementa la función, se eliminará la etiqueta 'Ayuda Wanted'.
El proyecto ARM nn da la bienvenida a las contribuciones. Para obtener más detalles sobre cómo contribuir a Arm NN, consulte la página contribuyente en el sitio web mlplatform.org, o consulte la guía de contribuyentes.
Particularmente si desea implementar su propio backend junto a nuestra CPU, GPU y Backends de NPU, hay guías para el desarrollo de backend: Guía de desarrollo de backend, Guía de desarrollo dinámico de backend.
El directorio ARMNN/Tests contiene pruebas utilizadas durante el desarrollo del brazo NN. Muchos de ellos dependen de IP de terceros, protobufs modelo y archivos de imagen no distribuidos con ARM nn. Las dependencias para algunas pruebas están disponibles libremente en Internet, para aquellos que deseen experimentar, pero no se quedan sin la caja.
ARM NN se proporciona bajo la licencia MIT. Vea la licencia para más información. Las contribuciones a este proyecto se aceptan bajo la misma licencia.
Los archivos individuales contienen la siguiente etiqueta en lugar del texto completo de la licencia.
SPDX-License-Identifier: MIT
Esto permite el procesamiento de la máquina de la información de la licencia basada en los identificadores de licencia SPDX que están disponibles aquí: http://spdx.org/licenses/
Arm Nn se ajusta a la política de lenguaje inclusivo de Arm y, hasta donde sabemos, no contiene ningún lenguaje no inclusivo.
Si encuentra algo que le preocupa, envíe un correo electrónico a té[email protected]
Herramientas de terceros utilizadas por Arm NN:
Herramienta | Licencia (ID de SPDX) | Descripción | Versión | Origen |
---|---|---|---|---|
cxxopts | MIT | Una biblioteca liviana de la opción C ++ | 3.1.1 | https://github.com/jarro2783/cxxopts |
mínimo | MIT | Marco de pruebas de C ++ de solo encabezado | 2.4.6 | https://github.com/onqtam/doctest |
fmt | MIT | {FMT} es una biblioteca de formato de código abierto que proporciona una alternativa rápida y segura a C STDIO y C ++ iOSTreams. | 8.30 | https://github.com/fmtlib/fmt |
GHC | MIT | Una biblioteca de ayuda compatible con el sistema de archivos de un solo archivo solo encabezado | 1.3.2 | https://github.com/gulrak/filesystem |
medio | MIT | IEEE 754 Biblioteca de puntos flotantes de media precisión de 16 bits de 16 bits | 1.12.0 | http://half.sourceforge.net |
mapbox/variante | BSD | Una alternativa de solo encabezado a 'Boost :: Variant' | 1.1.3 | https://github.com/mapbox/variant |
stb | MIT | Cargador de imágenes, cambiar de tamaño y escritor | 2.16 | https://github.com/nothings/stb |
ARM NN utiliza los siguientes indicadores de compilación relacionados con la seguridad en su código:
Construir banderas |
---|
-Muro |
-Wextra |
-Laza de estilo |
-No |
-Conversión |
-Wsign-Conversion |
-Sarter |