Introduction

Les Large Language Models (LLM) ont révolutionné le domaine de l’intelligence artificielle, il existe désormais tout un tas de modèles opensource pouvant être déployés localement. C’est ce que nous allons voir dans cet article, nous allons déployer un LLM dans un cluster Kubernetes local en utilisant Minikube, ce qui permet de tester différents modèles sans coûts cloud et faire un premier pas dans l’IA.

Pré-requis

Avant de commencer, assurez-vous d’avoir les éléments suivants installés :

  • Minikube
  • kubectl
  • Docker
  • Helm
  • 16 Go de RAM minimum
  • 20 Go d’espace disque disponible
minikube version
kubectl version --client
docker --version

Étape 1 : Configuration de Minikube pour les LLM

Les LLM nécessitent des ressources importantes. Nous devons configurer Minikube avec suffisamment de mémoire et de CPU.

Démarrage de Minikube avec des ressources adaptées

# Démarrer Minikube avec 16 Go de RAM et 8 CPU
minikube start --memory=8192 --cpus=4 --disk-size=20g

# Vérifier le statut
minikube status

# Vérifier les ressources allouées
kubectl get nodes
kubectl describe node minikube | grep -A 3 "Allocatable"

Étape 2 : Choix du modèle et de l’image container

Plusieurs options s’offrent à vous pour déployer un LLM :

Option 1 : vLLM

vLLM est un framework optimisé pour le déploiement et le serving de LLM, développé par les créateurs de Ray. Il offre :

  • PagedAttention : Optimisation mémoire pour gérer des séquences longues
  • Support multi-GPU
  • Compatibilité avec HuggingFace
  • API OpenAI compatible

Option 2 : Ollama

Ollama est une solution légère et facile à utiliser pour exécuter des LLM localement. C’est l’option la plus simple pour commencer avec Minikube.

Pour cet article, nous utiliserons Ollama pour sa simplicité et son efficacité.

Étape 3 : Déploiement d’Ollama dans Minikube

Les ressources nécessaires

  • namespace : pour y déployer toutes les ressources liées à ce projet
  • pvc : pour le stockage du modèle
  • deployment: pour servir l’application
  • service: pour pouvoir exposer l’application

Helm chart & installation

Pour faciliter le déploiement j’ai écris un chart Helm qui configure toutes ces ressources. Le repository se trouve ici.

Clonez le repository puis faites :

helm install ollama . 

#Vérifier que les pods sont Running
kubectl get pods -n ollama

Les pods peuvent mettre un certain temps à démarrer car il faut télécharger le modèle ~1.3Go, j’utilise pour cela un initContainer qui va le télécharger et le stocker dans un volume que le pod pourra ensuite récupérer.

Étape 4 : Utilisation en ligne de commande

La chart déploie l’application et l’expose sur le port 11434.

Pour appeler le modèle :

kubectl -n ollama port-forward svc/ollama 11434:11434

#puis
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2.1b",
  "prompt": "Explique Kubernetes en une phrase.",
  "stream": false
}'

Vous devriez avoir un résultat de ce type : Ollama curl response

Étape 5 : Utilisation en web UI

J’ai volontairement omis de mentionner que la chart déploie 2 ressources supplémentaires : un déploiement et un service “open-webui” pour exposer l’API d’Ollama à travers une interface web. Pour l’utiliser, rien de plus simple :

kubectl -n ollama port-forward svc/open-webui 8080:8080

Ouvrez votre navigateur.

Vous devriez voir une interface de ce type :

ollama Web UI

Cliquez sur démarrer, après un process de login vous devriez obtenir une page sensiblement ressemblante à celle de ChatGPT :

Ollama WebUI Prompt

Enfin, écrivez votre prompt et constatez le résultat :

Ollama WebUI prompt response

Conclusion

Déployer un LLM dans Kubernetes avec Minikube se fait sans trop de difficultés, un modèle est finalement exposé via une API comme le serait un webservice classique. Il faut garder en tête que les modèles sont lourds et nécessitent beaucoup de ressources pour les faire tourner.

Ressources supplémentaires