ExLlamaV3 - Inferencia Rápida de LLM Cuantizado en GPUs de Consumidor
ExLlamaV3 es una biblioteca de inferencia rápida para ejecutar LLMs cuantizados en GPUs NVIDIA de consumidor. Su formato EXL3 proporciona cuantización de tasa de bits variable de alta calidad — puedes apuntar a un promedio de bits por peso (p. ej. 3.0, 4.25, 6.0) para compensar calidad contra VRAM con precisión — permitiendo que modelos grandes quepan en una sola tarjeta de 24GB mientras se mantiene un throughput fuerte. Es el sucesor de ExLlamaV2 y es favorecido por la comunidad de LLM local por exprimir modelos grandes en memoria limitada.
Instalación
| Método | Comando |
|---|
| pip (rueda precompilada) | pip install exllamav3 |
| Desde fuente | 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')" |
| Concepto | Significado |
|---|
| Tasa de bits variable | Apuntar a un promedio de bits por peso (bpw), p. ej. 2.5–8.0 |
| Precisión por capa | Diferentes capas pueden usar diferentes precisiones |
| Dial calidad/tamaño | Mayor bpw = mejor calidad, más VRAM |
| Calibración | Usa un conjunto de datos de calibración durante la cuantización |
Cuantizando un Modelo
# Convertir un modelo HF a EXL3 a ~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
| Bandera | Descripción |
|---|
-i, --in_dir | Modelo HF de origen |
-o, --out_dir | Directorio EXL3 de salida |
-b, --bits | Promedio objetivo de bits por peso |
-hb, --head_bits | Precisión para la cabeza de salida |
-c, --cal_dir | Datos de calibración personalizados |
Inferencia de 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="Explain quantization briefly.",
max_new_tokens=200)
print(output)
| Objeto | Rol |
|---|
Config | Carga configuración de modelo desde un directorio EXL3 |
Model | El modelo cuantizado |
Cache | Caché KV (tamaño = contexto más largo) |
Generator | Ejecuta generación |
Memoria y Contexto
| Palanca | Efecto |
|---|
| bpw en tiempo de cuant | bpw más bajo → menos VRAM, cierta pérdida de calidad |
| Tamaño de caché | Más grande → contexto más largo, más VRAM |
| Cuantización de caché | Caché KV cuantizado para extender contexto |
| Bits de cabeza | Mantener la cabeza con precisión más alta para calidad |
Eligiendo una Tasa de Bits (guía áspera)
| bpw Objetivo | Uso típico |
|---|
| 2.0–2.5 | Ajustar un modelo muy grande en VRAM apretada (calidad cae) |
| 3.0–3.5 | Agresivo pero usable |
| 4.0–4.5 | Punto dulce para la mayoría de configuraciones de 24GB |
| 6.0+ | Casi sin pérdida, más VRAM |
Integración de Ecosistema
| Destino | Nota |
|---|
| TabbyAPI | Servidor compatible con OpenAI que usa ExLlamaV3 |
| text-generation-webui | Soporte de cargador |
| Aphrodite Engine | Puede servir modelos cuantizados EXL3 |
ExLlamaV3 vs Otros Enfoques
| Aspecto | ExLlamaV3 | llama.cpp (GGUF) | GPTQ/AWQ |
|---|
| Destino | GPUs NVIDIA de consumidor | CPU + GPU, multiplataforma | GPU |
| Cuantización | EXL3 de tasa de bits variable | k-quants | Fijo de 4-bit |
| Control de precisión | Fino (cualquier bpw) | Niveles preestablecidos | Áspero |
| Mejor para | Máxima calidad por VRAM en GPU | Portabilidad, CPU | Servicio estándar de 4-bit |
Recursos