Héberger une IA sur Raspberry Pi

On peut aujourd'hui faire tourner un modèle de langage directement sur un Raspberry Pi, sans passer par un service cloud. Dans ce tutoriel, nous allons installer Ollama, un outil qui permet d'exécuter des LLM en local, puis configurer une interface web de chat et une API REST pour interroger l'IA depuis le réseau local.
À la fin, le Raspberry Pi pourra répondre à vos questions depuis le terminal, un navigateur ou un script Python.

Héberger une IA (LLM) sur Raspberry Pi - Raspberry Lab

Prérequis

Pour réaliser ce tutoriel, il vous faudra :

  • Un Raspberry Pi 5 (8 Go recommandé) ou Raspberry Pi 4 (8 Go minimum)
  • Une carte microSD de 32 Go minimum (64 Go ou SSD NVMe conseillé)
  • Une alimentation officielle (27 W pour le Pi 5, 15 W pour le Pi 4)
  • Un dissipateur thermique ou ventilateur actif
  • Raspberry Pi OS 64 bits installé et configuré
  • Une connexion Internet et un accès SSH au Raspberry Pi

Si le Raspberry Pi n'est pas encore prêt, commencez par nos tutoriels d'installation de Raspberry Pi OS et de connexion SSH.

Quel matériel choisir ?

Un modèle de langage consomme beaucoup de mémoire vive. Voici les configurations que nous avons testées :

Configuration Verdict Détail
Raspberry Pi 5 (8 Go) Idéal Modèles jusqu'à 3B (phi3:mini, gemma2:2b). Réponses en 5 à 15 tokens/s.
Raspberry Pi 5 (4 Go) Correct Petits modèles uniquement (llama3.2:1b, smollm2).
Raspberry Pi 4 (8 Go) Fonctionnel Petits modèles, performances inférieures au Pi 5.
Raspberry Pi 4 (4 Go ou moins) Limité Modèles très légers seulement (tinyllama, smollm2:360m).
Si vous avez un Pi 5, un SSD NVMe (via le connecteur PCIe) vaut mieux qu'une carte SD : les modèles pèsent plusieurs gigaoctets et le temps de chargement dépend surtout de la vitesse de lecture.

Mise à jour du système

Connectez-vous en SSH au Raspberry Pi, puis mettez à jour les paquets :

sudo apt update && sudo apt full-upgrade -y

Configurer le swap

Information

Pourquoi activer le swap ?

Les LLM chargent le modèle en RAM. Sur un Pi avec 4 ou 8 Go, le swap (mémoire virtuelle sur disque) évite les plantages quand la RAM est saturée. Attention : le swap sur carte SD l'usure plus vite. Préférez un SSD si possible.

Raspberry Pi OS gère le swap via dphys-swapfile. Augmentons sa taille à 4 Go :

sudo dphys-swapfile swapoff
sudo nano /etc/dphys-swapfile

Modifiez la ligne CONF_SWAPSIZE :

CONF_SWAPSIZE=4096

Enregistrez (Ctrl+X, Y, Entrée), puis réactivez le swap :

sudo dphys-swapfile setup
sudo dphys-swapfile swapon

Installation d'Ollama

Ollama permet d'exécuter des LLM sur Linux ARM64. Il télécharge les modèles, lance l'inférence CPU et expose une API compatible OpenAI.

Installez Ollama avec la commande suivante :

curl -fsSL https://ollama.com/install.sh | sh

Le script télécharge le binaire, crée un service systemd et démarre Ollama. Vérifiez que le service tourne :

sudo systemctl status ollama

Vous devez voir Active: active (running). Ollama écoute par défaut sur le port 11434.

Télécharger un modèle de langage

Choisissez un modèle adapté à la RAM de votre Raspberry Pi :

Modèle Taille RAM min. Usage
smollm2:360m ~250 Mo 4 Go+ Très rapide, réponses basiques
llama3.2:1b ~1,3 Go 4 Go+ Bon compromis vitesse/qualité
gemma2:2b ~1,6 Go 8 Go Bonnes réponses, un peu plus lent
phi3:mini ~2,3 Go 8 Go Meilleure qualité, plus lent
tinyllama ~650 Mo 4 Go+ Léger, pratique pour un premier test

Téléchargez le modèle de votre choix. Sur un Pi 5 8 Go, commencez par llama3.2:1b :

ollama pull llama3.2:1b

Le téléchargement peut prendre plusieurs minutes selon votre connexion. Les modèles sont stockés dans ~/.ollama/models/.

Tester l'IA en ligne de commande

Lancez une session de chat interactive :

ollama run llama3.2:1b

