Optimización colaborativa

Mantenido por Arm ML Tooling

Este documento proporciona una descripción general de las API experimentales para combinar varias técnicas para optimizar los modelos de aprendizaje automático para su implementación.

Visión general

La optimización colaborativa es un proceso general que abarca varias técnicas para producir un modelo que, en el momento de la implementación, muestre el mejor equilibrio de las características del objetivo, como la velocidad de inferencia, el tamaño del modelo y la precisión.

La idea de las optimizaciones colaborativas es construir sobre técnicas individuales aplicándolas una tras otra para lograr el efecto de optimización acumulada. Son posibles varias combinaciones de las siguientes optimizaciones:

El problema que surge cuando se intenta encadenar estas técnicas es que aplicar una generalmente destruye los resultados de la técnica anterior, arruinando el beneficio general de aplicarlas todas simultáneamente; por ejemplo, la agrupación en clústeres no conserva la escasez introducida por la API de poda. Para resolver este problema, presentamos las siguientes técnicas experimentales de optimización colaborativa:

Estos proporcionan varias rutas de implementación que podrían usarse para comprimir un modelo de aprendizaje automático y aprovechar la aceleración del hardware en el momento de la inferencia. El siguiente diagrama muestra varias rutas de implementación que se pueden explorar en la búsqueda del modelo con las características de implementación deseadas, donde los nodos hoja son modelos listos para la implementación, lo que significa que están total o parcialmente cuantificados y en formato tflite. El relleno verde indica los pasos en los que se requiere reentrenamiento/ajuste fino y un borde rojo discontinuo resalta los pasos de optimización colaborativa. La técnica utilizada para obtener un modelo en un nodo determinado se indica en la etiqueta correspondiente.

collaborative optimization

En la figura anterior, se omite la ruta de implementación directa de solo cuantificación (después del entrenamiento o QAT).

La idea es llegar al modelo totalmente optimizado en el tercer nivel del árbol de implementación anterior; sin embargo, cualquiera de los otros niveles de optimización podría resultar satisfactorio y lograr el compromiso de latencia/precisión de inferencia requerido, en cuyo caso no se necesita más optimización. El proceso de entrenamiento recomendado sería recorrer iterativamente los niveles del árbol de implementación aplicable al escenario de implementación de destino y ver si el modelo cumple con los requisitos de latencia de inferencia y, si no, usar la técnica de optimización colaborativa correspondiente para comprimir aún más el modelo y repetir hasta que el modelo esté completamente optimizado (recortado, agrupado y cuantificado), si es necesario.

La siguiente figura muestra los gráficos de densidad del kernel de peso de muestra que pasa por la canalización de optimización colaborativa.

collaborative optimization density plot

El resultado es un modelo de implementación cuantificado con una cantidad reducida de valores únicos, así como una cantidad significativa de pesos dispersos, según la escasez objetivo especificada en el momento del entrenamiento. Además de las importantes ventajas de la compresión del modelo, el soporte de hardware específico puede aprovechar estos modelos agrupados dispersos para reducir significativamente la latencia de inferencia.

Resultados

A continuación se muestran algunos resultados de precisión y compresión que obtuvimos al experimentar con las rutas de optimización colaborativa de PQAT y CQAT.

Entrenamiento consciente de cuantización que conserva la dispersión (PQAT)

Modelo Elementos Base Modelo podado (50 % de escasez) Modelo QAT Modelo PQAT
DS-CNN-L Precisión FP32 Top1 95,23% 94,80% (INT8 falso) 94.721% (INT8 falso) 94.128%
Cuantificación de enteros completos INT8 94,48% 93,80% 94,72% 94,13%
Compresión 528.128 → 434.879 (17,66%) 528.128 → 334.154 (36,73%) 512.224 → 403.261 (21,27%) 512.032 → 303.997 (40,63%)
Mobilenet_v1-224 FP32 Top 1 Precisión 70,99% 70,11% (INT8 falso) 70.67% (INT8 falso) 70.29%
Cuantificación de enteros completos INT8 69,37% 67,82% 70,67% 70,29%
Compresión 4.665.520 → 3.880.331 (16,83%) 4.665.520 → 2.939.734 (37,00%) 4.569.416 → 3.808.781 (16,65%) 4.569.416 → 2.869.600 (37,20%)

Entrenamiento consciente de la cuantización de conservación de clústeres (CQAT)

Modelo Elementos Base Modelo agrupado Modelo QAT Modelo CQAT
Mobilenet_v1 en CIFAR-10 Precisión FP32 Top1 94,88% 94,48% (INT8 falso) 94.80% (INT8 falso) 94.60%
Cuantificación de enteros completos INT8 94,65% 94,41% 94,77% 94,52%
Tamaño 3,00 MB 2,00 MB 2,84 MB 1,94 MB
Mobilenet_v1 en ImageNet FP32 Top 1 Precisión 71,07% 65,30% (INT8 falso) 70.39% (INT8 falso) 65.35%
Cuantificación de enteros completos INT8 69,34% 60,60% 70,35% 65,42%
Compresión 4.665.568 → 3.886.277 (16,7%) 4.665.568 → 3.035.752 (34,9%) 4.569.416 → 3.804.871 (16,7%) 4.569.472 → 2.912.655 (36,25%)

Resultados de CQAT y PCQAT para modelos agrupados por canal

Los resultados a continuación se obtienen con la técnica de agrupamiento por canal . Ilustran que si las capas convolucionales del modelo se agrupan por canal, la precisión del modelo es mayor. Si su modelo tiene muchas capas convolucionales, le recomendamos agrupar por canal. La relación de compresión sigue siendo la misma, pero la precisión del modelo será mayor. La canalización de optimización del modelo está 'agrupada -> clúster conservando QAT -> cuantificación posterior al entrenamiento, int8' en nuestros experimentos.

Modelo Agrupado -> CQAT, int8 cuantificado Agrupado por canal -> CQAT, int8 cuantificado
DS-CNN-L 95.949% 96,44%
MobileNet-V2 71.538% 72.638%
MobileNet-V2 (recortado) 71,45% 71.901%

Ejemplos

Para obtener ejemplos completos de las técnicas de optimización colaborativa que se describen aquí, consulte los cuadernos de ejemplo de CQAT , PQAT , agrupamiento con conservación de la dispersión y PCQAT .