Aller au contenu principal

ADR-0168 : Deux moteurs d'inférence locale gérés, vLLM et Ollama, derrière LiteLLM

Contexte​

Navin Enterprise doit héberger des modèles sur l'infrastructure du client, sur des hôtes CPU comme sur des hôtes GPU, en bac à sable comme en cluster. Trois moteurs ont été comparés : vLLM (Apache-2.0), Ollama (MIT) et LM Studio (démon llmster). Jusqu'ici, vLLM et Ollama n'étaient que des points d'accès existants déclarés comme fournisseurs LiteLLM ; le Manager ne les installait pas.

Décision​

Le Manager installe, configure, supervise et administre uniquement deux moteurs, tous deux décrits dans son catalogue : navin-manager/catalog/services/vllm.yaml et navin-manager/catalog/services/ollama.yaml.

  • vLLM est le moteur principal de production : un modèle par installation, mode single (bac à sable), replicated (au moins deux instances indépendantes sur des hôtes distincts, haute disponibilité) et distributed (un gros modèle réparti entre hôtes GPU avec Ray, parallélisme de pipeline). Le paramètre accelerator choisit un hôte GPU NVIDIA (image CUDA, GPU donnés par CDI nvidia.com/gpu, parallélisme tensoriel) ou un hôte CPU (image CPU x86).
  • Ollama est le moteur complémentaire des modèles légers et quantifiés : modes single et replicated, hôte CPU ou GPU, commandes de téléchargement, d'import GGUF hors ligne, de liste et de suppression exécutées sur chaque instance.
  • Les poids sont hébergés sur l'hôte (/var/lib/navin/vllm/models, /var/lib/navin/ollama/models) ; vLLM démarre hors ligne (HF_HUB_OFFLINE=1) par défaut.
  • Les applications et les agents n'appellent jamais un moteur directement : les liaisons facultatives vllm et ollama du service LiteLLM génèrent une entrée hosted_vllm ou ollama_chat par instance, sous le même nom de modèle, pour la répartition, les nouvelles tentatives, le repli et les quotas. La clé d'API de vLLM reste dans l'environnement du proxy.
  • Sur Kubernetes, le chart deploy/helm/enterprise-ai sert vLLM (un Deployment par modèle, GPU ou CPU, répliques sur des nœuds distincts, PodDisruptionBudget) et Ollama (StatefulSet, un stockage de modèles par réplique), joignables uniquement depuis LiteLLM et le Control Plane.
  • LM Studio est exclu : sa licence n'est pas une licence open source et restreint la redistribution et le service à des tiers.

Conséquences​

Répartir un modèle sur plusieurs GPU n'est pas de la haute disponibilité : seul le mode répliqué (ou plusieurs répliques Kubernetes) la fournit. LiteLLM ne garantit pas l'isolation mémoire GPU entre locataires : un locataire sensible reçoit ses propres instances et ses GPU dédiés (paramètre gpu_devices).

Preuves​

navin-manager/server/tests/test_catalog_inference.py, navin-manager/catalog/templates/vllm/start.sh.j2, navin-manager/catalog/templates/litellm/config.yaml.j2, deploy/helm/enterprise-ai/templates/ollama/statefulset.yaml.