¡Reserva! Google I / O regresa del 18 al 20 de mayo Regístrese ahora
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Optimización del modelo

Los dispositivos de borde a menudo tienen memoria o potencia computacional limitada. Se pueden aplicar varias optimizaciones a los modelos para que se puedan ejecutar dentro de estas restricciones. Además, algunas optimizaciones permiten el uso de hardware especializado para inferencias aceleradas.

TensorFlow Lite y TensorFlow Model Optimization Toolkit proporcionan herramientas para minimizar la complejidad de optimizar la inferencia.

Se recomienda que considere la optimización del modelo durante el proceso de desarrollo de su aplicación. Este documento describe algunas de las mejores prácticas para optimizar los modelos de TensorFlow para la implementación en hardware perimetral.

Por qué los modelos deberían optimizarse

Hay varias formas principales en las que la optimización del modelo puede ayudar con el desarrollo de aplicaciones.

Reducción de talla

Se pueden utilizar algunas formas de optimización para reducir el tamaño de un modelo. Los modelos más pequeños tienen los siguientes beneficios:

  • Tamaño de almacenamiento más pequeño : los modelos más pequeños ocupan menos espacio de almacenamiento en los dispositivos de sus usuarios. Por ejemplo, una aplicación de Android que utiliza un modelo más pequeño ocupará menos espacio de almacenamiento en el dispositivo móvil de un usuario.
  • Tamaño de descarga más pequeño : los modelos más pequeños requieren menos tiempo y ancho de banda para descargar a los dispositivos de los usuarios.
  • Menor uso de memoria: los modelos más pequeños usan menos RAM cuando se ejecutan, lo que libera memoria para que la utilicen otras partes de la aplicación y puede traducirse en un mejor rendimiento y estabilidad.

La cuantificación puede reducir el tamaño de un modelo en todos estos casos, potencialmente a expensas de cierta precisión. La poda y la agrupación en clústeres pueden reducir el tamaño de un modelo para descargar al hacerlo más fácilmente comprimible.

Reducción de latencia

La latencia es la cantidad de tiempo que se tarda en ejecutar una única inferencia con un modelo determinado. Algunas formas de optimización pueden reducir la cantidad de cálculo necesario para ejecutar la inferencia mediante un modelo, lo que da como resultado una latencia más baja. La latencia también puede tener un impacto en el consumo de energía.

Actualmente, la cuantificación se puede usar para reducir la latencia simplificando los cálculos que ocurren durante la inferencia, potencialmente a expensas de cierta precisión.

Compatibilidad del acelerador

Algunos aceleradores de hardware, como Edge TPU , pueden ejecutar inferencias extremadamente rápido con modelos que se han optimizado correctamente.

Generalmente, este tipo de dispositivos requieren que los modelos se cuantifiquen de una manera específica. Consulte la documentación de cada acelerador de hardware para obtener más información sobre sus requisitos.

Compensaciones

Las optimizaciones pueden potencialmente resultar en cambios en la precisión del modelo, que deben ser considerados durante el proceso de desarrollo de la aplicación.

Los cambios de precisión dependen del modelo individual que se optimiza y son difíciles de predecir con anticipación. Por lo general, los modelos optimizados para el tamaño o la latencia perderán una pequeña cantidad de precisión. Dependiendo de su aplicación, esto puede afectar o no la experiencia de sus usuarios. En raras ocasiones, ciertos modelos pueden ganar algo de precisión como resultado del proceso de optimización.

Tipos de optimización

Actualmente, TensorFlow Lite admite la optimización a través de la cuantificación, la poda y la agrupación en clústeres.

Estos son parte del kit de herramientas de optimización de modelos de TensorFlow , que proporciona recursos para técnicas de optimización de modelos que son compatibles con TensorFlow Lite.

Cuantificación

La cuantificación funciona reduciendo la precisión de los números utilizados para representar los parámetros de un modelo, que por defecto son números de coma flotante de 32 bits. Esto da como resultado un tamaño de modelo más pequeño y un cálculo más rápido.

Los siguientes tipos de cuantificación están disponibles en TensorFlow Lite:

Técnica Requerimientos de datos Reducción de talla Precisión Hardware compatible
Cuantificación de float16 posterior al entrenamiento Sin datos Hasta 50% Pérdida de precisión insignificante CPU, GPU
Cuantización de rango dinámico posterior al entrenamiento Sin datos Hasta 75% Pérdida de precisión CPU, GPU (Android)
Cuantización de enteros posterior al entrenamiento Muestra representativa sin etiquetar Hasta 75% Pérdida de precisión menor CPU, GPU (Android), EdgeTPU, Hexagon DSP
Entrenamiento consciente de la cuantificación Datos de entrenamiento etiquetados Hasta 75% Pérdida de precisión mínima CPU, GPU (Android), EdgeTPU, Hexagon DSP

