ExLlamaV3 - Inferenza LLM Quantizzata Veloce su GPU Consumer
ExLlamaV3 è una libreria di inferenza veloce per eseguire LLM quantizzati su GPU NVIDIA consumer. Il suo formato EXL3 fornisce quantizzazione variable-bitrate ad alta qualità — puoi puntare a un average bits-per-weight (es. 3.0, 4.25, 6.0) per scambiare qualità contro VRAM precisamente — permettendo ai modelli grandi di stare su una singola scheda 24GB mantenendo throughput forte. È il successore di ExLlamaV2 ed è favorito dalla comunità local-LLM per schiacciare modelli grandi in memoria limitata.
Installazione
| Metodo | Comando |
|---|
| pip (wheel precompilata) | pip install exllamav3 |
| Da sorgenti | git clone https://github.com/turboderp-org/exllamav3 && cd exllamav3 && pip install -e . |
| Requisiti | GPU NVIDIA (Ampere+), CUDA, PyTorch |
| Verifica | python -c "import exllamav3; print('ok')" |
| Concetto | Significato |
|---|
| Bitrate variabile | Punta a un average bits-per-weight (bpw), es. 2.5–8.0 |
| Precisione per-layer | Diversi layer possono usare diversa precisione |
| Dial qualità/taglia | bpw più alto = qualità migliore, più VRAM |
| Calibrazione | Usa un dataset di calibrazione durante la quantizzazione |
Quantizzazione di un Modello
# Converti un modello HF a EXL3 a ~4.0 bit per 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 | Descrizione |
|---|
-i, --in_dir | Modello HF di origine |
-o, --out_dir | Directory EXL3 di output |
-b, --bits | Target average bit per peso |
-hb, --head_bits | Precisione per la testa di output |
-c, --cal_dir | Dati di calibrazione personalizzati |
Inferenza 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="Spiega la quantizzazione brevemente.",
max_new_tokens=200)
print(output)
| Oggetto | Ruolo |
|---|
Config | Carica config del modello da una directory EXL3 |
Model | Il modello quantizzato |
Cache | Cache KV (più grande = contesto più lungo) |
Generator | Esegue la generazione |
Memoria e Contesto
| Leva | Effetto |
|---|
| bpw al momento della quant | bpw più basso → meno VRAM, perdita di qualità |
| Dimensione cache | Più grande → contesto più lungo, più VRAM |
| Quantizzazione cache | Cache KV quantizzato per estendere il contesto |
| Bit della testa | Mantieni la testa a precisione più alta per la qualità |
Scelta di un Bitrate (guida approssimativa)
| Target bpw | Uso tipico |
|---|
| 2.0–2.5 | Adatta un modello molto grande in VRAM stretto (qualità cade) |
| 3.0–3.5 | Aggressivo ma usabile |
| 4.0–4.5 | Sweet spot per la maggior parte dei setup 24GB |
| 6.0+ | Quasi-lossless, più VRAM |
Integrazione dell”Ecosistema
| Target | Nota |
|---|
| TabbyAPI | Server compatibile con OpenAI che usa ExLlamaV3 |
| text-generation-webui | Supporto del loader |
| Aphrodite Engine | Può servire modelli quantizzati EXL3 |
ExLlamaV3 vs Altri Approcci
| Aspetto | ExLlamaV3 | llama.cpp (GGUF) | GPTQ/AWQ |
|---|
| Target | GPU NVIDIA consumer | CPU + GPU, cross-platform | GPU |
| Quantizzazione | Variable-bitrate EXL3 | k-quants | Fisso 4-bit |
| Controllo della precisione | Fine (qualsiasi bpw) | Livelli preset | Coarse |
| Migliore per | Massima qualità-per-VRAM su GPU | Portabilità, CPU | Servizio 4-bit standard |
Risorse