ExLlamaV3 - Inferência Rápida de LLM Quantizado em GPUs de Consumidor
ExLlamaV3 é uma biblioteca de inferência rápida para executar LLMs quantizados em GPUs NVIDIA de consumidor. Seu formato EXL3 fornece quantização de alta qualidade e taxa de bits variável — você pode almejar uma quantidade média de bits por peso (ex: 3.0, 4.25, 6.0) para trocar qualidade por VRAM com precisão — permitindo modelos grandes encaixarem em um único cartão de 24GB enquanto mantêm throughput forte. É o sucessor de ExLlamaV2 e é favoritado pela comunidade local-LLM para apertar grandes modelos em memória limitada.
Instalação
| Método | Comando |
|---|
| pip (wheel pré-construído) | pip install exllamav3 |
| A partir do código-fonte | git clone https://github.com/turboderp-org/exllamav3 && cd exllamav3 && pip install -e . |
| Requisitos | GPU NVIDIA (Ampere+), CUDA, PyTorch |
| Verificar | python -c "import exllamav3; print('ok')" |
| Conceito | Significado |
|---|
| Taxa de bits variável | Almejar uma quantidade média de bits por peso (bpw), ex: 2.5–8.0 |
| Precisão por camada | Diferentes camadas podem usar diferentes precisões |
| Discagem qualidade/tamanho | bpw mais alto = melhor qualidade, mais VRAM |
| Calibração | Usa um dataset de calibração durante a quantização |
Quantizando um Modelo
# Converta um modelo HF para EXL3 em ~4.0 bits por peso
python -m exllamav3.convert \
-i meta-llama/Llama-3.1-8B-Instruct \
-o Llama-3.1-8B-exl3-4.0bpw \
-b 4.0
| Flag | Descrição |
|---|
-i, --in_dir | Modelo HF de origem |
-o, --out_dir | Diretório de saída EXL3 |
-b, --bits | Objetivo de média de bits por peso |
-hb, --head_bits | Precisão para a cabeça de saída |
-c, --cal_dir | Dados de calibração customizados |
Inferência Python
from exllamav3 import Model, Config, Cache, Tokenizer, Generator
config = Config.from_directory("Llama-3.1-8B-exl3-4.0bpw")
model = Model.from_config(config)
cache = Cache(model, max_num_tokens=8192)
model.load()
tokenizer = Tokenizer.from_config(config)
generator = Generator(model=model, cache=cache, tokenizer=tokenizer)
output = generator.generate(prompt="Explique quantização brevemente.",
max_new_tokens=200)
print(output)
| Objeto | Papel |
|---|
Config | Carrega config do modelo de um dir EXL3 |
Model | O modelo quantizado |
Cache | Cache KV (tamanho = contexto mais longo) |
Generator | Executa geração |
Memória e Contexto
| Alavanca | Efeito |
|---|
| bpw no tempo de quant | bpw mais baixo → menos VRAM, alguma perda de qualidade |
| Tamanho do cache | Maior → contexto mais longo, mais VRAM |
| Quantização de cache | Cache KV quantizado para estender contexto |
| Head bits | Mantenha a cabeça em precisão mais alta para qualidade |
Escolhendo uma Taxa de Bits (guia aproximado)
| Objetivo bpw | Uso típico |
|---|
| 2.0–2.5 | Encaixe um modelo muito grande em VRAM apertada (qualidade cai) |
| 3.0–3.5 | Agressivo mas usável |
| 4.0–4.5 | Sweet spot para a maioria de setups 24GB |
| 6.0+ | Quase sem perdas, mais VRAM |
Integração de Ecossistema
| Alvo | Nota |
|---|
| TabbyAPI | Servidor compatível com OpenAI que usa ExLlamaV3 |
| text-generation-webui | Suporte de loader |
| Aphrodite Engine | Pode servir modelos quantizados EXL3 |
ExLlamaV3 vs Outras Abordagens
| Aspecto | ExLlamaV3 | llama.cpp (GGUF) | GPTQ/AWQ |
|---|
| Alvo | GPUs NVIDIA de consumidor | CPU + GPU, cross-platform | GPU |
| Quantização | EXL3 taxa de bits variável | k-quants | Fixo 4-bit |
| Controle de precisão | Fino (qualquer bpw) | Níveis pré-definidos | Grosseiro |
| Melhor para | Qualidade máxima por VRAM em GPU | Portabilidade, CPU | Serviço 4-bit padrão |
Recursos