Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/es-419/lite/performance/model_optimization.md
25118 views

Optimización de modelos

Los dispositivos Edge suelen tener una memoria o una potencia de cálculo limitadas. Pueden aplicarse diversas optimizaciones a los modelos para que puedan ejecutarse dentro de estas limitaciones. Además, algunas optimizaciones permiten usar hardware especializado para acelerar la inferencia.

TensorFlow Lite y el TensorFlow Model Optimization Toolkit ofrecen herramientas para minimizar la complejidad de la optimización de la inferencia.

Es recomendable que considere la optimización de modelos durante el proceso de desarrollo de su aplicación. Este documento describe algunas de las mejores prácticas para optimizar los modelos TensorFlow para su implementación en hardware EDGE.

Por qué deben optimizarse los modelos

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

Reducción de tamaño

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

  • Menor tamaño de almacenamiento: Los modelos más pequeños ocupan menos espacio de almacenamiento en los dispositivos de sus usuarios. Por ejemplo, una app para Android que use un modelo más pequeño ocupará menos espacio de almacenamiento en el dispositivo móvil de un usuario.

  • Menor tamaño de descarga: Los modelos más pequeños requieren menos tiempo y ancho de banda para descargarse en los dispositivos de los usuarios.

  • Menos uso de memoria: Los modelos más pequeños utilizan menos memoria RAM cuando se ejecutan, lo que libera memoria para que la usen otras partes de su aplicación y puede traducirse en un mejor rendimiento y estabilidad.

La cuantizació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 pueden reducir el tamaño de un modelo para su descarga haciéndolo más fácilmente compresible.

Reducción de la latencia

La latencia es la cantidad de tiempo que se tarda en ejecutar una única inferencia con un modelo dado. Algunas formas de optimización pueden reducir la cantidad de cálculo necesaria para ejecutar la inferencia usando un modelo, lo que resulta en una menor latencia. La latencia también puede tener un impacto en el consumo de energía.

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

Compatibilidad del acelerador

Algunos aceleradores de hardware, como el Edge TPU, pueden ejecutar la inferencia extremadamente rápido con modelos que hayan sido correctamente optimizados.

Por lo general, 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 saber más sobre sus requisitos.

Contrapartidas

Las optimizaciones pueden dar lugar a cambios en la precisión del modelo, que deben tenerse en cuenta durante el proceso de desarrollo de la aplicación.

Los cambios en la precisión dependen del modelo individual que se esté optimizando y son difíciles de predecir con antelación. Por lo general, los modelos que se optimizan 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 a la experiencia de sus usuarios. En raras ocasiones, algunos modelos pueden ganar algo de precisión como resultado del proceso de optimización.

Tipos de optimización

TensorFlow Lite admite actualmente la optimización mediante la cuantización, la poda y la agrupación.

Éstas forman parte del TensorFlow Model Optimization Toolkit, que ofrece recursos para técnicas de optimización de modelos compatibles con TensorFlow Lite.

Cuantización

La cuantización funciona reduciendo la precisión de los números usados para representar los parámetros de un modelo, que de forma predeterminada son números de punto flotante de 32 bits. Esto resulta en un modelo de menor tamaño y un cálculo más rápido.

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

TécnicaRequisitos de datosReducción de tamañoPrecisiónHardware compatible
Cuantización de float16 posentrenamientoSin datosHasta 50%Pérdida de precisión insignificanteCPU, GPU
Cuantización del rango dinámico postentrenamientoSin datosHasta 75%La menor pérdida de precisiónCPU, GPU (Android)
Cuantización entera postentrenamientoMuestra representativa sin etiquetarHasta 75%Pequeña pérdida de precisiónCPU, GPU (Android), EdgeTPU, Hexagon DSP
Entrenamiento consciente de la cuantizaciónDatos de entrenamiento etiquetadosHasta 75%La menor pérdida de precisiónCPU, GPU (Android), EdgeTPU, Hexagon DSP

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

árbol de decisión de cuantización

A continuación se muestran los resultados de latencia y precisión para la cuantización postentrenamiento y el entrenamiento consciente de la cuantización en algunos modelos. Todas las cifras de latencia se han medido en dispositivos Pixel 2 usando una CPU de núcleo grande. A medida que mejore el conjunto de herramientas, también lo harán los números aquí:

Model Top-1 Accuracy (Original) Top-1 Accuracy (Post Training Quantized) Top-1 Accuracy (Quantization Aware Training) Latency (Original) (ms) Latency (Post Training Quantized) (ms) Latency (Quantization Aware Training) (ms) Size (Original) (MB) Size (Optimized) (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
Table 1 Benefits of model quantization for select CNN models

Cuantización entera con activaciones int16 y ponderaciones int8

Cuantificación con activaciones int16 es un esquema de cuantización entero completo con activaciones en int16 y ponderaciones en int8. Este modo puede mejorar la precisión del modelo cuantizado en comparación con el esquema de cuantización entera completa con activaciones y ponderaciones en int8 manteniendo un tamaño de modelo similar. Se recomienda cuando las activaciones son sensibles a la cuantización.

NOTA: Actualmente sólo se dispone en TFLite de implementaciones no optimizadas del kernel de referencia para este esquema de cuantización, por lo que de forma predeterminada 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 de algunos modelos que son útiles en este modo.

Model Accuracy metric type Accuracy (float32 activations) Accuracy (int8 activations) Accuracy (int16 activations)
Wav2letterWER6.7%7.7% 7.2%
DeepSpeech 0.5.1 (unrolled)CER6.13%43.67% 6.52%
YoloV3mAP(IOU=0.5)0.5770.563 0.574
MobileNetV1Top-1 Accuracy0.70620.694 0.6936
MobileNetV2Top-1 Accuracy0.7180.7126 0.7137
MobileBertF1(Exact match)88.81(81.23)2.08(0) 88.73(81.15)
Table 2 Benefits of model quantization with int16 activations

Poda

La poda funciona eliminando 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 la misma latencia runtime, pero pueden comprimirse con mayor eficacia. Esto hace que la poda sea una técnica útil para reducir el tamaño de descarga de los modelos.

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

Agrupación

La agrupación funciona agrupando las ponderaciones de cada capa de un modelo en un número predefinido de clusters y compartiendo después los valores del centroide de las ponderaciones pertenecientes a cada cluster individual. Esto reduce el número de valores de ponderación únicos en un modelo, reduciendo así su complejidad.

Como resultado, los modelos agrupados pueden comprimirse con mayor eficacia, lo que ofrece beneficios de implementación similares a la poda.

Flujo de trabajo de desarrollo

Como punto de partida, revise si los modelos de modelos alojados pueden funcionar para su aplicación. Si no es así, recomendamos a los usuarios que empiecen con la herramienta de cuantización posterior al entrenamiento, ya que es ampliamente aplicable y no requiere datos de entrenamiento.

Para los casos en los que no se cumplan los objetivos de precisión y latencia, o sea importante la compatibilidad con aceleradores de hardware, la mejor opción es el entrenamiento basado en la cuantización{:.external}. Consulte técnicas de optimización adicionales en TensorFlow Model Optimization Toolkit.

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