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 tu 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 compensar la complejidad y el tamaño del modelo. Si tu tarea requiere una precisión 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 el disco y memoria, sino que también suelen ser más rápidas y eficientes en términos de energía. Por ejemplo, en los gráficos a continuación, se muestran las compensaciones de exactitud y latencia para algunos modelos comunes de clasificación de imágenes.

Gráfico del tamaño del modelo
frente a la exactitud

Gráfico de precisión frente a latencia

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

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

Cómo generar un perfil de tu modelo

Una vez que hayas seleccionado un modelo candidato adecuado para tu tarea, se recomienda 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 en el rendimiento y qué operadores dominan el tiempo de procesamiento.

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

Genera perfiles y optimiza los operadores en el gráfico

Si un operador en particular aparece con frecuencia en el modelo y, según el perfilamiento, descubres que consume la mayor cantidad de tiempo, puedes analizar cómo optimizarlo. Esta situación debería ser poco común, ya que TensorFlow Lite optimizó versiones para la mayoría de los operadores. Sin embargo, puedes 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, por lo general, sean más rápidos y eficientes en términos de energía, de modo que se puedan implementar 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.

Cómo ajustar 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, el aumento de 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. Puedes aumentar la cantidad de subprocesos si configuras la cantidad de subprocesos de intérprete. Sin embargo, la ejecución de varios subprocesos conlleva una mayor variabilidad del rendimiento según qué más se ejecute de forma simultánea. Este es el caso, en especial, de las apps para dispositivos móviles. Por ejemplo, las pruebas aisladas pueden mostrar el doble de velocidad en comparación con las pruebas de un solo subproceso, pero, si se ejecuta otra app al mismo tiempo, es posible que el rendimiento sea peor que el de un solo subproceso.

Elimina las copias redundantes

Si tu aplicación no se diseña cuidadosamente, puede haber copias redundantes cuando se ingresan la entrada y se leen los resultados 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 usa ByteBuffers como entrada.

Cómo generar el perfil de tu aplicación con herramientas específicas de la plataforma

Las herramientas específicas de la plataforma, como Instruments y el Generador de perfiles de Android, proporcionan una gran cantidad de información de generación de perfiles que se puede usar para depurar tu app. A veces, es posible que el error de rendimiento no esté en el modelo, sino en partes del código de la aplicación que interactúan con este. Asegúrate de familiarizarte con las herramientas de generación de perfiles y las prácticas recomendadas específicas para tu plataforma.

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

TensorFlow Lite agregó formas nuevas de acelerar 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 asumen partes de la ejecución del intérprete. TensorFlow Lite puede usar delegados para lo siguiente:

  • El delegado de GPU está disponible en iOS y Android, con OpenGL/OpenCL y Metal, respectivamente. Para probarlos, consulta el delegado de GPU.
  • Es posible 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 de número de punto flotante o modelos optimizados de una manera específica. Es importante generar comparativas de cada delegado a fin de determinar 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 delegarlo a la GPU. Por el contrario, los aceleradores son una excelente opción para modelos grandes de alta intensidad aritmética.