Haciendo LLMs m谩s ligeros con AutoGPTQ y transformers

LLMs m谩s ligeros con AutoGPTQ y transformers

Los grandes modelos de lenguaje han demostrado capacidades notables en comprender y generar texto similar al humano, revolucionando aplicaciones en diversos campos. Sin embargo, las demandas que estos modelos tienen en el hardware de los consumidores para entrenamiento y despliegue se han vuelto cada vez m谩s dif铆ciles de satisfacer.

馃 La misi贸n principal de Hugging Face es democratizar el buen aprendizaje autom谩tico, y esto incluye hacer que los modelos grandes sean lo m谩s accesibles posible para todos. En el mismo esp铆ritu de nuestra colaboraci贸n bitsandbytes, acabamos de integrar la biblioteca AutoGPTQ en Transformers, lo que permite a los usuarios cuantizar y ejecutar modelos con una precisi贸n de 8, 4, 3 o incluso 2 bits utilizando el algoritmo GPTQ (Frantar et al. 2023). Existe una degradaci贸n de precisi贸n insignificante con una cuantizaci贸n de 4 bits, con una velocidad de inferencia comparable a la referencia fp16 para tama帽os de lote peque帽os. Tenga en cuenta que el m茅todo GPTQ difiere ligeramente de los m茅todos de cuantizaci贸n posterior al entrenamiento propuestos por bitsandbytes, ya que requiere pasar un conjunto de datos de calibraci贸n.

Esta integraci贸n est谩 disponible tanto para GPUs Nvidia como para GPUs AMD con tecnolog铆a RoCm.

Tabla de contenidos

  • Recursos
  • Un resumen conciso del art铆culo GPTQ
  • Biblioteca AutoGPTQ: la biblioteca todo en uno para aprovechar eficientemente GPTQ en LLMs
  • Soporte nativo de modelos GPTQ en 馃 Transformers
  • Cuantificaci贸n de modelos con la biblioteca Optimum
  • Ejecuci贸n de modelos GPTQ a trav茅s de Inferencia de Generaci贸n de Texto
  • Ajuste fino de modelos cuantizados con PEFT
  • Espacio para mejoras
    • Modelos compatibles
  • Conclusi贸n y palabras finales
  • Agradecimientos

Recursos

Este blogpost y lanzamiento vienen con varios recursos para comenzar con la cuantizaci贸n GPTQ:

  • Art铆culo original
  • Notebook de Google Colab para uso b谩sico: este notebook muestra c贸mo cuantizar su modelo de Transformers con el m茅todo GPTQ, c贸mo realizar inferencia y c贸mo realizar ajuste fino con el modelo cuantizado.
  • Documentaci贸n de integraci贸n de Transformers
  • Documentaci贸n de integraci贸n de Optimum
  • Repositorios de Bloke con modelos GPTQ compatibles.

Un resumen conciso del art铆culo GPTQ

Los m茅todos de cuantizaci贸n generalmente pertenecen a una de dos categor铆as:

  1. Cuantizaci贸n Post-Entrenamiento (PTQ): Cuantizamos un modelo pre-entrenado utilizando recursos moderados, como un conjunto de datos de calibraci贸n y algunas horas de c谩lculo.
  2. Entrenamiento con Conciencia de Cuantizaci贸n (QAT): La cuantizaci贸n se realiza antes del entrenamiento o ajuste fino adicional.

GPTQ se encuentra en la categor铆a PTQ y esto es particularmente interesante para modelos masivos, para los cuales el entrenamiento completo del modelo o incluso el ajuste fino pueden ser muy costosos.

Espec铆ficamente, GPTQ adopta un esquema de cuantizaci贸n mixto int4/fp16 donde los pesos se cuantizan como int4 mientras que las activaciones permanecen en float16. Durante la inferencia, los pesos se descuantizan sobre la marcha y el c谩lculo real se realiza en float16.

