Comment Ollama gère les requêtes parallèles
Configurer ollama pour l'exécution de requêtes en parallèle.
Lorsque le serveur Ollama reçoit deux demandes en même temps, son comportement dépend de sa configuration et des ressources système disponibles.
Pour en savoir plus sur le débit, la latence, la VRAM et les benchmarks sur différents runtimes et matériels, consultez LLM Performance: Benchmarks, Bottlenecks & Optimization.

Gestion des demandes simultanées
-
Traitement parallèle : Ollama prend en charge le traitement parallèle des demandes. Si le système dispose de suffisamment de mémoire disponible (RAM pour l’inférence CPU, VRAM pour l’inférence GPU), plusieurs modèles peuvent être chargés en même temps, et chaque modèle chargé peut traiter plusieurs demandes en parallèle. Cela est contrôlé par la variable d’environnement
OLLAMA_NUM_PARALLEL, qui définit le nombre maximum de demandes parallèles que chaque modèle peut traiter simultanément. Par défaut, cela est fixé à 4 (ou 1, selon la disponibilité de la mémoire), mais il peut être ajusté. -
Batching : Lorsque plusieurs demandes pour le même modèle arrivent en même temps, Ollama les regroupe et les traite ensemble. Cela signifie que les deux demandes sont traitées en parallèle, et les utilisateurs verront les réponses revenir en même temps. Le serveur ne fait pas exprès d’attendre pour remplir un lot ; le traitement commence dès que les demandes sont disponibles.
File d’attente et limites
-
File d’attente : Si le nombre de demandes simultanées dépasse le parallélisme configuré (par exemple, plus de
OLLAMA_NUM_PARALLELdemandes pour un modèle), les demandes supplémentaires sont mises en file d’attente. La file d’attente fonctionne selon le principe premier entré, premier sorti (FIFO). -
Limites de la file d’attente : Le nombre maximum de demandes en file d’attente est contrôlé par
OLLAMA_MAX_QUEUE(par défaut : 512). Si la file d’attente est pleine, les nouvelles demandes reçoivent une erreur 503 indiquant que le serveur est surchargé. -
Chargement des modèles : Le nombre de modèles différents qui peuvent être chargés en même temps est contrôlé par
OLLAMA_MAX_LOADED_MODELS. Si une demande nécessite le chargement d’un nouveau modèle et que la mémoire est insuffisante, Ollama déchargera les modèles inactifs pour libérer de l’espace, et la demande sera mise en file d’attente jusqu’à ce que le modèle soit chargé.
Scénario d’exemple
Si deux demandes pour le même modèle arrivent en même temps et que le parallélisme du serveur est configuré à au moins 2, les deux demandes seront traitées ensemble en lot, et les deux utilisateurs recevront des réponses simultanément. Si le parallélisme est configuré à 1, une demande est traitée immédiatement, et la seconde est mise en file d’attente jusqu’à ce que la première soit terminée.
Si les demandes concernent des modèles différents et qu’il y a suffisamment de mémoire, les deux modèles peuvent être chargés et les demandes traitées en parallèle. Si non, un modèle devra être déchargé, et la demande sera mise en file d’attente.
Tableau récapitulatif
| Scénario | Résultat |
|---|---|
| Deux demandes, même modèle, parallélisme suffisant | Les deux demandes sont traitées en parallèle (groupées) |
| Deux demandes, même modèle, parallélisme=1 | Une demande traitée, la seconde mise en file d’attente jusqu’à ce que la première soit terminée |
| Deux demandes, modèles différents, mémoire suffisante | Les deux modèles sont chargés, les demandes traitées en parallèle |
| Deux demandes, modèles différents, mémoire insuffisante | Une demande mise en file d’attente jusqu’à ce que la mémoire soit disponible ou qu’un modèle soit déchargé |
En résumé, Ollama est conçu pour gérer efficacement plusieurs demandes simultanées, à condition que le serveur soit configuré pour la concurrence et dispose de ressources suffisantes. Sinon, les demandes sont mises en file d’attente et traitées dans l’ordre.
Gestion de l’insuffisance de mémoire
Lorsque Ollama rencontre un manque de mémoire pour gérer les demandes entrantes, il utilise une combinaison de mécanismes de file d’attente et de stratégies de gestion des ressources pour maintenir la stabilité :
File d’attente des demandes
- Les nouvelles demandes sont placées dans une file d’attente FIFO (First-In, First-Out) lorsque la mémoire ne peut être allouée immédiatement.
- La taille de la file d’attente est contrôlée par OLLAMA_MAX_QUEUE (par défaut : 512 demandes).
- Si la file d’attente atteint sa capacité, les nouvelles demandes reçoivent des erreurs 503 “Serveur surchargé”.
Gestion des modèles
- Les modèles actifs peuvent être déchargés de la mémoire lorsqu’ils deviennent inactifs pour libérer des ressources pour les demandes en file d’attente.
- Le nombre de modèles chargés simultanément est limité par OLLAMA_MAX_LOADED_MODELS (par défaut : 3×GPU ou 3 pour le CPU).
Optimisation de la mémoire
- Essai de regrouper les demandes pour le même modèle afin de maximiser l’efficacité mémoire.
- Pour l’inférence GPU, une allocation complète de VRAM par modèle est nécessaire – les chargements partiels ne sont pas pris en charge.
Scénarios de défaillance
Exaustion critique de la mémoire : Lorsque même les demandes en file d’attente dépassent les ressources disponibles, Ollama peut :
- Passer en mémoire disque (ce qui réduit gravement les performances)
- Retourner des erreurs “mémoire insuffisante”
- Crash de l’instance du modèle dans les cas extrêmes
| Configuration Controls Setting | Purpose | Default Value |
|---|---|---|
| OLLAMA_MAX_QUEUE | Maximum de demandes en file d’attente | 512 |
| OLLAMA_NUM_PARALLEL | Requêtes parallèles par modèle chargé | 4 (ou 1 si limité) |
| OLLAMA_MAX_LOADED_MODELS | Maximum de modèles chargés simultanément | 3×GPU ou 3 pour le CPU |
Les administrateurs devraient surveiller l’utilisation de la mémoire et ajuster ces paramètres en fonction de leurs capacités matérielles. La gestion de la mémoire insuffisante devient cruciale lors de l’exécution de modèles plus grands (7B+ paramètres) ou du traitement de plusieurs demandes simultanées.
Stratégies d’optimisation d’Ollama
Activez l’accélération GPU avec export OLLAMA_CUDA=1 et définissez le nombre de threads CPU via export OLLAMA_NUM_THREADS=84.
Améliorations matérielles
- RAM : 32 Go+ pour les modèles 13B, 64 Go+ pour les modèles 70B
- Stockage : SSD NVMe pour un chargement/échange de modèles plus rapide
- GPU : NVIDIA RTX 3080/4090 avec 16 Go+ de VRAM pour les modèles plus grands
Stratégies opérationnelles
- Regrouper les demandes : Traiter plusieurs requêtes simultanément pour amortir le surcoût mémoire
- Déchargement automatique des modèles : Permet à Ollama de supprimer les modèles inactifs de la mémoire
- Cache des modèles fréquemment utilisés : Gardez les modèles communs résidents en mémoire
Surveillance et dépannage
- Utilisez
nvidia-smi(GPU) ethtop(CPU/RAM) pour identifier les goulots d’étranglement - Pour les erreurs de mémoire :
- Migrez vers des modèles quantifiés
- Réduisez les demandes simultanées
- Augmentez l’espace d’échange
Exemple de workflow d’optimisation :
# Utilisez un modèle quantifié avec accélération GPU
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048
# Limitez les modèles chargés et les demandes parallèles
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4
Ces ajustements peuvent réduire l’utilisation de la mémoire de 30 à 60 % tout en maintenant la qualité des réponses, particulièrement bénéfique lors de l’exécution de plusieurs modèles ou du traitement de volumes élevés de demandes.
Ollama : Regroupement des demandes vs exécution parallèle
Le regroupement (batching) dans Ollama fait référence à la pratique de regrouper plusieurs demandes entrantes et de les traiter comme une unité. Cela permet une utilisation plus efficace des ressources de calcul, particulièrement lorsqu’on utilise du matériel qui bénéficie des opérations parallèles (comme les GPU).
Lorsque plusieurs demandes pour le même modèle arrivent simultanément, Ollama peut les traiter ensemble en lot si la mémoire le permet. Cela augmente le débit et peut réduire la latence pour chaque demande, car le modèle peut utiliser des opérations matricielles optimisées sur le lot.
Le regroupement est particulièrement efficace lorsque les demandes sont similaires en taille et en complexité, car cela permet une meilleure utilisation du matériel.
L’exécution parallèle dans Ollama signifie traiter plusieurs demandes en même temps, soit pour le même modèle, soit pour des modèles différents, selon la mémoire disponible et la configuration.
Ollama prend en charge deux niveaux de parallélisme :
- Chargement de plusieurs modèles : Si suffisamment de mémoire est disponible, plusieurs modèles peuvent être chargés et servir des demandes simultanément.
- Demandes parallèles par modèle : Chaque modèle chargé peut traiter plusieurs demandes en parallèle, contrôlé par la configuration
OLLAMA_NUM_PARALLEL(par défaut 1 ou 4, selon la mémoire).
Lorsque les demandes dépassent la limite de parallélisme, elles sont mises en file d’attente (FIFO) jusqu’à OLLAMA_MAX_QUEUE.
En résumé
Ollama utilise à la fois le regroupement et l’exécution parallèle pour traiter efficacement plusieurs demandes. Le regroupement regroupe les demandes pour un traitement simultané, tandis que l’exécution parallèle permet à plusieurs demandes (ou modèles) de s’exécuter en parallèle. Les méthodes dépendent de la mémoire du système et sont configurables pour une performance optimale.
Pour plus de benchmarks, d’ajustements de concurrence et de conseils sur les performances, consultez notre LLM Performance: Benchmarks, Bottlenecks & Optimization hub.