A continuación se muestran los resultados de latencia y precisión para la cuantificación posterior al entrenamiento y el entrenamiento consciente de la cuantificación en algunos modelos. Todos los números de latencia se miden en dispositivos Pixel 2 con una sola CPU de gran núcleo. A medida que mejore el conjunto de herramientas, también lo harán los números aquí:

Modelo Precisión Top-1 (Original) Precisión de primer nivel (cuantificado posterior al entrenamiento) Precisión de primer nivel (formación consciente de cuantificación) Latencia (original) (ms) Latencia (cuantificado posterior al entrenamiento) (ms) Latencia (entrenamiento consciente de cuantificación) (ms) Tamaño (Original) (MB) Tamaño (optimizado) (MB)
Mobilenet-v1-1-224 0,709 0,657 0,70 124 112 64 16,9 4.3
Mobilenet-v2-1-224 0,719 0,637 0,709 89 98 54 14 3.6
Inception_v3 0,78 0,772 0,775 1130 845 543 95,7 23,9
Resnet_v2_101 0,770 0,768 N / A 3973 2868 N / A 178,3 44,9
Tabla 1 Beneficios de la cuantificación del modelo para modelos de CNN seleccionados

Cuantización completa de enteros con activaciones int16 y ponderaciones int8

La cuantificación con activaciones de int16 es un esquema de cuantificación de enteros completo con activaciones en int16 y pesos en int8. Este modo puede mejorar la precisión del modelo cuantificado en comparación con el esquema de cuantificación de enteros completo con activaciones y pesos en int8 manteniendo un tamaño de modelo similar. Se recomienda cuando las activaciones son sensibles a la cuantificación.

NOTA: Actualmente, solo las implementaciones de kernel de referencia no optimizadas están disponibles en TFLite para este esquema de cuantificación, por lo que, por defecto, el rendimiento será lento en comparación con los kernels int8. Actualmente, se puede acceder a todas las ventajas de este modo a través de hardware especializado o software personalizado.

A continuación se muestran los resultados de precisión para algunos modelos que se benefician de este modo.

Modelo Tipo de métrica de precisión Precisión (activaciones float32) Precisión (int8 activaciones) Precisión (int16 activaciones)
Wav2letter NOSOTROS SOMOS 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (desenrollado) CER 6,13% 43,67% 6,52%
YoloV3 mAP (IOU = 0,5) 0.577 0.563 0.574
MobileNetV1 Precisión Top-1 0,7062 0,694 0,6936
MobileNetV2 Precisión Top-1 0,718 0,7126 0,7137
MobileBert F1 (coincidencia exacta) 88,81 (81,23) 2,08 (0) 88,73 (81,15)
Tabla 2 Beneficios de la cuantificación del modelo con activaciones int16

Poda

La poda funciona eliminando parámetros dentro de un modelo que tienen un impacto menor en sus predicciones. Los modelos podados tienen el mismo tamaño en disco y tienen la misma latencia en tiempo de ejecución, pero se pueden comprimir de manera más eficaz. Esto hace que la poda sea una técnica útil para reducir el tamaño de descarga del modelo.

En el futuro, TensorFlow Lite proporcionará una reducción de la latencia para los modelos podados.

Agrupación

La agrupación funciona agrupando los pesos de cada capa en un modelo en un número predefinido de grupos y luego compartiendo los valores de centroide para los pesos que pertenecen a cada grupo individual. Esto reduce el número de valores de peso únicos en un modelo, reduciendo así su complejidad.

Como resultado, los modelos agrupados se pueden comprimir de manera más eficaz, proporcionando beneficios de implementación similares a la poda.

Flujo de trabajo de desarrollo

Como punto de partida, compruebe si los modelos en modelos alojados pueden funcionar para su aplicación. De lo contrario, recomendamos que los usuarios comiencen con la herramienta de cuantificación posterior a la capacitación, ya que es de amplia aplicación y no requiere datos de capacitación.

Para los casos en los que no se cumplen los objetivos de precisión y latencia, o el soporte del acelerador de hardware es importante, el entrenamiento con reconocimiento de cuantificación es la mejor opción. Consulta técnicas de optimización adicionales en el kit de herramientas de optimización de modelos de TensorFlow .

Si desea reducir aún más el tamaño de su modelo, puede intentar podar y / o agrupar antes de cuantificar sus modelos.