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.

Descripción general

La optimización colaborativa es un proceso global que abarca varias técnicas para producir un modelo que, en el momento de la implementación, muestre el mejor equilibrio entre 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 aprovechar técnicas individuales aplicándolas una tras otra para lograr el efecto de optimización acumulado. Son posibles varias combinaciones de las siguientes optimizaciones:

El problema que surge al intentar encadenar estas técnicas es que la aplicación de una normalmente 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 preserva la escasez introducida por la API de poda. Para resolver este problema, introducimos 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 parcial o totalmente cuantificados y en formato tflite. El relleno verde indica los pasos en los que se requiere reentrenamiento/ajuste y un borde rojo discontinuo resalta los pasos de optimización colaborativa. La técnica utilizada para obtener un modelo en un determinado nodo se indica en la etiqueta correspondiente.

collaborative optimization

En la figura anterior se omite la ruta de implementación directa de solo cuantificación (post-entrenamiento o QAT).

La idea es alcanzar el 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 equilibrio requerido entre latencia de inferencia y precisión, en cuyo caso no se necesita ninguna optimización adicional. El proceso de capacitación recomendado sería recorrer de forma iterativa los niveles del árbol de implementación aplicables al escenario de implementación objetivo 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 (podado, agrupado y cuantificado), si es necesario.

La siguiente figura muestra los gráficos de densidad del núcleo de peso de muestra que pasa por el proceso 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, dependiendo de la escasez objetivo especificada en el momento del entrenamiento. Además de las importantes ventajas de la compresión de modelos, el soporte de hardware específico puede aprovechar estos modelos dispersos y agrupados 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 rutas de optimización colaborativa PQAT y CQAT.

Entrenamiento consciente de la cuantificación que preserva la dispersión (PQAT)

Modelo Elementos Base Modelo podado (50% de escasez) Modelo QAT Modelo PQAT
DS-CNN-L Precisión superior 1 del FP32 95,23% 94,80% (INT8 falso) 94,721% (INT8 falso) 94,128%
Cuantización entera completa 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 de precisión 70,99% 70,11% (INT8 falso) 70,67% (INT8 falso) 70,29%
Cuantización entera completa 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 cuantificación que preserva el clúster (CQAT)

Modelo Elementos Base Modelo agrupado Modelo QAT Modelo CQAT
Mobilenet_v1 en CIFAR-10 Precisión superior 1 del FP32 94,88% 94,48% (INT8 falso) 94,80% (INT8 falso) 94,60%
Cuantización entera completa INT8 94,65% 94,41% 94,77% 94,52%
Tamaño 3,00MB 2,00MB 2,84MB 1,94MB
Mobilenet_v1 en ImageNet FP32 Top 1 de precisión 71,07% 65,30% (INT8 falso) 70,39% (INT8 falso) 65,35%
Cuantización entera completa 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 clustering 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 agruparlo 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 -> QAT de preservación del clúster -> cuantificación posterior al entrenamiento, int8' en nuestros experimentos.

Modelo Agrupado -> CQAT, int8 cuantificado Agrupados por canal -> CQAT, int8 cuantificado
DS-CNN-L 95,949% 96,44%
MobileNet-V2 71,538% 72,638%
MobileNet-V2 (podado) 71,45% 71,901%

Ejemplos

Para ver ejemplos de un extremo a otro de las técnicas de optimización colaborativa descritas aquí, consulte los cuadernos de ejemplo de CQAT , PQAT , clustering que preserva la dispersión y PCQAT .