Path: blob/master/site/es-419/lite/android/delegates/nnapi.md
25118 views
Delegado NNAPI de TensorFlow Lite
La API de redes neuronales de Android (NNAPI) está disponible en todos los dispositivos que ejecuten Android 8.1 (nivel de API 27) o superior. Ofrece aceleración para modelos TensorFlow Lite en dispositivos Android con aceleradores de hardware compatibles, incluidos:
Unidad de procesamiento gráfico (GPU)
Procesador digital de señales (DSP)
Unidad de procesamiento neuronal (NPU)
El rendimiento variará en función del hardware específico disponible en el dispositivo.
Esta página describe cómo usar el delegado NNAPI con el intérprete TensorFlow Lite en Java y Kotlin. Para las API de Android C, consulte la documentación de Android Native Developer Kit.
Probar el delegado NNAPI en su propio modelo
Importación de Gradle
El delegado NNAPI forma parte del intérprete TensorFlow Lite para Android, versión 1.14.0 o superior. Puede importarlo a su proyecto añadiendo lo siguiente al archivo gradle de su módulo:
Inicializar del delegado NNAPI
Agregue el código para inicializar el delegado NNAPI antes de inicializar el intérprete de TensorFlow Lite.
Nota: Aunque NNAPI es compatible desde el Nivel de API 27 (Android Oreo MR1), la compatibilidad con las operaciones mejoró significativamente para el Nivel de API 28 (Android Pie) en adelante. Como resultado, recomendamos a los desarrolladores usar el delegado NNAPI para Android Pie o superior para la mayoría de los escenarios.
Prácticas recomendadas
Pruebe el rendimiento antes de la implementación
El rendimiento en runtime puede variar considerablemente en función de la arquitectura del modelo, el tamaño, las operaciones, la disponibilidad del hardware y la utilización de éste en runtime. Por ejemplo, si una app utiliza en gran medida la GPU para el renderizado, quizá la aceleración NNAPI no mejore el rendimiento debido a la contención de recursos. Se recomienda ejecutar una sencilla prueba de rendimiento usando el depurador para medir el tiempo de inferencia. Ejecute la prueba en varios teléfonos con diferentes chipsets (del fabricante o de modelos del mismo fabricante) que sean representativos de su base de usuarios antes de habilitar NNAPI en producción.
Para desarrolladores avanzados, TensorFlow Lite también ofrece una herramienta de evaluación comparativa de modelos para Android.
Cree una lista de exclusión de dispositivos
En producción, puede haber casos en los que NNAPI no funcione como se espera. Se recomienda a los desarrolladores que mantengan una lista de dispositivos que no deben usar la aceleración NNAPI en combinación con determinados modelos. Puede crear esta lista basándose en el valor de "ro.board.platform"
, que puede recuperar utilizando el siguiente fragmento de código:
Para los desarrolladores avanzados, considere la posibilidad de conservar esta lista mediante un sistema de configuración remota. El equipo de TensorFlow está trabajando activamente en formas de simplificar y automatizar el descubrimiento y la aplicación de la configuración óptima de la NNAPI.
Cuantización
La cuantización reduce el tamaño del modelo al usar enteros de 8 bits o flotantes de 16 bits en lugar de flotantes de 32 bits para el cálculo. El tamaño de los modelos con enteros de 8 bits es una cuarta parte del de las versiones con flotantes de 32 bits; con flotantes de 16 bits es la mitad. La cuantización puede mejorar el rendimiento de forma significativa, aunque el proceso podría sacrificar parte de la precisión del modelo.
Existen múltiples tipos de técnicas de cuantificación posteriores al entrenamiento, pero, para obtener la máxima compatibilidad y aceleración en el hardware actual, recomendamos la cuantización de enteros completa. Este enfoque convierte tanto la ponderación como las operaciones en enteros. Este proceso de cuantización requiere un conjunto de datos representativo para funcionar.
Use modelos y ops compatibles
Si el delegado NNAPI no admite algunas de las ops o combinaciones de parámetros de un modelo, el framework sólo ejecuta las partes del grafo admitidas en el acelerador. El resto se ejecuta en la CPU, lo que resulta en una ejecución dividida. Debido al alto costo de la sincronización CPU/acelerador, esto puede resultar en un rendimiento más lento que la ejecución de todo el grafo sólo en la CPU.
NNAPI funciona mejor cuando los modelos sólo usan ops compatibles. Se sabe que los siguientes modelos son compatibles con NNAPI:
Clasificación de imágenes MobileNet v1 (224x224) (descarga del modelo flotante) (descargar modelo cuantizado)
(modelo de clasificación de imágenes diseñado para aplicaciones de visión basadas en móviles e integradas)Detección de objetos SSD MobileNet v2 (descargar)
(modelo de clasificación de imágenes que detecta múltiples objetos con cajas delimitadoras)Detección de objetos con detector de toma única (SSD) MobileNet v1(300x300) [(descargar)] (https://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip)
PoseNet para la estimación de la pose (descarga)
(modelo de visión que estima las poses de una(s) persona(s) en imagen o vídeo)
La aceleración NNAPI tampoco es compatible cuando el modelo contiene salidas de tamaño dinámico. En este caso, recibirá una advertencia del tipo:
Habilite la implementación de la CPU NNAPI
Un grafo que no pueda ser procesado completamente por un acelerador puede recurrir a la implementación de la CPU NNAPI. Sin embargo, dado que suele tener un rendimiento inferior al del intérprete TensorFlow, esta opción está desactivada por default en el delegado NNAPI para Android 10 (Nivel de API 29) o superior. Para anular este comportamiento, configure setUseNnapiCpu
como true
en el objeto NnApiDelegate.Options
.