Inicio
Think
Temas
Cuantificación
Publicación: 29 de julio de 2024
Colaboradores: Bryan Clark
La cuantificación es el proceso de reducir la precisión de una señal digital, generalmente de un formato de mayor precisión a un formato de menor precisión. Esta técnica se emplea ampliamente en varios campos, incluido el procesamiento de señales, la compresión de datos y el machine learning.
La cuantificación es una técnica empleada dentro de los modelos de lenguaje grandes (LLM) para convertir pesos y valores de activación de datos de alta precisión, generalmente de coma flotante de 32 bits (FP32) o coma flotante de 16 bits (FP16), a datos de menor precisión, como enteros de 8 bits (INT8). Los datos de alta precisión (refiriéndose a FP32 y FP16) reciben su nombre porque los modelos que emplean estos tipos de datos suelen tener una mayor precisión. Esto se debe a que cuando los datos se comprimen en algo como INT8, se comprimen a un tamaño más pequeño. Esto da como resultado una menor precisión, también conocida como error de cuantificación. Un valor de activación es un número (entre cero y uno) asignado a la neurona artificial de la red neuronal. Este número asignado se denomina valor de activación. La cuantificación de 8 bits es generalmente el objetivo, pero los datos cuantificados de enteros de 4 bits (INT4) e inferiores se lograron con éxito. Esencialmente, el proceso de cuantificación emplea técnicas de compresión en una red neuronal para convertir una gran cantidad de bits en una pequeña cantidad de bits. 1
Los requisitos computacionales de operar un LLM con FP32 pueden ser inmensos. Junto con el aumento de los requisitos computacionales, la inferencia (el proceso de un LLM que genera una respuesta a la consulta de un usuario) también puede ralentizar. La cuantificación puede ser una gran herramienta de optimización tanto para reducir la carga computacional como para aumentar la velocidad de inferencia de un LLM. El proceso de cuantificación gira en torno a la premisa de convertir los pesos a un tipo de datos de menor precisión mientras el rendimiento del modelo sigue siendo casi idéntico. La conversión de ponderaciones a un tipo de datos de menor precisión dará como resultado menos costos computacionales porque hay menos bits que necesitan procesamiento cada vez que se ejecuta el modelo. Menos bits procesados también conducirán a que cada consulta al LLM se procese más rápido.
Conozca las barreras para la adopción de IA, en particular la falta de soluciones de gobernanza y gestión de riesgos de IA.
Al utilizar la cuantificación para convertir los tipos de datos de punto flotante en números enteros, los cálculos se pueden completar más rápidamente. Esto disminuye la latencia general del modelo y conduce a una mejora en la velocidad de inferencia frente a la precisión. Esta compensación es crucial para cualquier aplicación en tiempo real, especialmente cuando se ejecuta en CPU móviles. 2
La cuantificación es crucial cuando se intenta ejecutar modelos de machine learning en dispositivos que no pueden manejar requisitos computacionales más altos. Cuando la cuantificación convierte la representación de punto flotante en entero, reduce las demandas computacionales del modelo de machine learning. Esto hace posible emplear estos modelos cuantificados dentro de aplicaciones del mundo real en computadoras portátiles, tabletas y teléfonos inteligentes. 2
Por lo general, los modelos cuantificados tienen requisitos computacionales más bajos. Por lo tanto, la cuantificación da como resultado una mayor eficiencia energética, lo cual es clave para ejecutar estos modelos en computadoras portátiles, tabletas y teléfonos móviles. 3
La utilización de la cuantificación permite que los modelos actuales de machine learning se ejecuten utilizando operaciones enteras. Esto hace que los modelos cuantificados sean compatibles con plataformas más antiguas que no soportan operaciones de punto flotante. Esto también hace que estos modelos sean mucho más accesibles, lo que permite ejecutarlos en GPU de consumo. 4
Hay alrededor de 4 mil millones de valores dentro del conjunto de valores posibles de FP32 que van desde -3.4 1038 a 3.4 1038. Mientras que con INT8, vemos solo 256 valores dentro del conjunto de valores posibles que van de -128 a 128. Debido a que este último es un conjunto de valores significativamente más pequeño, la multiplicación de matrices puede ocurrir mucho más rápido. Debido al inmenso costo computacional de los modelos basados en aprendizaje profundo , los algoritmos precisos y eficientes son esenciales.
El proceso de cuantización se produce determinando primero la ruta óptima de proyección de los valores de coma flotante de 32 bits en el campo INT8. Para hacerlo, existen múltiples algoritmos para cuantificar un modelo. Echaremos un vistazo a dos métodos de cuantificación, Absolute Max y Affine Quantization.
Cuantificación máxima absoluta
Para calcular la asignación entre el número de punto flotante y su número INT8 correspondiente en la cuantificación máxima absoluta, primero debe dividir por el valor máximo absoluto del tensor y luego multiplicar por el rango total del tipo de datos.
Por ejemplo, aplicaremos el algoritmo de cuantificación máxima absoluta al siguiente vector [1.6, -0.7, -3.4, 1.7, -2.9, 0.5, 2.3, 6.2]. Se extrae el máximo absoluto, que es 6.2 en este caso. INT8 tiene un rango de [-127, 127], por lo que dividimos 127 por 6,2 y obtenemos 20,5 para el factor de escala. Por lo tanto, al multiplicar el vector original por él se obtiene el vector de datos cuantificados [33, -14, -70, 35, -59, 10, 47, 127]. Debido a que estos números se redondean, habrá cierta pérdida de precisión. 5
Cuantificación afín
Para implementar el algoritmo de cuantificación afín, definiremos nuestro rango de valores de coma flotante de 32 bits como [a, b]. El algoritmo de cuantificación afín es el siguiente:
𝑥𝑞 = round ((1/𝑆 ) + ) 𝑥 𝑍
- 𝑥𝑞 es el valor INT8 cuantificado que corresponde al valor x de coma flotante de 32 bits.
- S es un factor de escala FP32 y es un punto flotante positivo de 32 bits.
- Z es el punto cero. Este será el valor INT8 que corresponde a cero en el campo de punto flotante de 32 bits.
- round se refiere al redondeo del valor resultante al entero más cercano.
Para establecer a continuación el [mínimo, máximo] de nuestros valores de punto flotante de 32 bits, debemos tener en cuenta cualquier valor atípico. Pasar por alto estos valores atípicos puede llevar a que se asignen como mínimo o máximo y potencialmente sesgar la precisión del modelo cuantificado. Para contrarrestar esto, el modelo se puede cuantificar en bloques. Los pesos se pueden dividir en grupos de 64 o 128. Luego, estos grupos se cuantifican para tener en cuenta los valores atípicos y minimizar el riesgo de menor precisión. 6
Cuantificación posterior al entrenamiento (PTQ)
La cuantificación posterior al entrenamiento ocurre cuando la cuantificación se aplica a un modelo existente. Esto convierte el modelo de una representación de punto flotante a un entero de punto fijo de menor precisión sin necesidad de volver a capacitar. Este método no requiere tantos datos como el entrenamiento consciente de la cuantificación y es mucho más rápido. Sin embargo, debido a que un modelo ya existente se está convirtiendo esencialmente en un dimensionador más pequeño, la cuantificación posterior al entrenamiento puede degradar el rendimiento. Un ejemplo de cuándo emplear PTQ sería cuando ya tiene un modelo en funcionamiento y desea aumentar la velocidad y la eficiencia. Esto se debe a que el PTQ tiene lugar después de que se capacita un modelo (es decir, un modelo ya existente), por lo que no se requiere una gran cantidad de datos de entrenamiento para este proceso. 7
Entrenamiento consciente de la cuantificación (QAT)
El entrenamiento consciente de la cuantificación incorpora la conversión de peso durante el entrenamiento previo o el ajuste de un LLM. Esto permite mejorar el rendimiento, pero exige una gran cantidad de potencia computacional y requiere datos de entrenamiento representativos. En general, el entrenamiento consciente de la cuantificación generalmente producirá un modelo con mayor rendimiento, pero es más costoso y exigirá mucha más potencia informática. Un ejemplo de cuándo usar QAT sería cuando posee una cantidad adecuada de datos de entrenamiento y una cotización mayor. También es bueno recordar que este proceso tiene lugar durante la etapa de entrenamiento del modelo, por lo que no tiene sentido usar este método con un modelo que ya está capacitado. 7
Técnicas de cuantificación dinámica frente a técnicas de cuantificación estática
El objetivo de estas dos técnicas es cómo se seleccionará el rango de recorte, o calibración como se suele denominar. Durante esta cuantificación dinámica, el rango de recorte se calcula dinámicamente para cada activación. Normalmente, este tipo de técnica de cuantificación dará como resultado una mayor precisión. Como su nombre indica, la cuantificación estática emplea un rango de recorte fijo para todas las entradas. Esta forma de cuantificación se emplea más a menudo como cuantificación dinámica y puede ser muy costosa.
Cuando los pesos se convierten durante la cuantificación, a veces hay una pérdida de precisión dentro de los valores cuantificados con modelos de machine learning cuantificados. Se debe tener en cuenta el tamaño del modelo, ya que cuando se cuantifican LLM excepcionalmente grandes con numerosos parámetros y capas, existe el riesgo de una acumulación significativa de errores de cuantificación. 8
El entrenamiento a escala de modelos de machine learning puede ser extremadamente costoso, especialmente con el entrenamiento consciente de la cuantificación (QAT). Esto hace que la cuantificación posentrenamiento (PTQ) sea la mejor opción desde el punto de vista de la rentabilidad. Sin embargo, esto limita el modelo en algunos aspectos, ya que QAT suele producir un modelo más preciso. 9
Granite es la marca insignia de IBM de modelos fundacionales abiertos de modelos de lenguaje de gran tamaño (LLM) que abarcan múltiples modalidades.
Aprenda más sobre redes neuronales y cómo se puede aplicar la cuantificación.
Aprenda más sobre el machine learning para comprender mejor el papel de la cuantificación.
¹ Dong Liu, Meng Jiang, Kaiser Pister, "LLMEasyQuant - An Easy to Use Toolkit for LLM Quantization", https://arxiv.org/pdf/2406.19657v2 (enlace externo a ibm.com).
² Benoit Jacob, Skirmantas Kligys, Bo Chen, Menglong Zhu, Matthew Tang, Andrew Howard, Hartwig Adam, Dmitry Kalenichenko, "Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference", https://arxiv.org/pdf/1712.05877v1 (enlace externo a ibm.com).
³ Ravi Kishore Kodali, Yatendra Prasad Upreti, Lakshmi Boppana, "A Quantization Approach for the Reduced Size of Large Language Models", https://ieeexplore.ieee.org/document/10499664 (enlace externo a ibm.com).
⁴ Xiao Sun, Naigang Wang, Chia-yu Chen, Jia-min Ni, Ankur Agrawal, Xiaodong Cui, Swagath Venkataramani, Kaoutar El Maghraoui, Vijayalakshmi Srinivasan, "Ultra-Low Precision 4-bit Training of Deep Neural Networks", https: //research.ibm.com/publications/ultra-low-precision-4-bit-training-of-deep-neural-networks
⁵ Tim Dettmers, Mike Lewis, Younes Belkada, Luke Zettlemoyer, "LLM.int8(): Multiplicación matricial de 8 bits para transformadores a escala", https://arxiv.org/pdf/2208.07339 (enlace externo a ibm.com)
⁶ Amir Gholami, Sehoon Kim, Zhen Dong, Zhewei Yao, Michael W. Mahoney, Kurt Keutzer, "A Survey of Quantization Methods for Efficient Neural Network Inference", https://arxiv.org/pdf/2103.13630 (enlace externo a ibm.com)
⁷ Hao Wu, Patrick Judd, Xiaojie Zhang, Mikhail Isaev, Paulius Micikevicius, "A Survey of Quantization Methods for Efficient Neural Network Inference", https://arxiv.org/pdf/2004.09602 (enlace externo a ibm.com)
⁸ Zhuocheng Gong, Jiahao Liu, Jingang Wang, Xunliang Cai, Dongyan Zhao, Rui Yan, "What Makes Quantization for Large Language Models Hard? An Empirical Study from the Lens of Perturbation", https://arxiv.org/pdf/2403.06408v1 (enlace externo a ibm.com).
⁹ Sehoon Kim, Coleman Hooper, Amir Gholami, Zhen Dong, Xiuyu Li, Sheng Shen, Michael W. Mahoney, Kurt Keutzer, "SqueezeLLM: Dar-and-Sparse Quantization", https://arxiv.org/pdf/2306.07629v4 (enlace externo a ibm.com).