Los beneficios de este esquema son dos:

  • Ahorro de memoria cercano a x4 para la cuantizaci贸n int4, ya que la descuantizaci贸n ocurre cerca de la unidad de c谩lculo en un kernel fusionado, y no en la memoria global de la GPU.
  • Posibles aceleraciones gracias al tiempo ahorrado en la comunicaci贸n de datos debido al menor ancho de bits utilizado para los pesos.

El art铆culo GPTQ aborda el problema de compresi贸n por capa:

Dada una capa lll con matriz de pesos WlW_{l}Wl鈥 y entrada de capa XlX_{l}Xl鈥, queremos encontrar una versi贸n cuantizada del peso W^l\hat{W}_{l}W^l鈥 que minimice el error cuadr谩tico medio (MSE):

W^l鈭=argminWl^鈭lX鈭扺^lX鈭22{\hat{W}_{l}}^{*} = argmin_{\hat{W_{l}}} \|W_{l}X-\hat{W}_{l}X\|^{2}_{2}W^l鈥嬧垪=argminWl鈥媈鈥嬧嬧垾Wl鈥媂鈭扺^l鈥媂鈭22鈥

Una vez resuelto esto por capa, se puede obtener una soluci贸n al problema global combinando las soluciones por capa.

Para resolver este problema de compresi贸n por capa, el autor utiliza el marco de cuantizaci贸n cerebral 贸ptima (Frantar et al 2022). El m茅todo OBQ parte de la observaci贸n de que la ecuaci贸n anterior puede escribirse como la suma de los errores al cuadrado, sobre cada fila de WlW_{l}Wl鈥.

鈭慽=0drow鈭l[i,:]X鈭扺^l[i,:]X鈭22 \sum_{i=0}^{d_{row}} \|W_{l[i,:]}X-\hat{W}_{l[i,:]}X\|^{2}_{2} 鈭慽=0drow鈥嬧嬧垾Wl[i,:]鈥媂鈭扺^l[i,:]鈥媂鈭22鈥

Esto significa que podemos cuantizar cada fila de forma independiente. Esto se llama cuantizaci贸n por canal. Para cada fila Wl[i,:]W_{l[i,:]}Wl[i,:]鈥, OBQ cuantiza un peso a la vez mientras actualiza siempre todos los pesos a煤n no cuantizados, para compensar el error incurrido al cuantizar un solo peso. La actualizaci贸n de los pesos seleccionados tiene una f贸rmula de forma cerrada, utilizando matrices Hessiana.

El documento GPTQ mejora este marco al introducir un conjunto de optimizaciones que reducen la complejidad del algoritmo de cuantizaci贸n manteniendo la precisi贸n del modelo.

En comparaci贸n con OBQ, el paso de cuantizaci贸n en s铆 tambi茅n es m谩s r谩pido con GPTQ: se necesitan 2 horas de GPU para cuantizar un modelo BERT (336M) con OBQ, mientras que con GPTQ, un modelo Bloom (176B) puede cuantizarse en menos de 4 horas de GPU.

Para obtener m谩s informaci贸n sobre el algoritmo exacto y las diferentes pruebas de referencia sobre perplejidad y aceleraci贸n, consulte el documento original.

Biblioteca AutoGPTQ: la biblioteca de referencia para aprovechar eficientemente GPTQ para LLMs

La biblioteca AutoGPTQ permite a los usuarios cuantizar modelos 馃 Transformers utilizando el m茅todo GPTQ. Si bien los esfuerzos comunitarios paralelos como GPTQ-for-LLaMa, Exllama y llama.cpp implementan m茅todos de cuantizaci贸n estrictamente para la arquitectura Llama, AutoGPTQ ha ganado popularidad gracias a su cobertura completa de una amplia gama de arquitecturas de transformers.

Dado que la biblioteca AutoGPTQ tiene una mayor cobertura de modelos de transformers, decidimos proporcionar una API integrada de 馃 Transformers para hacer que la cuantizaci贸n de LLM sea m谩s accesible para todos. En este momento hemos integrado las opciones de optimizaci贸n m谩s comunes, como los n煤cleos CUDA. Para opciones m谩s avanzadas, como los n煤cleos Triton o la compatibilidad con atenci贸n fusionada, consulte la biblioteca AutoGPTQ.

