Prácticas recomendadas para mejorar el rendimiento

Los dispositivos incorporados y móviles tienen recursos de procesamiento limitados, por lo que es importante mantener la eficiencia de los recursos de la aplicación. Compilamos una lista de prácticas recomendadas y estrategias que puedes usar para mejorar el rendimiento de tu modelo de TensorFlow Lite.

Elige el mejor modelo para la tarea

Según la tarea, deberás encontrar un equilibrio entre la complejidad y el tamaño del modelo. Si tu tarea requiere una exactitud alta, es posible que necesites un modelo grande y complejo. Para las tareas que requieren menos precisión, es mejor usar un modelo más pequeño, ya que no solo usan menos espacio en disco y memoria, sino que, en general, son más rápidas y ahorran más energía. Por ejemplo, en los gráficos de abajo, se muestran las compensaciones de precisión y latencia para algunos modelos comunes de clasificación de imágenes.

Grafo entre el tamaño del modelo y la precisión

Gráfico de precisión frente a latencia

Un ejemplo de los modelos optimizados para dispositivos móviles es MobileNets, que están optimizados para aplicaciones de visión móvil. TensorFlow Hub muestra muchos otros modelos que se optimizaron específicamente para dispositivos incorporados y móviles.

Puedes volver a entrenar los modelos enumerados en tu propio conjunto de datos con el aprendizaje por transferencia.

Genera un perfil de tu modelo

Una vez que hayas seleccionado un modelo candidato adecuado para tu tarea, te recomendamos generar perfiles y comparar tu modelo. La herramienta de comparativas de TensorFlow Lite tiene un generador de perfiles integrado que muestra las estadísticas de generación de perfiles por operador. Esto puede ayudar a comprender los cuellos de botella de rendimiento y qué operadores dominan el tiempo de procesamiento.

También puedes usar el seguimiento de TensorFlow Lite si quieres generar un perfil del modelo en tu aplicación para Android, con el registro estándar del sistema Android, y visualizar las invocaciones del operador por tiempo con herramientas de generación de perfiles basadas en la GUI.

Perfilar y optimizar operadores en el gráfico

Si un operador en particular aparece con frecuencia en el modelo y, en función del perfilado, descubres que el operador consume la mayor cantidad de tiempo, puedes optimizar ese operador. Esta situación debería ser poco frecuente, ya que TensorFlow Lite tiene versiones optimizadas para la mayoría de los operadores. Sin embargo, tal vez puedas escribir una versión más rápida de una op personalizada si conoces las restricciones en las que se ejecuta el operador. Consulta la guía de operadores personalizados.

Optimiza tu modelo

El objetivo de la optimización de modelos es crear modelos más pequeños que, en general, sean más rápidos y eficientes desde el punto de vista energético, para que puedan implementarse en dispositivos móviles. TensorFlow Lite admite varias técnicas de optimización, como la cuantización.

Consulta los documentos de optimización de modelos para obtener más detalles.

Ajusta la cantidad de subprocesos

TensorFlow Lite admite kernels multiproceso para muchos operadores. Puedes aumentar la cantidad de subprocesos y acelerar la ejecución de los operadores. Sin embargo, aumentar la cantidad de subprocesos hará que tu modelo use más recursos y potencia.

En algunas aplicaciones, la latencia puede ser más importante que la eficiencia energética. Para aumentar la cantidad de subprocesos, configura la cantidad de subprocesos de intérprete. Sin embargo, la ejecución de varios subprocesos tiene el costo de aumentar la variabilidad del rendimiento en función de qué más se ejecuta de forma simultánea. Este es el caso, en particular, de las apps para dispositivos móviles. Por ejemplo, las pruebas aisladas pueden mostrar una velocidad 2 veces mayor en comparación con un subproceso único, pero, si otra app se ejecuta al mismo tiempo, podría empeorar el rendimiento que la versión de un solo subproceso.

Elimina las copias redundantes.

Si tu aplicación no está bien diseñada, puede haber copias redundantes cuando se ingresa la entrada y se lee la salida del modelo. Asegúrate de eliminar las copias redundantes. Si usas APIs de nivel superior, como Java, asegúrate de revisar cuidadosamente la documentación para conocer las advertencias de rendimiento. Por ejemplo, la API de Java es mucho más rápida si se usan ByteBuffers como entradas.

Generar perfiles de tu aplicación con herramientas específicas para cada plataforma

Las herramientas específicas de la plataforma, como Instruments y Android Profiler, proporcionan una gran cantidad de información sobre la generación de perfiles que se puede usar para depurar tu app. 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úrate de familiarizarte con las herramientas de generación de perfiles específicas de la plataforma y las prácticas recomendadas correspondientes.

Evaluar si tu modelo se beneficia del uso de aceleradores de hardware disponibles en el dispositivo

TensorFlow Lite agregó nuevas formas de acelerar los modelos con hardware más rápido, como GPU, DSP y aceleradores neuronales. Por lo general, estos aceleradores se exponen a través de submódulos delegados que toman partes de la ejecución del intérprete. TensorFlow Lite puede usar delegados de las siguientes maneras:

  • El delegado de la GPU está disponible en iOS y Android, con OpenGL/OpenCL y Metal, respectivamente. Para probarlos, consulta el delegado de GPU.
  • Puedes crear tu propio delegado si tienes acceso a hardware no estándar. Consulta Delegados de TensorFlow Lite para obtener más información.

Ten 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 realizar una comparativa entre cada delegado para ver si es una buena opción para tu aplicación. Por ejemplo, si tienes un modelo muy pequeño, puede que no valga la pena delegar el modelo a la GPU. Por el contrario, los aceleradores son una excelente opción para modelos grandes que tienen alta intensidad aritmética.