O ARM NN é o mecanismo de inferência de aprendizado de máquina (ML) mais executado para Android e Linux, acelerando o ML no ARM Cortex-A CPUs e nas GPUs do ARM Mali . Este mecanismo de inferência de ML é um SDK de código aberto que preenche a lacuna entre as estruturas de rede neural existentes e o IP do braço com eficiência de potência.
O ARM NN supera as bibliotecas genéricas de ML devido às otimizações específicas da arquitetura do ARM (por exemplo, SVE2), utilizando a Biblioteca de Computação de ARM (ACL) . Para direcionar o npus de ethos-n do braço, o ARM NN utiliza o driver NPU ethos-n. Para a aceleração do ARM Cortex-M, consulte CMSIS-NN.
O ARM NN é escrito usando o portátil C ++ 17 e construído usando o CMake - permitindo compilações para uma ampla variedade de plataformas de destino, a partir de uma ampla variedade de ambientes host. Os desenvolvedores do Python podem interagir com o ARM NN através do uso de nosso delegado de ARM nn Tf Lite .
O delegado do ARM Nn Tf Lite fornece o mais amplo suporte do operador ML no ARM NN e é uma maneira fácil de acelerar seu modelo ML. Para começar a usar o delegado TF Lite, primeiro faça o download dos binários pré-criados para o lançamento mais recente do ARM NN. Usando um intérprete Python, você pode carregar seu modelo TF Lite no delegado do ARM NN TF Lite e executar a inferência acelerada. Consulte este guia de início rápido no GitHub ou este guia mais abrangente do desenvolvedor de braços para obter informações sobre como acelerar seu modelo TF Lite usando o delegado de armas nn tf lite.
A maneira mais rápida de integrar o ARM NN em um aplicativo Android é usando nosso arquivo ARM NN AAR (Arquivo Android) com o Android Studio . O arquivo AAR empacota bem o delegado do braço nn tf Lite, o próprio ARM NN e o ACL; Pronto para ser integrado ao seu aplicativo Android ML. O uso do AAR permite que você se beneficie do suporte do vasto operador do delegado do ARM nn Tf Lite. Realizamos uma palestra técnica AR AI sobre como acelerar um aplicativo de segmentação de imagem ML em 5 minutos usando este arquivo AAR. Para baixar o arquivo ARM NN AAR, consulte a seção de binários pré-criados abaixo.
Também fornecemos pacotes debianos para o ARM NN, que são uma maneira rápida de começar a usar o ARM NN e o analisador TF Lite (embora com menos suporte do operador ML do que o delegado TF Lite). Há um guia de instalação disponível aqui que fornece instruções sobre como instalar o núcleo do ARM NN e o analisador TF Lite para o Ubuntu 20.04.
Para construir o ARM NN a partir do zero, fornecemos a ferramenta de construção do ARM NN . Esta ferramenta consiste em scripts de bash parametrizados acompanhados por um Dockerfile para a construção de nn de braço e suas dependências, incluindo a Biblioteca de computação de ARM (ACL) . Essa ferramenta substitui/substitui a maioria dos guias de construção do ARM NN existente como uma maneira fácil de usar o ARM NN. O principal benefício da construção do braço nn do zero é a capacidade de escolher exatamente quais componentes construir, direcionados para o seu projeto de ML .
Sistema operacional | Arquivo de lançamento específico da arquitetura (download) |
---|---|
Android (AAR) | |
Android 11 "R/Red Velvet Cake" (Nível 30 da API) | |
Android 12 "S/Cone Snow" (nível de API 31) | |
Android 13 "T/Tiramisu" (API Nível 33) | |
Android 14 "U/Upside Down Cake" (API Nível 34) |
O ARM NN também fornece binários multi-isa pré-construídos para Android. O binário V8A inclui o suporte da arquitetura V8A básica e para cima. O binário v8.2a inclui suporte do V8.2A e para cima. Isso inclui suporte para SVE, SVE2, FP16 e alguns kernels de produtos de pontos. Esses grãos precisam de hardware apropriado para trabalhar.
Arquitetura Multi ISA | Libere o arquivo (download) |
---|---|
Linux Arm V8a | |
Linux Arm V8.2a | |
Android 31 V8A | |
Android 31 v8.2a |
O ARM NN SDK suporta modelos ML nos formatos Tensorflow Lite (TF Lite) e ONNX .
O delegado Tf Lite da ARM NN acelera os modelos TF Lite através de APIs Python ou C ++ . Os operadores de TF Lite suportados são acelerados pelo ARM NN e quaisquer operadores não suportados são delegados (fallback) à referência TF Lite Runtime - garantindo um extenso suporte ao operador ML. A maneira recomendada de usar o ARM NN é converter seu modelo em formato TF Lite e usar o delegado TF Lite. Consulte os guias de início rápido para obter mais informações sobre como usar o delegado TF Lite.
O ARM NN também fornece analisadores TF Lite e Onnx , que são bibliotecas C ++ para integrar modelos TF Lite ou ONNX no seu aplicativo ML. Observe que esses analisadores não fornecem uma extensa cobertura do operador de ML em comparação com o delegado do ARM NN TF Lite.
Os desenvolvedores de aplicativos Android ML têm várias opções para usar o ARM NN:
O ARM também fornece um Android-NN-Driver que implementa uma camada de abstração de hardware (HAL) para o Android NNAPI. Quando o driver Android NN é integrado em um dispositivo Android, os modelos ML usados em aplicativos Android serão automaticamente acelerados pelo ARM NN.
Para obter mais informações sobre os componentes do ARM NN, consulte nossa documentação.
O ARM NN é um componente essencial da plataforma de aprendizado de máquina, que faz parte da Iniciativa de Inteligência de Máquina Linaro.
Para perguntas frequentes e conselhos sobre solução de problemas, consulte as perguntas frequentes ou dê uma olhada nos problemas anteriores do Github.
A melhor maneira de se envolver é usando nosso software. Se você precisar de ajuda ou encontrar um problema, aumente -o como um problema do GitHub. Sinta -se à vontade para dar uma olhada em qualquer um de nossos problemas abertos também. Também agradecemos feedback sobre nossa documentação.
As solicitações de recursos sem um voluntário para implementá -las estão fechadas, mas possuem o rótulo 'Help Wanted', eles podem ser encontrados aqui. Depois de encontrar um problema adequado, fique à vontade para reabri-lo e adicionar um comentário, para que os engenheiros do ARM NN saibam que você está trabalhando nisso e pode ajudar.
Quando o recurso for implementado, o rótulo 'Help Wanted' será removido.
O projeto ARM NN recebe contribuições. Para obter mais detalhes sobre a contribuição para o ARM NN, consulte a página contribuinte no site mlplatform.org ou consulte o guia do colaborador.
Especialmente se você quiser implementar seu próprio back -end ao lado da nossa CPU, GPU e NPU Backend, existem guias para o desenvolvimento de back -end: Guia de Desenvolvimento de Back -end, Guia de Desenvolvimento de Back -end dinâmico.
O diretório do ARMNN/Testes contém testes usados durante o desenvolvimento do ARM NN. Muitos deles dependem de IP de terceiros, protobufs de modelo e arquivos de imagem não distribuídos com o ARM NN. As dependências para alguns testes estão disponíveis livremente na Internet, para aqueles que desejam experimentar, mas não saem da caixa.
O ARM NN é fornecido sob a licença do MIT. Consulte a licença para obter mais informações. As contribuições para este projeto são aceitas sob a mesma licença.
Os arquivos individuais contêm a seguinte tag em vez do texto completo da licença.
SPDX-License-Identifier: MIT
Isso permite o processamento da máquina de informações de licença com base nos identificadores de licença SPDX que estão disponíveis aqui: http://spdx.org/license/
O ARM NN está em conformidade com a política de linguagem inclusiva do ARM e, até onde sabemos, não contém nenhum idioma não inclusivo.
Se você encontrar algo que o preocupe, envie um e -mail para [email protected]
Ferramentas de terceiros usados pelo ARM NN:
Ferramenta | Licença (ID do SPDX) | Descrição | Versão | Proveniência |
---|---|---|---|---|
CXXOPTS | Mit | Uma biblioteca de pastor de opções C ++ leve | 3.1.1 | https://github.com/jarro2783/cxxopts |
Doctest | Mit | Estrutura de teste C ++ somente para cabeçalho | 2.4.6 | https://github.com/onqtam/doctest |
fmt | Mit | {fmt} é uma biblioteca de formatação de código aberto, fornecendo uma alternativa rápida e segura ao c stdio e c ++ iostreams. | 8.30 | https://github.com/fmtlib/fmt |
ghc | Mit | Um canteiro apenas para cambalhou | 1.3.2 | https://github.com/gulrak/filesystem |
metade | Mit | IEEE 754 Library de ponto flutuante de meia precisão de 16 bits de 16 bits | 1.12.0 | http://half.sourceforge.net |
MapBox/Variant | BSD | Uma alternativa somente para o cabeçalho para 'Boost :: Variant' | 1.1.3 | https://github.com/mapbox/variant |
stb | Mit | Carregador de imagem, redimensionamento e escritor | 2.16 | https://github.com/nothings/stb |
O ARM NN usa os seguintes sinalizadores de construção relacionados à segurança em seu código:
Construa sinalizadores |
---|
-Parede |
-Wextra |
-Wold-estilo-cast |
-WNo-I-Missing Brace |
-Wconversão |
-WSign-conversão |
-Werror |