Prácticas recomendadas de rendimiento

Los dispositivos móviles e integrados tienen recursos computacionales limitados, por lo que es importante mantener eficiente el recurso de su aplicación. Hemos compilado una lista de mejores prácticas y estrategias que puede utilizar para mejorar el rendimiento de su modelo TensorFlow Lite.

Elija el mejor modelo para la tarea

Dependiendo de la tarea, deberá hacer un equilibrio entre la complejidad y el tamaño del modelo. Si su tarea requiere una alta precisión, es posible que necesite un modelo grande y complejo. Para tareas que requieren menos precisión, es mejor utilizar un modelo más pequeño porque no sólo utilizan menos espacio en disco y memoria, sino que también son generalmente más rápidos y más eficientes energéticamente. Por ejemplo, los gráficos a continuación muestran las compensaciones entre precisión y latencia para algunos modelos comunes de clasificación de imágenes.

Graph of model size vs accuracy

Graph of accuracy vs latency

Un ejemplo de modelos optimizados para dispositivos móviles son MobileNets , que están optimizados para aplicaciones de visión móviles. TensorFlow Hub enumera varios otros modelos que se han optimizado específicamente para dispositivos móviles e integrados.

Puede volver a entrenar los modelos enumerados en su propio conjunto de datos mediante el aprendizaje por transferencia. Consulte los tutoriales de aprendizaje de transferencia utilizando TensorFlow Lite Model Maker .

Perfila tu modelo

Una vez que haya seleccionado un modelo candidato que sea adecuado para su tarea, es una buena práctica perfilar y comparar su modelo. La herramienta de evaluación comparativa TensorFlow Lite tiene un generador de perfiles integrado que muestra estadísticas de perfiles por operador. Esto puede ayudar a comprender los cuellos de botella en el rendimiento y qué operadores dominan el tiempo de cálculo.

También puede utilizar el seguimiento de TensorFlow Lite para crear perfiles del modelo en su aplicación de Android, utilizando el seguimiento estándar del sistema Android, y visualizar las invocaciones del operador por tiempo con herramientas de creación de perfiles basadas en GUI.

Perfilar y optimizar operadores en el gráfico

Si un operador en particular aparece con frecuencia en el modelo y, según el perfil, descubre que el operador consume la mayor cantidad de tiempo, puede considerar optimizar ese operador. Este escenario debería ser poco común ya que TensorFlow Lite tiene versiones optimizadas para la mayoría de los operadores. Sin embargo, es posible que pueda escribir una versión más rápida de una operación personalizada si conoce las restricciones en las que se ejecuta el operador. Consulte la guía de operadores personalizados .

Optimiza tu modelo

La optimización del modelo tiene como objetivo crear modelos más pequeños que generalmente sean más rápidos y más eficientes energéticamente, para que puedan implementarse en dispositivos móviles. TensorFlow Lite admite múltiples técnicas de optimización, como la cuantificación.

Consulte los documentos de optimización del modelo para obtener más detalles.

Ajustar el número de hilos

TensorFlow Lite admite núcleos multiproceso para muchos operadores. Puede aumentar la cantidad de subprocesos y acelerar la ejecución de operadores. Sin embargo, aumentar el número de subprocesos hará que su modelo utilice más recursos y potencia.

Para algunas aplicaciones, la latencia puede ser más importante que la eficiencia energética. Puede aumentar el número de subprocesos configurando el número de subprocesos del intérprete. Sin embargo, la ejecución multiproceso tiene el costo de una mayor variabilidad del rendimiento dependiendo de qué más se ejecuta al mismo tiempo. Este es particularmente el caso de las aplicaciones móviles. Por ejemplo, las pruebas aisladas pueden mostrar una aceleración 2 veces mayor que la de un solo subproceso, pero, si se ejecuta otra aplicación al mismo tiempo, puede resultar en un peor rendimiento que el de un solo subproceso.

Eliminar copias redundantes

Si su aplicación no está diseñada cuidadosamente, puede haber copias redundantes al alimentar la entrada y leer la salida del modelo. Asegúrese de eliminar las copias redundantes. Si está utilizando API de nivel superior, como Java, asegúrese de consultar cuidadosamente la documentación para conocer las advertencias de rendimiento. Por ejemplo, la API de Java es mucho más rápida si se utilizan ByteBuffers como entradas .

Perfile su aplicación con herramientas específicas de la plataforma

Las herramientas específicas de la plataforma, como el generador de perfiles de Android y los instrumentos, brindan una gran cantidad de información de creación de perfiles que se puede utilizar para depurar su aplicación. A veces, el error de rendimiento puede no estar en el modelo sino en partes del código de la aplicación que interactúan con el modelo. Asegúrese de familiarizarse con las herramientas de creación de perfiles específicas de la plataforma y las mejores prácticas para su plataforma.

Evalúe si su modelo se beneficia del uso de aceleradores de hardware disponibles en el dispositivo

TensorFlow Lite ha agregado nuevas formas de acelerar modelos con hardware más rápido como GPU, DSP y aceleradores neuronales. Normalmente, estos aceleradores se exponen a través de submódulos delegados que se hacen cargo de partes de la ejecución del intérprete. TensorFlow Lite puede utilizar delegados de la siguiente manera:

  • Usando la API de redes neuronales de Android. Puede utilizar estos backends de acelerador de hardware para mejorar la velocidad y la eficiencia de su modelo. Para habilitar la API de redes neuronales, consulte la guía para delegados de NNAPI .
  • El delegado de GPU está disponible en Android e iOS, utilizando OpenGL/OpenCL y Metal, respectivamente. Para probarlos, consulte la documentación y el tutorial del delegado de GPU .
  • El delegado de Hexagon está disponible en Android. Aprovecha el Qualcomm Hexagon DSP si está disponible en el dispositivo. Consulte el tutorial del delegado de Hexagon para obtener más información.
  • Es posible crear su propio delegado si tiene acceso a hardware no estándar. Consulte Delegados de TensorFlow Lite para obtener más información.

Tenga en cuenta que algunos aceleradores funcionan mejor para diferentes tipos de modelos. Algunos delegados solo admiten modelos flotantes o modelos optimizados de una manera específica. Es importante comparar a cada delegado para ver si es una buena opción para su aplicación. Por ejemplo, si tiene un modelo muy pequeño, puede que no valga la pena delegar el modelo ni a la API NN ni a la GPU. Por el contrario, los aceleradores son una excelente opción para modelos grandes que tienen una alta intensidad aritmética.

Necesitas más ayuda

El equipo de TensorFlow estará encantado de ayudarle a diagnosticar y abordar problemas de rendimiento específicos que pueda enfrentar. Presente un problema en GitHub con detalles del problema.