Cuantificación, poda y compresión de modelos de aprendizaje profundo

fp16 se refiere a un tipo de datos que usa 2 bytes (16 bits) para codificar y almacenar;

fp32 se refiere al uso de 4 bytes (32 bits);

Optimización del entrenamiento en comparación con fp16 y fp32 :

  • 1. Uso de memoria reducido : el uso de memoria de la aplicación fp16 es más pequeño que antes, y se puede configurar un tamaño de lote más grande
  • 2. Computación acelerada : la computación acelerada solo está disponible en algunas GPU nuevas recientes, y no he experimentado los beneficios de esta área... Algunos artículos señalan que la velocidad de entrenamiento de fp16 puede ser de 2 a 8 veces mayor que la de fp32

tipo de datos

Rangos

flotar16

-65504 ~ 65504

flotar32

-2^31 ~ 2^31-1

tu8

-2 ^ 7 ~ 2 ^ 7-1 (-128 ~ 127)

uint8

0~2^8-1 (0~255)

1. Propósito cuantitativo

        Al desarrollar aplicaciones de aprendizaje automático, es importante utilizar de manera eficiente los recursos informáticos tanto en el lado del servidor como en el dispositivo. Para respaldar una implementación más eficiente en servidores y dispositivos perimetrales, la compatibilidad con la cuantificación de modelos será más importante.

  La cuantificación utiliza instrucciones de enteros de 8 bits (int8) para reducir el tamaño del modelo y ejecutar la inferencia más rápido (reduciendo la latencia), y puede ser la diferencia entre los modelos que logran los objetivos de calidad de servicio o incluso se ajustan a los recursos disponibles en los dispositivos móviles. Le permite implementar modelos más grandes y precisos incluso en situaciones con menos recursos limitados.

        La cuantificación es principalmente una técnica para acelerar la inferencia y solo admite el paso hacia adelante de los operadores de cuantificación. En el aprendizaje profundo, la cuantificación se refiere al uso de menos bits para almacenar tensores que originalmente se almacenaron en números de punto flotante y al uso de menos bits para completar los cálculos que originalmente se realizaron en números de punto flotante.

 

2. Introducción a la cuantificación

  La cuantificación es principalmente una técnica para acelerar la inferencia, y los operadores de cuantificación solo admiten el paso hacia adelante. La cuantificación se refiere a la técnica de usar datos de menor precisión para cálculos y accesos a la memoria, generalmente int8, en comparación con las implementaciones de punto flotante.

Las ganancias de rendimiento se pueden lograr en varias áreas importantes:

        Tamaño del modelo reducido 4 veces;

        Reducción de 2 a 4 veces en el ancho de banda de la memoria;

Inferencia de 2 a 4 veces más rápida debido al ahorro de ancho de banda de la memoria y cálculos más rápidos con algoritmos int8.

  Sin embargo, la cuantificación no viene sin costos adicionales. Fundamentalmente, la cuantificación significa introducir aproximaciones y la red resultante es un poco menos precisa. Estas técnicas intentan minimizar la brecha entre la precisión de punto flotante total y la precisión cuantificada.    

3. Método de cuantificación

3.1 Cuantificación dinámica - cuantización dinámica

  El método de cuantificación más simple compatible con PyTorch se llama cuantificación dinámica. Esto implica no solo convertir los pesos a int8, sino también convertir las activaciones a int 8 (por lo tanto, "dinámico") antes de realizar el cálculo. Por lo tanto, los cálculos se realizarán utilizando implementaciones eficientes de convolución y multiplicación de matrices int8, lo que dará como resultado cálculos más rápidos. Sin embargo, las activaciones se leen y se escriben en la memoria en formato de coma flotante.

3.2 Cuantificación estática posterior al entrenamiento: cuantificación estática después del entrenamiento

  El rendimiento (latencia) se puede mejorar aún más convirtiendo la red para que use aritmética de enteros y accesos a memoria int8. La cuantificación estática realiza el paso adicional de alimentar primero lotes de datos a través de la red y calcular la distribución resultante en diferentes activaciones. Esta información se utiliza para determinar cómo se deben cuantificar específicamente las diferentes activaciones en el momento de la inferencia. Es importante destacar que este paso adicional nos permite pasar valores cuantificados entre operaciones, en lugar de convertir estos valores en valores de punto flotante y luego en números enteros entre cada operación, lo que resulta en una aceleración significativa.

3.3 Entrenamiento consciente de la cuantificación - Entrenamiento consciente de la cuantificación

  El entrenamiento consciente de la cuantización (QAT) es el más preciso de los tres métodos. Con QAT, todos los pesos y activaciones se "pseudocuantifican" durante los pases de entrenamiento hacia adelante y hacia atrás: es decir, los valores de coma flotante se redondean para simular los valores de int8, pero todos los cálculos aún se realizan usando números de coma flotante. Por lo tanto, todos los ajustes de peso durante el entrenamiento se realizan con la "consciencia" del hecho de que el modelo finalmente se cuantificará; por lo tanto, después de la cuantificación, este método generalmente produce una mayor precisión que los otros dos métodos.

4. Introducción a PTQ y QAT

        Los métodos de cuantificación se pueden dividir en entrenamiento consciente de la cuantificación (QAT) y cuantificación posterior al entrenamiento (PTQ) según si se ajustan los parámetros cuantificados. La diferencia de operación entre estos dos métodos se muestra en la siguiente figura (QAT está a la izquierda y PTQ está a la derecha):

    

El entrenamiento QAT consciente de la cuantización consiste en cuantificar el modelo entrenado y luego volver a entrenarlo. Dado que el valor de punto fijo no se puede usar para el cálculo de gradiente inverso, el proceso de operación real es insertar nodos de cuantificación falsos (nodos de cuantificación falsos) antes de algunas operaciones, que se usan para obtener el valor de corte de los datos que fluyen a través de la operación durante el entrenamiento. , que es conveniente para implementar la cuantificación. Se utiliza para cuantificar nodos durante el modelado. Necesitamos obtener los mejores parámetros de cuantificación optimizando continuamente la precisión durante el entrenamiento. Debido a que necesita entrenar el modelo, tiene altos requisitos técnicos para los operadores.

  El PTQ de cuantificación posterior al entrenamiento utiliza un lote de datos de calibración para calibrar el modelo entrenado y convierte directamente la red FP32 entrenada en una red informática de punto fijo sin ningún entrenamiento en el modelo original. El proceso de cuantificación se puede completar ajustando solo unos pocos hiperparámetros, y el proceso es simple y rápido sin capacitación, por lo que este método se ha utilizado ampliamente en una gran cantidad de escenarios de implementación del lado del dispositivo y del lado de la nube.

tipo de modelo

opción preferida

Por qué

LSTM/RNN

cuantización dinámica

El rendimiento está determinado por el ancho de banda de cómputo / memoria de los pesos

BERT/Transformador

cuantización dinámica

El rendimiento está determinado por el ancho de banda de cómputo / memoria de los pesos

CNN

cuantización estática

Rendimiento limitado por el ancho de banda de la memoria activa

CNN

Entrenamiento consciente de la cuantización

En los casos en que la cuantificación estática no puede lograr precisión

Supongo que te gusta

Origin blog.csdn.net/xs1997/article/details/131747158
Recomendado
Clasificación