SmoothQuant: Cuantización posterior al entrenamiento precisa y eficiente para modelos de lenguaje grandes

Este es un artículo sobre la cuantificación posterior al entrenamiento (PTQ) de un modelo grande. Resumamos brevemente el contenido del artículo.
Dirección del artículo: https://arxiv.org/abs/2211.10438
Github: https://github.com/mit-han-lab/smoothquant

1. Conceptos cuantitativos

Primero introduzca los tres métodos de cuantificación:

  1. Cuantización por tensor: cada tensor utiliza el mismo tamaño de paso
  2. Cuantización por token: el mismo token en tensor usa el mismo tamaño de paso
  3. Cuantización por canal: el mismo canal en tensor utiliza el mismo tamaño de paso
    inserte la descripción de la imagen aquí
  • Según los resultados, sólo la cuantificación por canal mantiene una alta precisión.
  • Sin embargo, la cuantificación por canal no se asigna bien a los núcleos GEMM acelerados por hardware (el hardware no puede funcionar de manera eficiente, lo que aumenta el tiempo de cálculo), por lo que trabajos anteriores han adoptado la cuantificación por token para las activaciones.
    inserte la descripción de la imagen aquí

2. Motivación e ideas

inserte la descripción de la imagen aquí
Esta imagen ilustra claramente varias dificultades en la cuantificación del LLM:

  1. La capa de activación es más difícil de cuantificar que el peso, que suele tener una pequeña variación y es más fácil de cuantificar.
  2. Los valores atípicos de la capa de activación difieren demasiado de la mayoría, lo que da como resultado niveles de cuantificación efectivos bajos.
  3. Los valores atípicos de la capa de activación tienen las características de apariencia continua (en cada token) y pequeña variación en cada canal, por lo que el efecto de cuantificación por canal es mejor que la cuantificación por token.

Por tanto, la idea central del autor es:

  • Migrar la dificultad de cuantificación de la capa de activación al peso , es decir, reducir la capa de activación, ampliar la capa de peso y mantener la equivalencia matemática de la capa lineal. Esto reduce la variación de la capa de activación y aumenta la variación del peso.
    inserte la descripción de la imagen aquí

3. Método específico

  • Para que la amplitud máxima de cada canal de la capa de activación alcance el mismo nivel, tome sj = max ( ∣ X j ∣ ) , j = 1 , 2 , . . . , s_j=max(|X_j|), j =1,2 ,...,sj=ma x ( Xj) ,j=1 ,2 ,... , C i C_iCyoSuaviza cada canal de la capa de activación.
  • Sin embargo, esto no considera la distribución de la varianza de los pesos, lo que dificulta la cuantificación de los pesos, por lo que se introduce una fuerza de migración de hiperparámetro α para que el coeficiente de suavizado s tenga en cuenta tanto la capa de activación como los pesos.
    inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

diseño de hiperparámetros

  • El autor encontró a través de experimentos de ablación: α = 0,4-0,6, para obtener menores errores de cuantificación de activación y peso, y mantener el rendimiento del modelo después de la cuantificación.
  • Generalmente se establece en 0,5 (la Figura 5 es un ejemplo de α = 0,5, que presenta el proceso de cálculo de SmoothQuant). Para modelos grandes con valores atípicos más significativos en la capa de activación (como GLM-130B), se debe establecer un α mayor. conjunto, como 0,75 .
    inserte la descripción de la imagen aquí

4. Resultados

  • Después de que SmoothQuant suaviza la capa de activación y los pesos, utiliza la cuantificación por tensor o por token para realizar W8A8.
  • Según diferentes métodos de cuantificación, el autor propone tres estrategias O1, O2 y O3, y el retraso en el cálculo disminuye a su vez. En comparación con otros métodos de cuantificación, este método puede mantener una alta precisión.
  • Además, el autor integró SmoothQuant en PyTorch y FasterTransformer para obtener hasta 1,56 veces una aceleración de inferencia y reducir a la mitad la huella de memoria, y cuanto más grande es el modelo, más obvio es el efecto de aceleración.

(La siguiente tabla es que he integrado las tres tablas juntas)
inserte la descripción de la imagen aquí

5. Solicitud

SmoothQuant aplicado al transformador

  • Las capas lineales ocupan la mayoría de los parámetros y cálculos del modelo LLM. El suavizado de escala se realiza en las activaciones de entrada de las capas de autoatención y de retroalimentación, y todas las capas lineales se cuantifican utilizando W8A8.
  • Cuantización de operadores BMM en cálculos de atención. Primero, INT8 se usa para cuantificar la entrada y el peso de operadores computacionalmente intensivos como BMM (multiplicaciones de matrices por lotes) en la capa lineal y la capa de atención, mientras que las operaciones en otros elementos livianos, como Softmax y LayerNorm, mantienen la activación como FP16. un diseño de este tipo ayuda a equilibrar la precisión y la eficiencia de la inferencia.
    inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/LoveJSH/article/details/132114469
Recomendado
Clasificación