Skip to content

AutoGPTQ: Un paquete de cuantización de LLMs fácil de usar

Updated on

Introducción a AutoGPTQ

Con la aparición de modelos de lenguaje más grandes (LLMs) en el campo de la IA, optimizar su eficiencia se ha convertido en un esfuerzo crucial. AutoGPTQ ofrece una solución, ofreciendo un paquete de cuantización de LLMs fácil de usar construido en torno al algoritmo GPTQ. Con APIs fáciles de usar, AutoGPTQ ofrece un enfoque eficiente para manejar tareas de cuantización en flujos de trabajo de aprendizaje automático.

Puedes consultar AutoGPTQ en Github aquí (opens in a new tab).

Actualizaciones y rendimiento de AutoGPTQ

AutoGPTQ es un proyecto dinámico que mejora constantemente sus características y capacidades. Las últimas actualizaciones involucran la integración con bibliotecas de optimización de rendimiento, el soporte de diferentes tipos de modelos y la mejora de la velocidad del kernel CUDA.

Una de las principales fortalezas de AutoGPTQ es su velocidad de inferencia. La comparación de GPU muestra una métrica de velocidad impresionante, tokens/segundo, con el modelo cuantizado usando AutoGPTQ superando a los demás. Por ejemplo, con un tamaño de lote de entrada de 1, utilizando una estrategia de decodificación de búsqueda de rayo y obligando al modelo a generar 512 tokens, el modelo cuantizado Llambda-7b supera al modelo original en cuanto a velocidad de inferencia (25,53 tokens/segundo frente a 18,87 tokens/segundo).

# Comparación de rendimiento de AutoGPTQ
performance_comparison = {
    "modelo": ["llama-7b", "moss-moon 16b", "gpt-j 6b"],
    "GPU": ["1xA100-40G", "1xA100-40G", "1xRTX3060-12G"],
    "num_rayos": [1, 4, 1],
    "fp16": [18.87, 68.79, None],
    "gptq-int4": [25.53, 91.30, 29.55]
}

Instalando AutoGPTQ

Comenzar con AutoGPTQ es sencillo. La última versión estable se puede instalar desde pip, lo que permite una configuración rápida:

pip install auto-gptq

Para ciertas configuraciones, se pueden descargar ruedas precompiladas que satisfacen su entorno desde los activos de lanzamiento de cada versión e instalarlas para omitir la etapa de compilación:

# primero, cambie al directorio donde se guardó la rueda, luego ejecute el siguiente comando
pip install auto_gptq-0.2.0+cu118-cp310-cp310-linux_x86_64.whl 
# instala la rueda preconstruida v0.2.0 de auto_gptq para Linux en un entorno cuyo python=3.10 y cuda=11.8

Además, el paquete ofrece opciones para desactivar las extensiones de CUDA o para admitir modelos específicos como LLaMa:

# Para desactivar las extensiones de CUDA
BUILD_CUDA_EXT=0 pip install auto-gptq
 
# Para admitir el modelo LLaMa
pip install auto-gptq[llama]

AutoGPTQ en acción: cuantización e inferencia

La funcionalidad principal de AutoGPTQ es permitir la cuantización de grandes modelos de lenguaje. El proceso es simple y se puede ejecutar con solo unas pocas líneas de código. A continuación se muestra un ejemplo en el que se cuantiza un modelo preentrenado a 4 bits y luego se utiliza para inferencia:

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, ConfiguraciónBase
 
QuantizeConfig
import logging
 
# Configurar el registro
logging.basicConfig(format="%(asctime)s %(levelname)s [%(name)s] %(message)s", level=logging.INFO, datefmt="%Y-%m-%d %H:%M:%S")
 
# Definir directorios de modelo preentrenado y cuantizado
directorio_modelo_preentrenado = "facebook/opt-125m"
directorio_modelo_cuantizado = "opt-125m-4bit"
 
# Configurar el tokenizer y ejemplos
tokenizer = AutoTokenizer.from_pretrained(directorio_modelo_preentrenado, use_fast=True)
ejemplos = [tokenizer("auto-gptq es una biblioteca de cuantización de modelos fácil de usar con APIs amigables para el usuario, basada en el algoritmo GPTQ.")]
 
# Configurar la configuración de cuantización
configuracion_cuantizacion = ConfiguracionBase(bits=4, group_size=128, desc_act=False)
 
# Cargar, cuantizar y guardar el modelo
modelo = AutoGPTQForCausalLM.from_pretrained(directorio_modelo_preentrenado, configuracion_cuantizacion)
modelo.cuantizar(ejemplos)
modelo.guardar_cuantizado(directorio_modelo_cuantizado)

Personalización de modelos