Posez une question, par exemple : Explique-moi ce qu'est un GPIO sur un Raspberry Pi. Pour quitter, tapez /bye.

Vous pouvez aussi envoyer une seule question sans mode interactif :

ollama run llama3.2:1b "Quelle est la capitale de la France ?"

Utiliser l'API REST

Ollama expose une API HTTP sur http://localhost:11434. Vous pouvez l'utiliser dans vos scripts Python, Node.js ou tout autre langage.

Exemple avec curl

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2:1b",
  "prompt": "Écris un haïku sur le Raspberry Pi",
  "stream": false
}'

Exemple avec Python

import requests

response = requests.post("http://localhost:11434/api/generate", json={
    "model": "llama3.2:1b",
    "prompt": "Donne-moi une recette de crêpes en 3 étapes",
    "stream": False
})
print(response.json()["response"])

Si besoin, installez la bibliothèque requests :

pip install requests --break-system-packages

Pour lister les modèles installés :

ollama list

Interface web de chat (Open WebUI)

Pour discuter avec l'IA depuis un navigateur, installez Open WebUI via Docker.

Installer Docker

Si Docker n'est pas encore installé sur le Raspberry Pi :

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

Déconnectez-vous puis reconnectez-vous en SSH pour que le groupe docker soit pris en compte.

Lancez Open WebUI :

docker run -d -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart always \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/open-webui/open-webui:main

Ouvrez un navigateur et accédez à :

http://ADRESSE_IP_DU_PI:3000

Remplacez ADRESSE_IP_DU_PI par l'IP du Raspberry (hostname -I). Créez un compte administrateur lors de la première visite, puis sélectionnez le modèle llama3.2:1b dans le menu.

Démarrage automatique

Ollama est déjà configuré comme service systemd et redémarre avec le Pi. Vérifiez :

sudo systemctl enable ollama

Le conteneur Open WebUI est lancé avec --restart always, il redémarre donc aussi avec le Pi.

Accéder à l'IA depuis le réseau local

Par défaut, Ollama n'écoute que sur 127.0.0.1. Pour y accéder depuis un autre appareil du réseau (PC, smartphone), ajoutez cette variable d'environnement :

sudo systemctl edit ollama

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"

sudo systemctl daemon-reload
sudo systemctl restart ollama

N'exposez pas Ollama directement sur Internet sans pare-feu. Limitez l'accès à votre réseau local.

Optimiser les performances

  • Refroidissement : un Pi qui thermal-throttle perd en vitesse. Surveillez avec vcgencmd measure_temp.
  • Modèle adapté : un modèle trop gros pour votre RAM provoque du swap et ralentit tout. Commencez petit.
  • SSD NVMe : accélère le chargement des modèles par rapport à une carte SD.
  • Une requête à la fois : le Pi ne gère pas bien les requêtes parallèles. Attendez la fin d'une réponse avant d'en envoyer une autre.
  • Quantification : Ollama utilise des modèles quantifiés (Q4_K_M) par défaut, ce qui réduit la RAM nécessaire.

Limites à connaître

Un Raspberry Pi n'est pas un serveur GPU dédié. Gardez en tête les points suivants :

  • Pas de génération d'images (Stable Diffusion demande bien plus de ressources).
  • Les modèles au-delà de 3B paramètres sont trop lents ou ne tiennent pas en RAM.
  • Pas de fine-tuning (entraînement), seulement de l'inférence.
  • Les réponses longues prennent du temps (5 à 30 secondes selon le modèle).
  • La qualité reste inférieure aux modèles cloud (GPT-4, Claude), mais suffisante pour de l'assistance locale, de la domotique vocale ou des scripts.

Idées de projets

  • Assistant domotique : interroger l'IA pour contrôler des GPIO ou des relais via un script Python.
  • Chat privé : poser des questions sans envoyer de données à un cloud tiers.
  • Génération de code : demander des scripts Python pour vos projets Raspberry Pi.
  • Résumé de texte : résumer des logs ou des fichiers localement.
  • API pour vos projets : intégrer l'IA dans un serveur Flask (comme dans nos projets domotiques).

Le Raspberry Pi peut maintenant exécuter un modèle de langage en local : via le terminal (ollama run), via une API REST pour vos scripts, ou via une interface web accessible sur le réseau.
Testez d'autres modèles avec ollama pull pour trouver celui qui convient le mieux à votre configuration. La section commentaires est ouverte si vous avez des questions !

Ce tutoriel vous a plu ?

starstarstarstarstar

5.0 /5 1 vote

Commentaires

Commenter

Votre adresse mail ne sera pas visible sur le site.