Infrastructure et GPU
Dimensionner votre infrastructure GPU
Choisir le bon GPU, la bonne quantité de mémoire et le bon outil d’orchestration est une étape critique du self-hosting. Cette leçon couvre les exigences matérielles des modèles Mistral, les techniques de quantization pour réduire les besoins mémoire, et les outils d’orchestration comme SkyPilot et Cerebrium.
Exigences GPU par modèle
Mémoire GPU requise (FP16, sans quantization)
| Modèle | Paramètres | VRAM minimale | GPU recommandé |
|---|---|---|---|
| Mistral 7B | 7B | 16 Go | 1x A10G / L4 |
| Mistral Nemo | 12B | 24 Go | 1x A10G / RTX 4090 |
| Mixtral 8x7B | 46.7B | 100 Go | 2x A100-80GB |
| Mixtral 8x22B | 141B | 300 Go | 4x A100-80GB |
| Mistral Large | 123B | 250 Go | 4x A100-80GB |
| Codestral | 22B | 48 Go | 1x A100-80GB |
Règle d’estimation rapide
En FP16, comptez environ 2 Go de VRAM par milliard de paramètres. Pour un modèle de 7B paramètres : 7 x 2 = 14 Go minimum, plus l’overhead du KV cache et du moteur d’inférence.
Quantization : réduire les besoins mémoire
La quantization réduit la précision des poids du modèle pour diminuer la consommation mémoire, souvent avec un impact minimal sur la qualité.
FP8 (8 bits)
La quantization FP8 divise la mémoire par deux par rapport au FP16 :
# Servir un modèle en FP8 avec vLLM
vllm serve mistralai/Mistral-Nemo-Instruct-2407 \
--tokenizer_mode mistral \
--config_format mistral \
--load_format mistral \
--dtype float8_e4m3fn
| Modèle | FP16 | FP8 | Réduction |
|---|---|---|---|
| Mistral 7B | 14 Go | 7 Go | -50% |
| Mistral Nemo | 24 Go | 12 Go | -50% |
| Mixtral 8x7B | 100 Go | 50 Go | -50% |
INT4 (4 bits)
La quantization 4-bit réduit encore davantage la mémoire, mais avec un impact plus visible sur la qualité :
# AWQ quantization avec TGI
docker run --gpus all --shm-size 1g \
-p 8080:80 \
-e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN \
ghcr.io/huggingface/text-generation-inference:2.0.3 \
--model-id mistralai/Mistral-7B-Instruct-v0.3 \
--quantize awq
Impact sur la qualité
| Précision | Mémoire | Qualité | Vitesse |
|---|---|---|---|
| FP16 | Référence | Référence | Référence |
| FP8 | -50% | -1 à -2% | +10-20% |
| INT4 | -75% | -3 à -5% | +30-50% |
En pratique, le FP8 est recommandé pour la production — la perte de qualité est négligeable. L’INT4 convient pour le prototypage ou les environnements à mémoire très limitée.
SkyPilot : orchestration multi-cloud
SkyPilot est un framework open-source pour déployer des LLM sur n’importe quel cloud (AWS, GCP, Azure, Lambda Labs, etc.). Il gère automatiquement la sélection du GPU le moins cher et le provisionning.
Configurations prêtes à l’emploi
Mistral fournit des fichiers YAML pour SkyPilot :
# mistral-7b.yaml
resources:
accelerators: A10G:1
cloud: aws
setup: |
pip install vllm
run: |
vllm serve mistralai/Mistral-7B-Instruct-v0.3 \
--tokenizer_mode mistral \
--config_format mistral \
--load_format mistral
Déploiement
# Installer SkyPilot
pip install "skypilot[aws,gcp,azure]"
# Lancer le cluster
sky launch -c mistral-7b mistral-7b.yaml --region us-east-1
# Vérifier le statut
sky status
# Arrêter (pour économiser)
sky stop mistral-7b
# Supprimer
sky down mistral-7b
Configurations GPU recommandées
| Modèle | Config SkyPilot | Cloud estimé |
|---|---|---|
| Mistral 7B | A10G:1 | ~1$/h |
| Mixtral 8x7B | A100-80GB:2 | ~6$/h |
| Mixtral 8x22B | A100-80GB:4 | ~12$/h |
Sécurité
SkyPilot crée des VM avec des ports ouverts par défaut. En production :
- Restreignez le réseau avec des Security Groups / Firewall Rules
- Ajoutez un load balancer avec authentification
- Ne laissez pas le port 8000 ouvert sur Internet
Cerebrium : serverless GPU
Cerebrium est une plateforme serverless pour l’inférence GPU. Vous ne payez que le compute réellement utilisé, avec un auto-scaling automatique.
Installation et initialisation
pip install cerebrium
cerebrium login
cerebrium init mistral-vllm
Configuration
Le fichier cerebrium.toml contrôle le déploiement :
[cerebrium.deployment]
name = "mistral-nemo"
python_version = "3.11"
[cerebrium.hardware]
gpu = "AMPERE_A10"
cpu = 4
memory = 16
[cerebrium.scaling]
min_replicas = 0
max_replicas = 5
cooldown = 60
[cerebrium.dependencies.pip]
vllm = "latest"
Déploiement
cerebrium deploy
Cerebrium gère automatiquement :
- Le provisionning GPU
- L’auto-scaling (de 0 à N replicas)
- Le load balancing
- Le monitoring
Scaling en production
Horizontal scaling
Pour augmenter le débit, déployez plusieurs instances derrière un load balancer :
┌─── vLLM instance 1 (GPU A)
Load Balancer ──────┼─── vLLM instance 2 (GPU B)
└─── vLLM instance 3 (GPU C)
Métriques à surveiller
- Tokens/seconde — débit de génération
- TTFB (Time To First Byte) — latence avant le premier token
- Utilisation GPU — devrait être > 80% en charge
- Mémoire GPU — surveillez les OOM (Out of Memory)
- Queue depth — nombre de requêtes en attente
# Surveiller l'utilisation GPU
watch -n 1 nvidia-smi
Points clés à retenir
- Comptez ~2 Go VRAM par milliard de paramètres en FP16
- La quantization FP8 divise la mémoire par deux avec un impact négligeable sur la qualité
- SkyPilot simplifie le déploiement multi-cloud avec des configs YAML prêtes à l’emploi
- Cerebrium offre du serverless GPU avec auto-scaling (pay-per-compute)
- En production, ajoutez un load balancer et surveillez les métriques GPU en continu