Soporte nativo de modelos GPTQ en 馃 Transformers

Despu茅s de instalar la biblioteca AutoGPTQ y optimum (pip install optimum), ejecutar modelos GPTQ en Transformers es tan simple como:

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("TheBloke/Llama-2-7b-Chat-GPTQ", torch_dtype=torch.float16, device_map="auto")

Consulte la documentaci贸n de Transformers para obtener m谩s informaci贸n sobre todas las caracter铆sticas.

Nuestra integraci贸n de AutoGPTQ tiene muchas ventajas:

  • Los modelos cuantizados son serializables y se pueden compartir en el Hub.
  • GPTQ reduce dr谩sticamente los requisitos de memoria para ejecutar LLMs, mientras que la latencia de inferencia es comparable a la inferencia con FP16.
  • AutoGPTQ admite n煤cleos Exllama para una amplia gama de arquitecturas.
  • La integraci贸n cuenta con soporte nativo de RoCm para GPU AMD.
  • Est谩 disponible el ajuste fino con PEFT.

Puede comprobar en el Hub si su modelo favorito ya ha sido cuantizado. TheBloke, uno de los principales colaboradores de Hugging Face, ha cuantizado muchos modelos con AutoGPTQ y los ha compartido en el Hugging Face Hub. Trabajamos juntos para asegurarnos de que estos repositorios funcionen de manera 贸ptima con nuestra integraci贸n.

Este es un ejemplo de prueba para el caso de tama帽o de lote = 1. La prueba se realiz贸 en una sola GPU NVIDIA A100-SXM4-80GB. Utilizamos una longitud de inicio de 512 y generamos exactamente 512 nuevos tokens. La primera fila es la referencia sin cuantizar en fp16, mientras que las otras filas muestran el consumo de memoria y el rendimiento utilizando diferentes n煤cleos de AutoGPTQ.

Una referencia reproducible m谩s completa est谩 disponible aqu铆.

Quantizar modelos con la biblioteca Optimum

Para integrar perfectamente AutoGPTQ en Transformers, utilizamos una versi贸n minimalista de la API de AutoGPTQ que est谩 disponible en Optimum, la herramienta de Hugging Face para entrenamiento y optimizaci贸n de inferencia. Siguiendo este enfoque, logramos una integraci贸n f谩cil con Transformers, al tiempo que permitimos a las personas utilizar la API de Optimum si desean cuantizar sus propios modelos. 隆Consulta la documentaci贸n de Optimum si quieres cuantizar tus propios LLM!

La cuantizaci贸n de los modelos de Transformers 馃 con el m茅todo GPTQ se puede hacer en pocas l铆neas de c贸digo:

from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig

model_id = "facebook/opt-125m"
tokenizer = AutoTokenizer.from_pretrained(model_id)
quantization_config = GPTQConfig(bits=4, dataset="c4", tokenizer=tokenizer)

model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quantization_config=quantization_config)

La cuantizaci贸n de un modelo puede llevar mucho tiempo. Ten en cuenta que para un modelo de 175B, se requieren al menos 4 horas de GPU si se utiliza un conjunto de datos grande (por ejemplo, `”c4″`). Como se mencion贸 anteriormente, muchos modelos GPTQ ya est谩n disponibles en el Hugging Face Hub, lo que evita la necesidad de cuantizar un modelo t煤 mismo en la mayor铆a de los casos de uso. Sin embargo, tambi茅n puedes cuantizar un modelo utilizando tu propio conjunto de datos adecuado para el dominio particular en el que est谩s trabajando.

Ejecuci贸n de modelos GPTQ a trav茅s de Inferencia de Generaci贸n de Texto