AutoGPTQ también permite a los usuarios ampliar sus funcionalidades para admitir modelos personalizados. Es un proceso sencillo que brinda al usuario más control sobre sus tareas de aprendizaje automático. Esta naturaleza adaptable distingue a AutoGPTQ de otros paquetes de cuantización, haciéndolo más flexible y capaz de adaptarse a diversos casos de uso.

Esta personalización se puede ver en un ejemplo de extender auto_gptq para admitir el modelo OPT.

# Extender auto_gptq para admitir el modelo OPT (código a proporcionar según sus necesidades personalizadas)

Evaluación en tareas secundarias

AutoGPTQ admite la evaluación del rendimiento del modelo en tareas secundarias específicas antes y después de la cuantización. Esto asegura que el proceso de cuantización no afecte negativamente el rendimiento del modelo en las tareas que está destinado a realizar. Por ejemplo, puedes evaluar un modelo como EleutherAI/gpt-j-6b en una tarea de clasificación de secuencias utilizando el conjunto de datos cardiffnlp/tweet_sentiment_multilingual:

Para ilustrar esto más a fondo, realizaremos un ejemplo de evaluación simple utilizando el modelo EleutherAI/gpt-j-6b y el conjunto de datos cardiffnlp/tweet_sentiment_multilingual. En este caso, estamos evaluando el rendimiento del modelo cuantizado en una tarea de clasificación de secuencias, más específicamente, análisis de sentimientos.

from transformers import pipeline, AutoTokenizer
from auto_gptq import AutoGPTQForSequenceClassification
from datasets import load_dataset
 
# Define directorios de modelos pre-entrenados y cuantizados
pretrained_model_dir = "EleutherAI/gpt-j-6b"
quantized_model_dir = "gpt-j-6b-4bit"
 
# Cargar y cuantizar el modelo
model = AutoGPTQForSequenceClassification.from_pretrained(pretrained_model_dir)
model.quantize()
model.save_quantized(quantized_model_dir)
 
# Cargar el tokenizador y el pipeline de análisis de sentimiento
tokenizer = AutoTokenizer.from_pretrained(quantized_model_dir)
sentiment_analysis = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
 
# Cargar el conjunto de datos
dataset = load_dataset("cardiffnlp/tweet_sentiment_multilingual", split="test")
 
# Evaluar el modelo en el conjunto de datos de prueba
correcto, total = 0, 0
for ejemplo in dataset:
    prediccion = sentiment_analysis(ejemplo["text"])[0]
    if prediccion["label"].lower() == ejemplo["label"].lower():
        correcto += 1
    total += 1
 
# Imprimir la precisión del modelo en el conjunto de datos de prueba
print(f"Precisión: {correcto / total:.2f}")

El código anterior muestra la cuantización, el guardado y la posterior evaluación del modelo cuantizado. Esto le permite evaluar el rendimiento del modelo y cómo el proceso de cuantización afecta el resultado en la tarea de clasificación de secuencias.

Preguntas frecuentes

1. ¿AutoGPTQ solo puede manejar modelos basados en GPT?

Si bien AutoGPTQ fue diseñado inicialmente con modelos basados ​​en GPT en mente, los desarrolladores han extendido sus funcionalidades para adaptarse a una amplia gama de modelos transformers. Esta versatilidad se deriva del diseño modular de la biblioteca, lo que permite adaptarla a otros modelos.

2. ¿Cómo puedo personalizar AutoGPTQ para mi caso de uso específico?

AutoGPTQ permite personalización mediante la extensión de sus clases y métodos para adaptarse a sus necesidades específicas. Puede crear clases personalizadas que hereden de las clases base proporcionadas por AutoGPTQ y anular los métodos necesarios.

3. ¿La cuantización afectará el rendimiento de mi modelo?

La cuantización implica un compromiso entre el rendimiento del modelo y el tamaño o eficiencia computacional. Sin embargo, AutoGPTQ tiene como objetivo minimizar este impacto. Ofrece opciones para evaluar su modelo en tareas posteriores antes y después de la cuantización, lo que ayuda a garantizar que la degradación del rendimiento sea aceptable para su caso de uso.

Conclusión

En conclusión, AutoGPTQ ofrece una forma efectiva y eficiente de cuantizar modelos transformers mientras mantiene los estándares de rendimiento en tareas específicas. Su API fácil de usar y sus capacidades de personalización lo convierten en una herramienta versátil para profesionales del aprendizaje automático que buscan optimizar sus modelos. Ya sea que desee reducir los requisitos de almacenamiento de su modelo o mejorar la velocidad de inferencia, AutoGPTQ puede ser una parte esencial de su conjunto de herramientas.