Skip to content

AutoGPTQ: Um pacote de quantização LLMs fácil de usar

Updated on

Introdução ao AutoGPTQ

Com o surgimento de modelos de linguagem maiores (LLMs) no cenário de IA, otimizar sua eficiência se tornou um empreendimento crucial. O AutoGPTQ oferece uma solução, oferecendo um pacote de quantização LLMs fácil de usar construído em torno do algoritmo GPTQ. Com APIs amigáveis ao usuário, o AutoGPTQ traz uma abordagem eficiente para lidar com tarefas de quantização em fluxos de trabalho de aprendizado de máquina.

Você pode conferir o Github do AutoGPTQ aqui (opens in a new tab).

Atualizações e Desempenho do AutoGPTQ

O AutoGPTQ é um projeto dinâmico que constantemente melhora suas funcionalidades e capacidades. As últimas atualizações envolvem a integração com bibliotecas de otimização de desempenho, suporte a diferentes tipos de modelos e melhoria na velocidade do kernel CUDA.

Uma das principais forças do AutoGPTQ é sua velocidade de inferência. A comparação de GPU mostra uma métrica impressionante de velocidade, tokens/segundo, com o modelo quantizado usando o AutoGPTQ superando outros. Por exemplo, com um tamanho de lote de entrada 1, usando uma estratégia de decodificação da busca de feixe e impondo ao modelo gerar 512 tokens, o modelo Llama-7b quantizado supera o modelo original em termos de velocidade de inferência (25,53 tokens/s vs 18,87 tokens/s).

# Comparação de desempenho do AutoGPTQ
performance_comparison = {
    "modelo": ["llama-7b", "moss-moon 16b", "gpt-j 6b"],
    "GPU": ["1xA100-40G", "1xA100-40G", "1xRTX3060-12G"],
    "num_beams": [1, 4, 1],
    "fp16": [18.87, 68.79, None],
    "gptq-int4": [25.53, 91.30, 29.55]
}

Instalando o AutoGPTQ

Começar com o AutoGPTQ é direto. A última versão estável pode ser instalada pelo pip, permitindo uma configuração rápida:

pip install auto-gptq

Para determinadas configurações, rodas pré-construídas que satisfazem seu ambiente podem ser baixadas dos ativos de lançamento de cada versão e instaladas para pular a etapa de construção:

# primeiro, cd no diretório onde a roda está salva, depois execute o comando abaixo
pip install auto_gptq-0.2.0+cu118-cp310-cp310-linux_x86_64.whl 
# instale a roda pré-construída do auto_gptq v0.2.0 para linux em um ambiente cujo python=3.10 e cuda=11.8

Além disso, o pacote oferece opções para desabilitar extensões CUDA ou para suporte a modelos específicos como LLaMa:

# Para desativar as extensões CUDA
BUILD_CUDA_EXT=0 pip install auto-gptq
 
# Para oferecer suporte ao modelo LLaMa
pip install auto-gptq[llama]

AutoGPTQ em ação: quantificação e inferência

A funcionalidade principal do AutoGPTQ é permitir a quantificação de grandes modelos de linguagem. O processo é simples e pode ser executado com apenas algumas linhas de código. Abaixo há um exemplo de como um modelo pré-treinado pode ser quantificado com 4 bits e depois utilizado para inferência:

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
import logging
 
# Configura o logging
logging.basicConfig(format="%(asctime)s %(levelname)s [%(name)s] %(message)s", level=logging.INFO, datefmt="%Y-%m-%d %H:%M:%S")
 
# Define os diretórios do modelo pré-treinado e quantificado
pretrained_model_dir = "facebook/opt-125m"
quantized_model_dir = "opt-125m-4bit"
 
# Configura o tokenizer e os exemplos
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_dir, use_fast=True)
examples = [tokenizer("auto-gptq é uma biblioteca de quantização fácil de usar com APIs amigáveis ao usuário, baseada no algoritmo GPTQ.")]
 
# Configura o objeto BaseQuantizeConfig
quantize_config = BaseQuantizeConfig(bits=4, group_size=128, desc_act=False)
 
# Carrega, quantifica e salva o modelo
model = AutoGPTQForCausalLM.from_pretrained(pretrained_model_dir, quantize_config)
model.quantize(examples)
model.save_quantized(quantized_model_dir)

Customização de modelos