Paralelamente a la integraci贸n de GPTQ en Transformers, se agreg贸 soporte para GPTQ a la biblioteca de Inferencia de Generaci贸n de Texto (TGI), dise帽ada para servir modelos de lenguaje grandes en producci贸n. Ahora se puede utilizar GPTQ junto con caracter铆sticas como el batching din谩mico, la atenci贸n paginada y la atenci贸n flash para una amplia gama de arquitecturas.

Como ejemplo, esta integraci贸n permite servir un modelo de 70B en una sola GPU A100-80GB. Esto no es posible utilizando un checkpoint fp16, ya que excede la memoria GPU disponible.

Puedes obtener m谩s informaci贸n sobre el uso de GPTQ en TGI en la documentaci贸n.

Ten en cuenta que el kernel integrado en TGI no escala muy bien con tama帽os de lote m谩s grandes. Aunque este enfoque ahorra memoria, se esperan ralentizaciones con tama帽os de lote m谩s grandes.

Ajuste fino de modelos cuantizados con PEFT

No puedes entrenar a煤n m谩s un modelo cuantizado utilizando los m茅todos regulares. Sin embargo, aprovechando la biblioteca PEFT, 隆puedes entrenar adaptadores adicionales! Para hacerlo, congelamos todas las capas del modelo cuantizado y agregamos los adaptadores entrenables. Aqu铆 tienes algunos ejemplos de c贸mo usar PEFT con un modelo GPTQ: cuaderno de Colab y script de ajuste fino.

Espacio para mejoras

Nuestra integraci贸n de AutoGPTQ ya ofrece beneficios impresionantes a un costo reducido en la calidad de la predicci贸n. A煤n queda espacio para mejoras, tanto en las t茅cnicas de cuantizaci贸n como en las implementaciones del kernel.

En primer lugar, aunque AutoGPTQ se integra (seg煤n nuestro conocimiento) con el kernel W4A16 m谩s eficiente en t茅rminos de rendimiento (pesos como int4, activaciones como fp16) de la implementaci贸n exllama, existe una buena posibilidad de que el kernel a煤n pueda mejorarse. Ha habido otras implementaciones prometedoras de Kim et al. y del MIT Han Lab que parecen ser prometedoras. Adem谩s, seg煤n nuestras pruebas internas, a煤n no hay un kernel W4A16 de c贸digo abierto y eficiente en t茅rminos de rendimiento escrito en Triton, lo que podr铆a ser una direcci贸n a explorar.

En cuanto a la cuantizaci贸n, hay que enfatizar nuevamente que este m茅todo solo cuantiza los pesos. Se han propuesto otros enfoques para la cuantizaci贸n de LLM que pueden cuantizar tanto los pesos como las activaciones con un costo reducido en la calidad de la predicci贸n, como LLM-QAT donde se puede utilizar un esquema mixto de int4/int8, as铆 como la cuantizaci贸n de la cach茅 clave-valor. Una de las ventajas importantes de esta t茅cnica es la capacidad de utilizar aritm茅tica entera real para los c谩lculos, con, por ejemplo, los Tensor Cores de Nvidia que admiten c谩lculos int8. Sin embargo, seg煤n nuestro conocimiento, no hay kernels de cuantizaci贸n W4A8 de c贸digo abierto disponibles, pero esta podr铆a ser una direcci贸n interesante para explorar.

En el lado del kernel, dise帽ar kernels W4A16 de alto rendimiento para tama帽os de batch m谩s grandes sigue siendo un desaf铆o abierto.

Modelos compatibles

En esta implementaci贸n inicial, solo se admiten modelos de lenguaje grandes con una arquitectura de solo decodificador o solo codificador. Esto puede parecer un poco restrictivo, pero abarca la mayor铆a de los modelos de lenguaje de 煤ltima generaci贸n como Llama, OPT, GPT-Neo, GPT-NeoX.

Actualmente no se admiten modelos de visi贸n, audio y multimodales muy grandes.

Conclusi贸n y palabras finales

