Service d'inférence qui échoue sous charge (mémoire GPU saturée)
```text torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 1.50 GiB (GPU 0; 23.65 GiB total capacity; 22.10 GiB already allocated) ```
Détecter
Le service de génération répond correctement à faible trafic, puis renvoie des 500 et redémarre lors des pics ; la latence p99 explose avant les erreurs.
Symptômes
Le service de génération répond correctement à faible trafic, puis renvoie des 500 et redémarre lors des pics ; la latence p99 explose avant les erreurs.
Environnement
Serveur d'inférence de LLM sur GPU 24 Go, déploiement Kubernetes, requêtes avec contextes longs.
Cause racine
La mémoire GPU est consommée par les poids et par le cache KV, proportionnel au nombre de requêtes simultanées × longueur de contexte. Sans limite de concurrence ni de longueur, un pic de requêtes longues sature la mémoire.
Diagnostic
nvidia-smi/ métriques DCGM : mémoire utilisée, utilisation.- Corréler avec la concurrence et la longueur moyenne des prompts.
- Journaux du serveur d'inférence : taille de lot, préemptions.
Solution
- Limiter la concurrence et la longueur maximale de contexte (paramètres du serveur, ex.
max_num_seqs,max_model_len,gpu_memory_utilization). - File d'attente avec rejet contrôlé (429) plutôt que plantage.
- Quantification ou GPU plus grand ; mise à l'échelle horizontale sur la longueur de file.
Commandes
nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu --format=csv -l 2
kubectl top pod -n inference
Prévention
Test de charge avec distribution réaliste de longueurs, alertes sur mémoire GPU et longueur de file, autoscaling sur métrique de file d'attente.