Únase a TensorFlow en Google I/O, del 11 al 12 de mayo Regístrese ahora

Prácticas recomendadas de rendimiento,Prácticas recomendadas de rendimiento

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

Elija el mejor modelo para la tarea

Dependiendo de la tarea, deberá hacer un balance 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 usar un modelo más pequeño porque no solo usan 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 de 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óvil. 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 de transferencia. Consulte el tutorial de aprendizaje de transferencia para la clasificación de imágenes y la detección de objetos .

Perfila tu modelo

Una vez que haya seleccionado un modelo candidato 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 de rendimiento y qué operadores dominan el tiempo de cálculo.

También puede usar el seguimiento de TensorFlow Lite para crear un perfil del modelo en su aplicación de Android, usando el seguimiento estándar del sistema Android, y para 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, encuentra que el operador consume la mayor cantidad de tiempo, puede considerar optimizar ese operador. Este escenario debería ser raro 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 de modelos 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 varias técnicas de optimización, como la cuantificación.

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

Ajustar el número de hilos

TensorFlow Lite es compatible con kernels de subprocesos múltiples para muchos operadores. Puede aumentar la cantidad de subprocesos y acelerar la ejecución de los operadores. Sin embargo, aumentar la cantidad 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 de interpretación. Sin embargo, la ejecución de subprocesos múltiples tiene el costo de una mayor variabilidad del rendimiento dependiendo de qué más se ejecute al mismo tiempo. Este es particularmente el caso de las aplicaciones móviles. Por ejemplo, las pruebas aisladas pueden mostrar una aceleración de 2x frente a un solo subproceso, pero, si otra aplicación se está ejecutando al mismo tiempo, puede resultar en un peor rendimiento que un solo subproceso.

Eliminar copias redundantes

Si su aplicación no está cuidadosamente diseñada, 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 usar 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 agregó nuevas formas 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 se hacen cargo de partes de la ejecución del intérprete. TensorFlow Lite puede usar delegados por:

  • Uso de la API de redes neuronales de Android. Puede utilizar estos backends de aceleradores de hardware para mejorar la velocidad y la eficiencia de su modelo. Para habilitar la API de redes neuronales, consulte la guía de delegados de NNAPI .
  • El delegado de GPU está disponible en Android e iOS, utilizando OpenGL/OpenCL y Metal, respectivamente. Para probarlos, consulte el tutorial y la documentación 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 de 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 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 a la API de NN o 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 se complace en ayudar a diagnosticar y abordar los problemas de rendimiento específicos que pueda tener. Presente un problema en GitHub con los detalles del problema.

,

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

Elija el mejor modelo para la tarea

Dependiendo de la tarea, deberá hacer un balance 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 usar un modelo más pequeño porque no solo usan 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 de 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óvil. 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 de transferencia. Consulte el tutorial de aprendizaje de transferencia para la clasificación de imágenes y la detección de objetos .

Perfila tu modelo

Una vez que haya seleccionado un modelo candidato 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 de rendimiento y qué operadores dominan el tiempo de cálculo.

También puede usar el seguimiento de TensorFlow Lite para crear un perfil del modelo en su aplicación de Android, usando el seguimiento estándar del sistema Android, y para 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, encuentra que el operador consume la mayor cantidad de tiempo, puede considerar optimizar ese operador. Este escenario debería ser raro 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 de modelos 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 varias técnicas de optimización, como la cuantificación.

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

Ajustar el número de hilos

TensorFlow Lite es compatible con kernels de subprocesos múltiples para muchos operadores. Puede aumentar la cantidad de subprocesos y acelerar la ejecución de los operadores. Sin embargo, aumentar la cantidad 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 de interpretación. Sin embargo, la ejecución de subprocesos múltiples tiene el costo de una mayor variabilidad del rendimiento dependiendo de qué más se ejecute al mismo tiempo. Este es particularmente el caso de las aplicaciones móviles. Por ejemplo, las pruebas aisladas pueden mostrar una aceleración de 2x frente a un solo subproceso, pero, si otra aplicación se está ejecutando al mismo tiempo, puede resultar en un peor rendimiento que un solo subproceso.

Eliminar copias redundantes

Si su aplicación no está cuidadosamente diseñada, 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 usar 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 agregó nuevas formas 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 se hacen cargo de partes de la ejecución del intérprete. TensorFlow Lite puede usar delegados por:

  • Uso de la API de redes neuronales de Android. Puede utilizar estos backends de aceleradores de hardware para mejorar la velocidad y la eficiencia de su modelo. Para habilitar la API de redes neuronales, consulte la guía de delegados de NNAPI .
  • El delegado de GPU está disponible en Android e iOS, utilizando OpenGL/OpenCL y Metal, respectivamente. Para probarlos, consulte el tutorial y la documentación 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 de 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 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 a la API de NN o 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 se complace en ayudar a diagnosticar y abordar los problemas de rendimiento específicos que pueda tener. Presente un problema en GitHub con los detalles del problema.