En esta publicaci贸n de blog hemos presentado la integraci贸n de la biblioteca AutoGPTQ en Transformers, lo que permite cuantizar modelos de lenguaje de 煤ltima generaci贸n con el m茅todo GPTQ para hacerlos m谩s accesibles para cualquier persona en la comunidad y capacitarlos para construir herramientas y aplicaciones emocionantes con estos modelos.

Esta integraci贸n est谩 disponible tanto para GPU Nvidia como para GPU AMD con tecnolog铆a RoCm, lo cual es un gran avance hacia la democratizaci贸n de los modelos cuantizados para arquitecturas de GPU m谩s amplias.

La colaboraci贸n con el equipo de AutoGPTQ ha sido muy fruct铆fera y estamos muy agradecidos por su apoyo y su trabajo en esta biblioteca.

Esperamos que esta integraci贸n facilite el uso de modelos de lenguaje de 煤ltima generaci贸n en aplicaciones y estamos ansiosos por ver qu茅 construir谩n con ella.

No te pierdas los recursos 煤tiles compartidos arriba para comprender mejor la integraci贸n y c贸mo comenzar r谩pidamente con la cuantizaci贸n GPTQ.

  • Documento original
  • Notebook b谩sico de uso en Google Colab: Este notebook muestra c贸mo cuantizar tu modelo de Transformers con el m茅todo GPTQ, c贸mo hacer inferencia y c贸mo hacer ajuste fino con el modelo cuantizado.
  • Documentaci贸n de integraci贸n de Transformers
  • Documentaci贸n de integraci贸n de Optimum
  • Repositorios de The Bloke con modelos GPTQ compatibles.

Agradecimientos

Queremos agradecer a William por su apoyo y su trabajo en la incre铆ble biblioteca AutoGPTQ y por su ayuda en la integraci贸n. Tambi茅n queremos agradecer a TheBloke por su trabajo en la cuantizaci贸n de muchos modelos con AutoGPTQ y por compartirlos en el Hub y por su ayuda con la integraci贸n. Tambi茅n queremos agradecer a qwopqwop200 por sus continuas contribuciones a la biblioteca AutoGPTQ y su trabajo en la ampliaci贸n de la biblioteca para CPU, que se lanzar谩 en las pr贸ximas versiones de AutoGPTQ.

Por 煤ltimo, queremos agradecer a Pedro Cuenca por su ayuda en la redacci贸n de esta publicaci贸n de blog.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Disney empaqueta grandes emociones en un peque帽o robot

La semana pasada, un equipo de cient铆ficos de Disney Research present贸 un personaje rob贸tico bipedal que combina un c...

Inteligencia Artificial

Deci AI presenta DeciDiffusion 1.0 un modelo de difusi贸n latente de texto a imagen de 820 millones de par谩metros y 3 veces m谩s r谩pido que la difusi贸n estable.

Definir el problema La generaci贸n de im谩genes a partir de texto ha sido durante mucho tiempo un desaf铆o en inteligenc...

Inteligencia Artificial

Los programas piloto de IA buscan reducir el consumo de energ铆a y las emisiones en el campus del MIT

Un equipo interdepartamental est谩 liderando los esfuerzos para utilizar el aprendizaje autom谩tico con el fin de aumen...

Ciencias de la Computaci贸n

La inteligencia artificial se utiliz贸 para crear una nueva canci贸n final de los Beatles, seg煤n Paul McCartney.

El m煤sico dice que utiliz贸 tecnolog铆a para 'extraer' la voz de John Lennon de una vieja demo y completar una canci贸n ...

Inteligencia Artificial

Un novedoso modelo de aprendizaje autom谩tico acelera la evaluaci贸n de catalizadores de descarbonizaci贸n de meses a milisegundos

La biomasa se refiere a la materia org谩nica, como plantas, madera, residuos agr铆colas y otros materiales biol贸gicos, ...

Inteligencia Artificial

El Ascenso y Ca铆da de la Ingenier铆a R谩pida 驴Moda o Futuro?

Este art铆culo proporciona una visi贸n general de la ingenier铆a r谩pida, desde sus inicios hasta su estado actual.