Chapitre 2 : Optimisation de l'inférence
Quantification
| Précision | Mémoire | Vitesse | Qualité |
|---|---|---|---|
| FP32 | 100% | 1x | Meilleure |
| FP16 | 50% | 2x | ~Meilleure |
| INT8 | 25% | 3x | Bonne |
| INT4 | 12.5% | 4x | Acceptable |
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
# Quantification en 4 bits
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4",
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-chat-hf",
quantization_config=quantization_config,
device_map="auto"
)
Optimisation du cache KV
# vLLM gère automatiquement le cache KV avec PagedAttention
# Cela permet une utilisation efficace de la mémoire pour des séquences de longueur variable
# Traditionnel : Pré-allouer la longueur maximale de séquence
# PagedAttention : Allouer dynamiquement par pages
llm = LLM(
model="model-name",
max_model_len=4096,
block_size=16, # Taille de la page
gpu_memory_utilization=0.9
)
Suivant : Chapitre 3 : Gestion des coûts