ExLlamaV3 - Inférence LLM rapide quantifiée sur GPU grand public
ExLlamaV3 est une bibliothèque d’inférence rapide pour exécuter les LLM quantifiés sur GPU NVIDIA grand public. Son format EXL3 fournit une quantification de bitrate variable de haute qualité — vous pouvez cibler un nombre moyen de bits par poids (ex. 3.0, 4.25, 6.0) pour faire un compromis qualité contre VRAM avec précision — permettant aux grands modèles de tenir sur une seule carte 24GB tout en gardant un débit fort. Il est le successeur de ExLlamaV2 et est préféré par la communauté LLM local pour faire tenir les grands modèles dans une mémoire limitée.
Installation
| Méthode | Commande |
|---|
| pip (wheel prébuilt) | pip install exllamav3 |
| À partir des sources | git clone https://github.com/turboderp-org/exllamav3 && cd exllamav3 && pip install -e . |
| Exigences | NVIDIA GPU (Ampere+), CUDA, PyTorch |
| Vérifier | python -c "import exllamav3; print('ok')" |
| Concept | Signification |
|---|
| Variable bitrate | Cibler un nombre moyen de bits par poids (bpw), ex. 2.5–8.0 |
| Per-layer precision | Différentes couches peuvent utiliser différentes précisions |
| Quality/size dial | bpw plus élevé = meilleure qualité, plus de VRAM |
| Calibration | Utilise un ensemble de données d’étalonnage pendant la quantification |
Quantifier un modèle
# Convertir un modèle HF vers EXL3 à ~4.0 bits par poids
python -m exllamav3.convert \
-i meta-llama/Llama-3.1-8B-Instruct \
-o Llama-3.1-8B-exl3-4.0bpw \
-b 4.0
| Flag | Description |
|---|
-i, --in_dir | Modèle HF source |
-o, --out_dir | Répertoire EXL3 de sortie |
-b, --bits | Nombre moyen de bits par poids cible |
-hb, --head_bits | Précision pour la tête de sortie |
-c, --cal_dir | Données d’étalonnage personnalisées |
Inférence 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="Expliquer la quantification brièvement.",
max_new_tokens=200)
print(output)
| Object | Rôle |
|---|
Config | Charger la config du modèle depuis un répertoire EXL3 |
Model | Le modèle quantifié |
Cache | Cache KV (grand = contexte plus long) |
Generator | Exécute la génération |
Mémoire et contexte
| Lever | Effet |
|---|
| bpw au moment de la quant | bpw plus bas → moins de VRAM, perte de qualité |
| Taille du cache | Plus grand → contexte plus long, plus de VRAM |
| Cache quantization | Cache KV quantifié pour étendre le contexte |
| Head bits | Garder la tête en précision plus élevée pour la qualité |
Choisir un bitrate (guide approximatif)
| bpw cible | Utilisation typique |
|---|
| 2.0–2.5 | Faire tenir un modèle très large dans une VRAM serré (qualité baisse) |
| 3.0–3.5 | Agressif mais utilisable |
| 4.0–4.5 | Sweet spot pour la plupart des configurations 24GB |
| 6.0+ | Quasi-lossless, plus de VRAM |
Intégration de l’écosystème
| Cible | Remarque |
|---|
| TabbyAPI | Serveur compatible OpenAI qui utilise ExLlamaV3 |
| text-generation-webui | Support du loader |
| Aphrodite Engine | Peut servir les modèles quantifiés EXL3 |
ExLlamaV3 vs autres approches
| Aspect | ExLlamaV3 | llama.cpp (GGUF) | GPTQ/AWQ |
|---|
| Cible | GPU NVIDIA grand public | CPU + GPU, multiplateforme | GPU |
| Quantification | Bitrate variable EXL3 | k-quants | 4-bit fixe |
| Contrôle de précision | Fine (n’importe quel bpw) | Niveaux prédéfinis | Grossier |
| Meilleur pour | Qualité max par VRAM sur GPU | Portabilité, CPU | Service 4-bit standard |
Ressources