Dynamic Batching
iaDéfinition
Le Dynamic Batching (batching dynamique) est une technique d'optimisation du serving LLM qui regroupe automatiquement plusieurs requetes clients arrivant independamment en batches pour l'inference GPU, maximisant l'utilisation des tensor cores. Contrairement au Static Batching (batch de taille fixe), le Dynamic Batching adapte la taille du batch en fonction des requetes en attente dans la file. Le principe : les GPU sont optimises pour les operations matricielles paralleles. Une inference sur un batch de 32 sequences est presque aussi rapide qu'une inference sur 1 sequence (si toutes rentrent en VRAM), car les GPU executent les operations en parallele. Le Dynamic Batching capitalise sur ce parallelisme en regroupant les requetes de differents clients qui arrivent dans un fenetre de temps courte. Continuous Batching (ou Iteration-level scheduling, vLLM) est la variante la plus avancee du Dynamic Batching pour les LLMs auto-regressifs : au lieu d'attendre que toutes les sequences d'un batch soient terminees, de nouvelles sequences sont ajoutees au batch des qu'une sequence se termine. Cela elimine le 'padding overhead' (sequences courtes qui attendent les longues) et maximise l'utilisation GPU. Les gains du Continuous Batching vs Static Batching : 2-4x de throughput superieur avec la meme latence mediane pour les workloads de generation LLM heterogenes (sequences de longueurs variees). vLLM, TGI (HuggingFace Text Generation Inference), LMDeploy et Triton + TRT-LLM implementent le Continuous Batching. Les parametres de configuration du Dynamic Batching : max_batch_size (taille maximale du batch), max_queue_delay (temps maximum d'attente avant envoi d'un batch partiel), preferred_batch_sizes (tailles de batch optimales pour le hardware). Ces parametres sont disponibles dans Triton, vLLM et TGI.
Continuous Batching dans vLLM
from vllm import AsyncLLMEngine, AsyncEngineArgs
import asyncio
engine_args = AsyncEngineArgs(
model='meta-llama/Meta-Llama-3.1-8B-Instruct',
max_num_seqs=256, # Max sequences en parallele
max_num_batched_tokens=4096, # Max tokens par batch
gpu_memory_utilization=0.90
)
engine = AsyncLLMEngine.from_engine_args(engine_args)
# Les requetes sont automatiquement batchees par le moteur
async def generate(prompt):
async for output in engine.generate(prompt, sampling_params, request_id=str(id(prompt))):
if output.finished:
return output.outputs[0].textGain throughput Continuous Batching
Pour un service avec 100 requetes/seconde de longueurs variees (100-1000 tokens) :
- Static Batching (batch=8, padding) : 8 req/s de throughput GPU effectif
- Dynamic Batching (batch adaptatif) : 20-25 req/s
- Continuous Batching : 50-70 req/s (2-3x vs dynamic)
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h