Chapitre 2 : Quantification (INT8, INT4)
Pourquoi quantifier ?
Réduire la mémoire et augmenter la vitesse en utilisant une précision inférieure :
| Précision | Bits | Mémoire | Qualité |
|---|---|---|---|
| FP32 | 32 | 100% | 100% |
| FP16 | 16 | 50% | ~100% |
| INT8 | 8 | 25% | ~99% |
| INT4 | 4 | 12.5% | ~95-98% |
GPTQ
Quantification après entraînement optimisée pour les modèles de type GPT :
from transformers import AutoModelForCausalLM
from auto_gptq import AutoGPTQForCausalLM
model = AutoGPTQForCausalLM.from_quantized(
"TheBloke/Llama-2-7B-GPTQ",
device="cuda:0"
)
AWQ (Quantification des poids sensible à l'activation)
Préserve les poids importants :
from awq import AutoAWQForCausalLM
model = AutoAWQForCausalLM.from_quantized(
"TheBloke/Llama-2-7B-AWQ",
fuse_layers=True
)
bitsandbytes
Quantification à la volée :
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b",
quantization_config=bnb_config
)