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.
Gestion des demandes simultanées
-
Traitement parallèle : Ollama prend en charge le traitement simultané 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é. -
Regroupement (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 renvoyées en même temps. Le serveur ne fait pas intentionnellement 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_PARALLEL
demandes 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 pouvant ê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’au chargement du modèle.
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 dans un lot, et les deux utilisateurs recevront les réponses en parallèle. 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 se termine.
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 (regroupées) |
Deux demandes, même modèle, parallélisme=1 | Une demande traitée, la seconde mise en file d’attente jusqu’à la fin de la première |
Deux demandes, modèles différents, mémoire suffisante | Les deux modèles chargés, 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 le parallélisme 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 (premier entré, premier sorti) lorsque la mémoire ne peut pas ê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 afin de libérer des ressources pour les demandes en file d’attente.
- Le nombre de modèles chargés en parallèle est limité par
OLLAMA_MAX_LOADED_MODELS
(par défaut : 3×compte 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é de la mémoire.
- Pour l’inférence GPU, une allocation complète de VRAM par modèle est requise – les chargements partiels ne sont pas pris en charge.
Scénarios de défaillance
Épuisement critique de la mémoire : Lorsque même les demandes en file d’attente dépassent les ressources disponibles, Ollama peut :
- Utiliser le disque (ce qui réduit gravement les performances)
- Retourner des erreurs « mémoire insuffisante »
- Dans les cas extrêmes, faire crasher l’instance du modèle
Paramètre de configuration | Objectif | Valeur par défaut |
---|---|---|
OLLAMA_MAX_QUEUE | Nombre maximum de demandes en file d’attente | 512 |
OLLAMA_NUM_PARALLEL | Demandes parallèles par modèle chargé | 4 (ou 1 si limité) |
OLLAMA_MAX_LOADED_MODELS | Nombre maximum de modèles chargés en parallèle | 3×compte GPU ou 3 |
Les administrateurs doivent surveiller l’utilisation de la mémoire et ajuster ces paramètres en fonction des 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 lors 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
- Mémoire : 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 les coûts en 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 courants résidents en mémoire
Surveillance et dépannage
- Utilisez
nvidia-smi
(GPU) ethtop
(CPU/RAM) pour identifier les goulets d’étranglement - Pour les erreurs de mémoire :
- Mise à niveau vers des modèles quantifiés
- Réduction des demandes simultanées
- Augmentation de l’espace d’échange
Exemple de workflow d’optimisation :
# Utiliser un modèle quantifié avec accélération GPU
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048
# Limiter 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, ce qui est particulièrement bénéfique lors de l’exécution de plusieurs modèles ou lors du traitement de volumes importants de demandes.
Ollama : Regroupement des demandes vs exécution parallèle
Le regroupement (batching) dans Ollama désigne 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 un matériel qui bénéficie des opérations parallélisées (comme les GPU).
Lorsque plusieurs demandes pour le même modèle arrivent en même temps, Ollama peut les traiter ensemble dans un 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 le traitement simultané de plusieurs demandes, 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 deux méthodes dépendent de la mémoire système et sont configurables pour une performance optimale.
Liens utiles
- Feuille de rappel Ollama
- Déplacer les modèles Ollama vers un autre disque ou dossier
- Comment Ollama utilise les performances et les cœurs efficaces des processeurs Intel
- Espace Ollama
- Auto-hébergement de Perplexica avec Ollama
- Test de Deepseek-r1 sur Ollama
- Comment Ollama gère les demandes parallèles
- Test de Deepseek-r1 sur Ollama
- Feuille de rappel Python
- Espace Python
- Réordonnancement de documents textuels avec Ollama et modèle d’embedding Qwen3 - en Go