AutoGPTQ também permite que os usuários estendam suas funcionalidades para suportar modelos customizados. É um processo direto que dá ao usuário mais controle sobre suas tarefas de aprendizado de máquina. Essa natureza personalizável diferencia o AutoGPTQ de outros pacotes de quantização, tornando-o mais flexível e adaptável a vários casos de uso.

Esta personalização pode ser vista em um exemplo de extensão do auto_gptq para suportar o modelo "OPT".

# Estende o AutoGPTQ para suportar o modelo OPT (o código será fornecido com base em suas necessidades personalizadas)

Avaliação em tarefas de fluxo descendente

O AutoGPTQ suporta a avaliação do desempenho do modelo em tarefas específicas de fluxo descendente antes e depois da quantização. Isso garante que o processo de quantização não afete negativamente o desempenho do modelo nas tarefas destinadas a executar.

Para ilustrar isso ainda mais, percorreremos um exemplo simples de avaliação usando o modelo EleutherAI/gpt-j-6b e o conjunto de dados cardiffnlp/tweet_sentiment_multilingual. Neste caso, estamos avaliando o desempenho do modelo quantizado em uma tarefa de classificação de sequência, mais especificamente, análise de sentimento.

from transformers import pipeline, AutoTokenizer
from auto_gptq import AutoGPTQForSequenceClassification
from datasets import load_dataset
 
# Definir diretórios do modelo pré-treinado e quantizado
pretrained_model_dir = "EleutherAI/gpt-j-6b"
quantized_model_dir = "gpt-j-6b-4bit"
 
# Carregar e quantizar o modelo
model = AutoGPTQForSequenceClassification.from_pretrained(pretrained_model_dir)
model.quantize()
model.save_quantized(quantized_model_dir)
 
# Carregar o tokenizador e o pipeline de análise de sentimento
tokenizer = AutoTokenizer.from_pretrained(quantized_model_dir)
sentiment_analysis = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
 
# Carregar o conjunto de dados 
dataset = load_dataset("cardiffnlp/tweet_sentiment_multilingual", split="test")
 
# Avaliar o modelo no conjunto de dados de teste
corretos, total = 0, 0
for exemplo in dataset:
    previsao = sentiment_analysis(exemplo["text"])[0]
    if previsao["label"].lower() == exemplo["label"].lower():
        corretos += 1
    total += 1
 
# Imprimir a precisão do modelo no conjunto de dados de teste
print(f"Precisão: {corretos / total:.2f}")
 

O código acima demonstra a quantização, salvamento e subsequente avaliação do modelo quantizado. Isso permite que você avalie o desempenho do modelo e como o processo de quantização impacta o resultado na tarefa de classificação de sequência.

FAQ

1. A AutoGPTQ só consegue lidar com modelos baseados no GPT?

Embora a AutoGPTQ tenha sido inicialmente projetada com modelos baseados no GPT em mente, os desenvolvedores expandiram suas funcionalidades para acomodar uma ampla gama de modelos transformadores. Essa versatilidade decorre do design modular da biblioteca, permitindo que ela seja adaptada para outros modelos.

2. Como personalizar a AutoGPTQ para meu caso de uso específico?

A AutoGPTQ permite personalização estendendo suas classes e métodos para suportar suas necessidades específicas. Você pode criar classes personalizadas herdando das classes base fornecidas pela AutoGPTQ e substituir os métodos necessários.

3. A quantização afetará o desempenho do meu modelo?

A quantização envolve uma compensação entre o desempenho do modelo e o tamanho do modelo ou eficiência computacional. No entanto, a AutoGPTQ visa minimizar esse impacto. Ela fornece opções para avaliar seu modelo em tarefas downstream antes e depois da quantização, ajudando a garantir que a degradação de desempenho seja aceitável para seu caso de uso.

Conclusão

Em conclusão, AutoGPTQ fornece uma maneira eficaz e eficiente de quantizar modelos de transformer enquanto mantém os padrões de desempenho em tarefas específicas. Sua API fácil de usar e capacidades de customização tornam-se uma ferramenta versátil para profissionais de aprendizado de máquina que visam otimizar seus modelos. Se você está procurando reduzir os requisitos de armazenamento do seu modelo ou melhorar a velocidade de inferência, o AutoGPTQ pode ser uma parte essencial do seu conjunto de ferramentas.