Optimización de modelos

Los dispositivos perimetrales a menudo tienen memoria o potencia de procesamiento limitadas. Varios Se pueden aplicar optimizaciones a los modelos para que puedan ejecutarse dentro de estas restricciones. Además, algunas optimizaciones permiten el uso de modelos para la inferencia acelerada.

LiteRT y la optimización de modelos de TensorFlow El kit de herramientas proporciona herramientas para y minimizar la complejidad de la optimización de la inferencia.

Se recomienda que consideres la optimización del modelo durante la aplicación de desarrollo de software. En este documento, se describen algunas prácticas recomendadas para la optimización Modelos de TensorFlow para su implementación en hardware perimetral.

Por qué se deben optimizar los modelos

Existen varias formas principales en que la optimización de modelos puede ayudar con la aplicación en el desarrollo de software.

Reducción de tamaño

Algunas formas de optimización pueden usarse para reducir el tamaño de un modelo. Más pequeña modelos de AA tienen los siguientes beneficios:

  • Tamaño de almacenamiento más pequeño: Los modelos más pequeños ocupan menos espacio de almacenamiento en la de los usuarios dispositivos. Por ejemplo, una app para Android que usa un modelo más pequeño tomará menos espacio de almacenamiento en el dispositivo móvil del usuario.
  • Menor tamaño de descarga: Los modelos más pequeños requieren menos tiempo y ancho de banda para descargar a las carpetas dispositivos.
  • Menos uso de memoria: Los modelos más pequeños usan menos RAM cuando se ejecutan, lo que libera memoria para otras partes de tu app se traducen en un mejor rendimiento y estabilidad.

La cuantización puede reducir el tamaño de un modelo en todos estos casos, lo que posiblemente a expensas de cierta precisión. La reducción y el agrupamiento en clústeres pueden reducir el tamaño de un para descargarlo haciéndolo más fácil de comprimir.

Reducción de la latencia

La latencia es la cantidad de tiempo que lleva ejecutar una sola inferencia con una inferencia un modelo de responsabilidad compartida. Algunas formas de optimización pueden reducir la cantidad de procesamiento necesario. para ejecutar inferencias con un modelo, lo que da como resultado una latencia más baja. La latencia también puede un impacto en el consumo de energía.

Actualmente, la cuantización puede usarse para reducir la latencia simplificando cálculos que se producen durante la inferencia, posiblemente a expensas de algunas exactitud.

Compatibilidad con el acelerador

Algunos aceleradores de hardware, como Edge (TPU), puede ejecutar inferencias muy rápido con modelos que se optimizaron correctamente.

Generalmente, este tipo de dispositivos requiere que los modelos se cuantifiquen de una forma de una nueva manera. Consulta la documentación de cada acelerador de hardware para obtener más información y los requisitos de cumplimiento.

Concesiones

Las optimizaciones pueden provocar cambios en la exactitud del modelo, lo que debe considerados durante el proceso de desarrollo de la aplicación.

Los cambios en la precisión dependen del modelo individual que se optimiza, difíciles de predecir con anticipación. Por lo general, los modelos que están optimizados para el tamaño o la latencia perderán un poco de exactitud. Según tu aplicaciones, esto puede o no afectar la seguridad una experiencia fluida a los desarrolladores. En casos excepcionales, como resultado del proceso de optimización.

Tipos de optimización

LiteRT actualmente admite la optimización a través de la cuantización, la reducción y el agrupamiento en clústeres.

Estos forman parte del proceso de optimización de modelos de TensorFlow de Google Cloud, que proporciona recursos para las técnicas de optimización de modelos que son compatibles con TensorFlow Lite.

Cuantización

Cuantización reduciendo la precisión de los números que se usan para representar la precisión que, de forma predeterminada, son números de punto flotante de 32 bits. Esto da como resultado un tamaño de modelo más pequeño y un procesamiento más rápido.

Los siguientes tipos de cuantización están disponibles en LiteRT:

Técnica Requisitos de los datos Reducción de tamaño Precisión Hardware compatible
Cuantización de float16 posterior al entrenamiento No hay datos Hasta el 50% Pérdida insignificante de precisión CPU, GPU
Cuantización del rango dinámico posterior al entrenamiento No hay datos Hasta un 75% Pérdida de exactitud mínima CPU, GPU (Android)
Cuantización de números enteros posterior al entrenamiento Muestra representativa sin etiquetar Hasta un 75% Baja pérdida de precisión pequeña CPU, GPU (Android) y EdgeTPU
Entrenamiento basado en la cuantización Datos de entrenamiento etiquetados Hasta un 75% Pérdida de exactitud mínima CPU, GPU (Android) y EdgeTPU

