Prácticas recomendadas para mejorar el rendimiento

Los dispositivos móviles e incorporados tienen recursos computacionales limitados, así que es importante para mantener la eficiencia de los recursos de tu aplicación. Compilamos una lista de prácticas recomendadas y estrategias que puedes usar para mejorar TensorFlow Rendimiento del modelo Lite

Elige el mejor modelo para la tarea

Según la tarea, deberás compensar la complejidad del modelo y tamaño. Si tu tarea requiere una precisión alta, es posible que necesites complejo. Para las tareas que requieren menos precisión, es mejor usar más pequeño porque no solo usan menos espacio en disco y memoria, sino que también y, en general, más rápido y con mayor eficiencia energética. Por ejemplo, en los gráficos a continuación se muestran compensaciones de exactitud y latencia para algunos modelos comunes de clasificación de imágenes.

Gráfico del tamaño del modelo en comparación con
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 dispositivos móviles de visión de la nube. Kaggle Modelos enumera muchas otras optimizados para dispositivos móviles e incorporados.

Puedes volver a entrenar los modelos de la lista en tu propio conjunto de datos a través de automático.

Cómo generar un perfil de tu modelo

Una vez que selecciones un modelo candidato adecuado para tu tarea, habrá una una buena práctica para generar perfiles de tu modelo y compararlos. Comparativas de LiteRT herramienta tiene un generador de perfiles integrado que muestra estadísticas de generación de perfiles por operador. Esto puede ayuda a comprender los cuellos de botella en el rendimiento y qué operadores dominan el tiempo de procesamiento.

También puedes usar LiteRT seguimiento al perfil el modelo en tu aplicación para Android mediante el registro estándar del sistema de Android y visualizar las invocaciones del operador por tiempo con la generación de perfiles basada en la GUI con herramientas de visualización.

Genera perfiles y optimiza los operadores en el gráfico

Si un operador en particular aparece con frecuencia en el modelo y, según de datos, descubres que el operador consume más tiempo, puedes analizar para optimizar ese operador. Esta situación es poco común, ya que TensorFlow Lite tiene versiones optimizadas para la mayoría de los operadores. Sin embargo, es posible que puedas puedes escribir una versión más rápida de una op personalizada si conoces las restricciones . 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 para ahorrar energía, de modo que puedan implementarse en dispositivos móviles. LiteRT 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

LiteRT admite kernels multiproceso para muchos operadores. Puedes aumentar la cantidad de subprocesos y acelerar la ejecución de los operadores. En aumento la cantidad de subprocesos hará que tu modelo use más recursos energía.

En algunas aplicaciones, la latencia puede ser más importante que la eficiencia energética. Tú aumentar la cantidad de subprocesos configurando la cantidad de subprocesos. Sin embargo, la ejecución de varios subprocesos conlleva un aumento del rendimiento en función de qué más se ejecute simultáneamente. Este es especialmente en el caso de las apps para dispositivos móviles. Por ejemplo, las pruebas aisladas pueden mostrar 2x pero, si otra app se está ejecutando 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 con atención 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 entradas.

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

Herramientas específicas para cada plataforma, como Android generador de perfiles y Los instrumentos son una gran cantidad de dinero de información de generación de perfiles que se puede usar para depurar tu app. A veces, el un 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 la plataforma herramientas de generación de perfiles y prácticas recomendadas específicas para tu plataforma.

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

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

  • El delegado de GPU está disponible en iOS y Android, mediante 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 LiteRT. delegados para obtener más información.

Ten en cuenta que algunos aceleradores funcionan mejor para diferentes tipos de modelos. Algunos Los delegados solo admiten modelos de número de punto flotante o modelos optimizados de una forma específica. Sí es importante obtener una comparativa de cada delegado para ver si es un buen para tu aplicación. Por ejemplo, si tienes un modelo muy pequeño, podría no vale la pena delegar el modelo a la GPU. Por el contrario, los aceleradores son un es una excelente opción para modelos grandes de alta intensidad aritmética.