Ayuda a proteger la Gran Barrera de Coral con TensorFlow en Kaggle Únete Challenge

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 la TensorFlow modelo de optimización Toolkit proporciona herramientas para minimizar la complejidad de la optimización de 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 tamaño

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:

  • Más pequeño tamaño de almacenamiento: Los modelos más pequeños ocupan menos espacio de almacenamiento en los dispositivos de los 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.
  • Más pequeño tamaño de la descarga: modelos más pequeños requieren menos tiempo y ancho de banda de descarga para dispositivos de los usuarios.
  • Menos uso de la memoria: los modelos más pequeños utilizan menos memoria RAM cuando se ejecutan, lo que libera memoria para otras partes de la aplicación a usar, 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 sola inferencia con un modelo dado. 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 el borde de TPU , puede ejecutar la inferencia extremadamente rápido con los 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 casos excepcionales, 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 de la TensorFlow modelo de optimización Toolkit , que proporciona recursos para las técnicas de optimización de modelos que son compatibles con TensorFlow Lite.

Cuantización

Cuantización funciona reduciendo la precisión de los números usados 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 tamaño 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 mínima CPU, GPU (Android)
Cuantización de enteros posterior al entrenamiento Muestra representativa sin etiquetar Hasta 75% Pequeña pérdida de precisión 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

El siguiente árbol de decisiones le ayuda a seleccionar los esquemas de cuantificación que podría querer usar para su modelo, simplemente basándose en el tamaño y la precisión esperados del modelo.

árbol de decisión de cuantificación

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
La Tabla 1 Beneficios del modelo de cuantificación para algunos modelos de CNN

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

Cuantificación con activaciones Int16 es un esquema de cuantificación entero 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: implementaciones del núcleo de referencia Actualmente, sólo no optimizados están disponibles en TFLite para este esquema de cuantificación, lo que por defecto el rendimiento será lenta en comparación con los núcleos 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 de 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 del modelo de cuantificación con activaciones Int16

Poda

La poda de las obras mediante la eliminación de los parámetros dentro de un modelo que sólo 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 de obras mediante la agrupación de los pesos de cada capa en un modelo en un número predefinido de racimos, y luego compartir los valores 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, de verificación si los modelos en los modelos alojados pueden trabajar para su aplicación. Si no es así, se recomienda que los usuarios comienzan con la herramienta de cuantificación posterior a la capacitación ya que este es ampliamente aplicable y no requiere de datos de entrenamiento.

Para los casos en que no se cumplan los objetivos de la exactitud y la latencia, o el apoyo acelerador de hardware es importante, la formación de cuantificación consciente es la mejor opción. Ver técnicas de optimización adicionales bajo la TensorFlow modelo de optimización Toolkit .

Si desea reducir aún más el tamaño de su modelo, puede intentar la poda y / o la agrupación antes de la cuantificación de sus modelos.