El siguiente árbol de decisión te ayuda a seleccionar los esquemas de cuantización que podrías para tu modelo, simplemente en función del tamaño del modelo esperado y exactitud.

árbol de decisión de cuantización

A continuación, se muestran los resultados de latencia y exactitud para la cuantización posterior al entrenamiento y para el entrenamiento con reconocimiento de cuantización en algunos modelos. Todos los números de latencia se miden en Dispositivos Pixel 2 que usan una CPU de un solo núcleo grande. A medida que mejore el kit de herramientas, también lo hará aquí los números:

Modelo Precisión principal (original) Exactitud máxima (posterior al entrenamiento cuantificado) Precisión principal (entrenamiento con reconocimiento de la cuantización) Latencia (original) (ms) Latencia (cuantificada posterior al entrenamiento) (ms) Latencia (entrenamiento basado en la cuantización) (ms) Tamaño (original) (MB) Tamaño (optimizado) (MB)
Mobilenet-v1-1-2240,7090,6570.70 1241126416.94.3
Mobilenet-v2-1-2240,7190,6370,709 899854143.6
Inception_v30.780.7720,775 113084554395,723,9
Resnet_v2_1010,7700,768N/A 39732868N/A178,344.9
Tabla 1 Beneficios de la cuantización de modelos para modelos seleccionados de CNN
.

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

Cuantización con activaciones de int16 es un esquema de cuantización de números enteros completo con activaciones en int16 y ponderaciones en int8. Este modo puede mejorar la exactitud del modelo cuantizado en comparación con esquema de cuantización de números enteros completo con activaciones y pesos en int8 manteniendo un tamaño de modelo similar. Se recomienda cuando las activaciones son sensibles a la cuantización.

NOTA: Actualmente, solo se realizan implementaciones de kernel de referencia no optimizadas. disponibles en TFLite para este esquema de cuantización, por lo que, de forma será lenta en comparación con los kernels int8. Todas las ventajas de este modo pueden se accede actualmente a través de hardware especializado o software personalizado.

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

Modelo Tipo de métrica de exactitud Exactitud (activaciones float32) Precisión (activaciones de Int8) Exactitud (activaciones de int16)
Wav2letterWER6,7%7,7% 7,2%
DeepSpeech 0.5.1 (sin rodar)CER6,13%43,67% 6,52%
YoloV3mAP(IOU=0.5)0,5770,563 0,574
MobileNetV1Precisión más alta0,70620,694 0,6936
MobileNetV2Precisión más alta0,7180,7126 0,7137
MobileBertF1(concordancia exacta)88,81(81,23)2,08(0) 88,73(81,15)
Tabla 2 Beneficios de la cuantización de modelos con activaciones de int16
.

De poda

La reducción funciona por quitar parámetros dentro de un modelo que tienen un impacto menor en su predicciones. Los modelos reducidos tienen el mismo tamaño en el disco y el mismo entorno de ejecución. pero pueden comprimirse de manera más eficaz. Esto hace que la poda técnica para reducir el tamaño de descarga del modelo.

En el futuro, LiteRT brindará una reducción de latencia para los modelos reducidos.

Agrupamiento en clústeres

Agrupamiento en clústeres agrupa los pesos de cada capa de un modelo en un número predefinido de clústeres, luego comparte los valores centroides para los pesos que pertenecen a cada uno clúster individual. Esto reduce la cantidad de valores de peso únicos en un modelo. lo que reduce su complejidad.

Como resultado, los modelos agrupados en clústeres se pueden comprimir de manera más eficaz, lo que proporciona y los beneficios de implementación son similares a la reducción.

Flujo de trabajo de desarrollo

Como punto de partida, comprueba si los modelos de la categoría alojados de Terraform pueden funcionar en tu aplicación. De lo contrario, recomendar que los usuarios comiencen con la cuantización posterior al entrenamiento, de aprendizaje automático, ya que se puede aplicar de forma generalizada sin requerir datos de entrenamiento.

Para los casos en los que no se cumplen los objetivos de exactitud y latencia, o es importante admitir el acelerador, que reconoce la cuantización entrenamiento es la mejor opción. Consulta más técnicas de optimización en la Optimización de modelos de TensorFlow Kit de herramientas.

Si quieres reducir aún más el tamaño del modelo, puedes intentar con la reducción. o el agrupamiento en clústeres antes de cuantificar los modelos.