Les blocs encadrés en vert sont les vérifications : c'est la preuve que
l'étape précédente a marché. Ne passez jamais à l'étape suivante sans l'avoir obtenue.
Le bouton copier place la commande dans votre presse-papiers sans le
$.
A.Système & préparation
A1. Se connecter au Pi
ssh romain@hermes-pi.localuname -m
nproc
free -haarch64 <- 64 bits obligatoire (jamais armv7l)
4
Mem: 16Gi (ou 8Gi, ou 4Gi)
A2. Mise à jour et outils de base
sudo apt update
sudo apt full-upgrade -y
sudo apt install -y git curl xz-utils lm-sensorsgit --version
curl --version | head -1
sensorsgit version 2.4x.x
curl 8.x.x (aarch64-...)
Package id 0: +48.0°C
A3. Disque, swap, température
findmnt /
df -h /
swapon --show
cat /sys/class/thermal/thermal_zone0/temp/ /dev/mapper/ubuntu--vg-ubuntu--lv ext4 <- SSD/NVMe attendu
... 48G 14G 32G 31% /
NAME TYPE SIZE USED PRIO
/swap.img file 4G 0B
52600 <- 52,6 °C. Au-delà de 80000 : bridage thermique
B.Ollama
B1. Installer
curl -fsSL https://ollama.com/install.sh | shollama --version
systemctl is-active ollama
systemctl is-enabled ollama
curl -s http://127.0.0.1:11434/api/tags
ss -ltn | grep 11434ollama version is 0.x.y
active
enabled
{"models":[]}
LISTEN 0 4096 127.0.0.1:11434 0.0.0.0:* <- 127.0.0.1 = jamais exposé au réseau
B2. Régler le contexte et le maintien en mémoire
sudo systemctl edit ollamaCollez dans le fichier ouvert par nano (puis Ctrl+O, Entrée, Ctrl+X) :
[Service]
Environment="OLLAMA_KEEP_ALIVE=24h"
Environment="OLLAMA_CONTEXT_LENGTH=16384"
Environment="OLLAMA_NUM_PARALLEL=1"
sudo systemctl daemon-reload
sudo systemctl restart ollamasystemctl show ollama -p Environment
curl -s http://127.0.0.1:11434/api/tags >/dev/null && echo "API OK"Environment=OLLAMA_KEEP_ALIVE=24h OLLAMA_CONTEXT_LENGTH=16384 OLLAMA_NUM_PARALLEL=1
API OK
B3. Précharger le modèle
curl -s http://127.0.0.1:11434/api/generate -d '{"model":"qwen3:4b","keep_alive":"24h"}' | head -c 200ollama psNAME SIZE PROCESSOR CONTEXT UNTIL
qwen3:4b 3.6 GB 100% CPU 16384 23 hours from now
C.Le modèle
C1. Télécharger
ollama pull qwen3:4b
ollama listollama show qwen3:4b | sed -n '/Capabilities/,$p' Capabilities
completion
tools <- LA ligne indispensable. Absente = le modèle ne peut que discuter.
C2. Mesurer le débit réel (la mesure qui compte)
ollama run qwen3:4b --verbose "Explique en trois phrases ce qu'est un ordinateur. Réponds en français."prompt eval rate: 28.03 tokens/s <- absorption du prompt
eval rate: 4.49 tokens/s <- votre débit de génération
Sortir d'Ollama : /bye
C3. Tester l'API compatible OpenAI
curl -s http://127.0.0.1:11434/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"qwen3:4b","messages":[{"role":"user","content":"Dis bonjour"}],"max_tokens":40}'{"id":"chatcmpl-...","object":"chat.completion","model":"qwen3:4b",
"choices":[{"message":{"role":"assistant","content":"Bonjour !..."}}]}
D.Hermes
D1. Installer
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-browser
source ~/.bashrcwhich hermes
hermes --version
hermes doctor/home/romain/.local/bin/hermes
Hermes Agent v0.xx.y
🩺 Hermes Doctor ... aucune ✗
D2. Brancher sur Ollama (3 voies, en choisir une)
Voie A — automatique :
ollama launch hermesVoie B — assistant Hermes : hermes setup →
Quick setup → More providers… → Custom endpoint →
URL http://127.0.0.1:11434/v1 → clé vide → confirmer le
modèle détecté.
Voie C — sans question :
hermes config set model.provider custom
hermes config set model.base_url http://127.0.0.1:11434/v1
hermes config set model.default qwen3:4bhermes config get model.provider
hermes config get model.base_url
hermes config get model.defaultcustom
http://127.0.0.1:11434/v1
qwen3:4b
D3. Élargir les délais (modèle lent oblige)
echo 'HERMES_API_TIMEOUT=1800' >> ~/.hermes/.envgrep -n HERMES_API_TIMEOUT "$(hermes config env-path)"
sed -E 's/=.*/=<masqué>/' "$(hermes config env-path)"12:HERMES_API_TIMEOUT=1800
OPENROUTER_API_KEY=<masqué> <- on vérifie la liste des variables sans jamais afficher les valeurs
D4. Première conversation
hermes chat -q "Réponds en une seule phrase, en français : quelle est la capitale de la Suisse ?"ollama ps
top -bn1 | head -10qwen3:4b 3.6 GB 100% CPU 16384 23 hours from now
4213 romain 391% 22.0 ollama runner ... <- le calcul se fait bien sur le Pi
D5. Alléger le préambule fixe
hermes prompt-size
hermes tools
hermes skills listSystem prompt total : 23,455 B
Tool schemas : 40,612 B (25 tools) <- doit baisser si vous désactivez des outils
E.Service permanent
E1. Ollama au démarrage (déjà fait par l'installateur)
systemctl is-enabled ollamaenabled
E2. Précharger le modèle au boot (optionnel)
sudo tee /usr/local/bin/ollama-warmup.sh > /dev/null <<'EOF'
#!/bin/bash
set -eu
MODEL="qwen3:4b"
curl -sf -X POST http://127.0.0.1:11434/api/generate \
-H 'Content-Type: application/json' \
-d "{\"model\":\"$MODEL\",\"keep_alive\":\"24h\"}" >/dev/null
echo "ollama: $MODEL prechauffe"
EOF
sudo chmod 755 /usr/local/bin/ollama-warmup.shsudo tee /etc/systemd/system/ollama-warmup.service > /dev/null <<'EOF'
[Unit]
Description=Precharge le modele Ollama utilise par Hermes
After=ollama.service
Requires=ollama.service
[Service]
Type=oneshot
RemainAfterExit=yes
User=romain
ExecStart=/usr/local/bin/ollama-warmup.sh
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now ollama-warmupsystemctl is-enabled ollama-warmup
systemctl is-active ollama-warmupenabled
active
E3. Hermes (gateway) en service
hermes gateway setup
sudo loginctl enable-linger $USER
hermes gateway install
hermes gateway startVariante service système (démarre au boot sans dépendre de votre session) :
sudo hermes gateway install --systemsystemctl --user is-enabled hermes-gateway
systemctl --user is-active hermes-gateway
hermes gateway status
loginctl show-user $USER -p Lingerenabled
active
Gateway: running (profile: default)
Linger=yes
E4. Le test qui compte : redémarrer
sudo rebootsystemctl is-active ollama
ollama ps
systemctl --user is-active hermes-gateway
hermes --versionactive
qwen3:4b 3.6 GB 100% CPU 16384 23 hours from now
active
Hermes Agent v0.xx.y
F.Diagnostic express
F1. Ollama ne répond pas
systemctl status ollama --no-pager | head -12
journalctl -u ollama -n 40 --no-pager
sudo systemctl restart ollama
curl -s http://127.0.0.1:11434/api/tags{"models":[...]} <- l'API répond de nouveau
F2. hermes: command not found
source ~/.bashrc
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
which hermes/home/romain/.local/bin/hermes
F3. « Ça ne répond pas » — distinguer travail et panne
ollama ps
top -bn1 | head -10
sensors | grep -i -E "package|temp"100% CPU + 300-400 % de CPU sur « ollama runner » = ça travaille, attendez (prefill)
Au-delà de 80 °C : la machine bride, ventilez avant d'optimiser quoi que ce soit
F4. Mémoire saturée / swap utilisé
free -h
ollama ps
journalctl -u ollama -n 40 --no-pager | grep -i -E "memory|oom|error"Swap used > 0 pendant une génération = le modèle est trop gros
available < 1 Gi = même conclusion
Corrections : modèle plus petit, puis OLLAMA_CONTEXT_LENGTH à 8192
F5. Hermes n'exécute pas ses outils
ollama show qwen3:4b | sed -n '/Capabilities/,$p' Capabilities
tools <- présente : réduisez le nombre d'outils (hermes tools) et reformulez
absente : changez de modèle (qwen3:*, llama3.2:1b/3b, gemma4:*)
F6. Contexte trop petit / conversation qui casse
ollama ps
hermes prompt-sizeCONTEXT (ollama ps) doit être bien supérieur au préambule fixe de Hermes
Si les deux valeurs sont proches : /compress dans la session, ou montez le contexte à 32768 si la RAM suit
F7. Lenteur inexpliquée (le réflexe matériel)
vcgencmd get_throttled
cat /sys/class/thermal/thermal_zone0/temp
dmesg | grep -i -E "under-voltage|throttl" | tail -5throttled=0x0 <- tout autre valeur = alimentation insuffisante ou surchauffe
52600 <- 52,6 °C
G.Mises à jour
G1. Hermes
hermes update --check
hermes update
hermes doctor
hermes --version✅ Hermes Agent updated successfully!
hermes doctor : aucune ✗
hermes --version : numéro à jour
G2. Ollama et les modèles
curl -fsSL https://ollama.com/install.sh | sh
ollama --version
ollama pull qwen3:4b
ollama listollama version is 0.x.y (plus récent)
ollama list : la date de MODIFIED du modèle a bougé
G3. Ubuntu
sudo apt update
sudo apt full-upgrade -y
sudo rebootsystemctl is-active ollama
systemctl --user is-active hermes-gatewayactive
active