Aller au contenu

ExLlamaV3 - Inférence LLM rapide quantifiée sur GPU grand public

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éthodeCommande
pip (wheel prébuilt)pip install exllamav3
À partir des sourcesgit clone https://github.com/turboderp-org/exllamav3 && cd exllamav3 && pip install -e .
ExigencesNVIDIA GPU (Ampere+), CUDA, PyTorch
Vérifierpython -c "import exllamav3; print('ok')"

Le format EXL3

ConceptSignification
Variable bitrateCibler un nombre moyen de bits par poids (bpw), ex. 2.5–8.0
Per-layer precisionDifférentes couches peuvent utiliser différentes précisions
Quality/size dialbpw plus élevé = meilleure qualité, plus de VRAM
CalibrationUtilise 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
FlagDescription
-i, --in_dirModèle HF source
-o, --out_dirRépertoire EXL3 de sortie
-b, --bitsNombre moyen de bits par poids cible
-hb, --head_bitsPrécision pour la tête de sortie
-c, --cal_dirDonné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)
ObjectRôle
ConfigCharger la config du modèle depuis un répertoire EXL3
ModelLe modèle quantifié
CacheCache KV (grand = contexte plus long)
GeneratorExécute la génération

Mémoire et contexte

LeverEffet
bpw au moment de la quantbpw plus bas → moins de VRAM, perte de qualité
Taille du cachePlus grand → contexte plus long, plus de VRAM
Cache quantizationCache KV quantifié pour étendre le contexte
Head bitsGarder la tête en précision plus élevée pour la qualité

Choisir un bitrate (guide approximatif)

bpw cibleUtilisation typique
2.0–2.5Faire tenir un modèle très large dans une VRAM serré (qualité baisse)
3.0–3.5Agressif mais utilisable
4.0–4.5Sweet spot pour la plupart des configurations 24GB
6.0+Quasi-lossless, plus de VRAM

Intégration de l’écosystème

CibleRemarque
TabbyAPIServeur compatible OpenAI qui utilise ExLlamaV3
text-generation-webuiSupport du loader
Aphrodite EnginePeut servir les modèles quantifiés EXL3

ExLlamaV3 vs autres approches

AspectExLlamaV3llama.cpp (GGUF)GPTQ/AWQ
CibleGPU NVIDIA grand publicCPU + GPU, multiplateformeGPU
QuantificationBitrate variable EXL3k-quants4-bit fixe
Contrôle de précisionFine (n’importe quel bpw)Niveaux prédéfinisGrossier
Meilleur pourQualité max par VRAM sur GPUPortabilité, CPUService 4-bit standard

Ressources