La cuantificación (o cuantizació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 (cuantizació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 (o punto 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 bits1.
Los requisitos computacionales de operar un LLM con FP32 pueden ser muchos. 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 ralentizarse. 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 pesos a un tipo de datos de menor precisión dará como resultado menos costos computacionales porque hay menos bits que deben procesarse cada vez que se ejecuta el modelo. El procesamiento de una menor cantidad de bits también derivará en que cada consulta al LLM se procese más rápido.
Al utilizar la cuantificación para convertir los tipos de datos de coma 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 mayor 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óviles2.
La cuantificación es crucial cuando se pretende 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 inteligentes2.
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óviles3.
La utilización de la cuantificación permite que los modelos actuales de machine learning se ejecuten utilizando operaciones con números enteros.
Esto hace que los modelos cuantificados sean compatibles con plataformas más antiguas que no admiten operaciones de punto flotante. Esto también hace que estos modelos sean mucho más accesibles, lo que permite ejecutarlos en las GPU de consumo4.
Hay alrededor de 4000 millones de valores dentro del conjunto de valores posibles de FP32 que van de -3.4 1038 a 3.4 1038. Mientras que con INT8, vemos solamente 256 valores dentro del conjunto de valores posibles que van de -128 a 128.
Dado que este último es un conjunto de valores significativamente menor, 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 cuantificació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: cuantificación máxima absoluta y cuantificación afín.
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 entre 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], así que dividimos 127 entre 6.2 y obtenemos 20.5 para el factor de escala. Por lo tanto, al multiplicar el vector original por este 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ón5.
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ón6.
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 entrenarlo.
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 uno 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 entrena 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
El entrenamiento consciente de la cuantificación incorpora la conversión de peso durante el entrenamiento previo o el ajuste fino 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 normalmente 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 un mayor presupuesto. 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á entrenado7.
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ón8.
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 posterior al entrenamiento (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 la QAT suele producir un modelo más preciso9.
Descubra IBM® Granite, nuestra familia de modelos de IA abiertos, de alto rendimiento y confiables, diseñados para empresas y optimizados para escalar sus aplicaciones de IA. Explore opciones de lenguaje, código, series de tiempo y medidas de protección.
Aprenda a seleccionar el modelo fundacional de IA más adecuado para su caso de uso.
Conozca a detalle los artículos, blogs y tutoriales de IBM Developer para profundizar sus conocimientos sobre LLMs.
Aprenda a impulsar continuamente a los equipos a mejorar el rendimiento del modelo y superar a la competencia mediante el uso de las últimas técnicas e infraestructura de IA.
¹ Dong Liu, Meng Jiang, Kaiser Pister, “LLMEasyQuant - An Easy to Use Toolkit for LLM Quantization”, https://arxiv.org/pdf/2406.19657v2.
² 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.
³ 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.
⁴ 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(): 8-bit Matrix Multiplication for Transformers at Scale”, https://arxiv.org/pdf/2208.07339
⁶ 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
⁷ 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
⁸ 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.
⁹ Sehoon Kim, Coleman Hooper, Amir Gholami, Zhen Dong, Xiuyu Li, Sheng Shen, Michael W. Mahoney, Kurt Keutzer, “SqueezeLLM: Dense-and-Sparse Quantization”, https://arxiv.org/pdf/2306.07629v4.
IBM web domains
ibm.com, ibm.org, ibm-zcouncil.com, insights-on-business.com, jazz.net, mobilebusinessinsights.com, promontory.com, proveit.com, ptech.org, s81c.com, securityintelligence.com, skillsbuild.org, softlayer.com, storagecommunity.org, think-exchange.com, thoughtsoncloud.com, alphaevents.webcasts.com, ibm-cloud.github.io, ibmbigdatahub.com, bluemix.net, mybluemix.net, ibm.net, ibmcloud.com, galasa.dev, blueworkslive.com, swiss-quantum.ch, blueworkslive.com, cloudant.com, ibm.ie, ibm.fr, ibm.com.br, ibm.co, ibm.ca, community.watsonanalytics.com, datapower.com, skills.yourlearning.ibm.com, bluewolf.com, carbondesignsystem.com, openliberty.io