llama_server
Compile llama.cpp (backend HIP/ROCm) et déploie le service llama-server GPU (:1234) sur gpu-01. Sert aussi les embeddings du RAG.
Ce que fait le rôle
- Clone + build llama.cpp (cmake HIP,
gfx1030) — build seulement si le binaire est absent.
Le commit est pinné (llama_server_commit) : sans pin, le clone tirait HEAD et un
make apply-gpu pouvait déclencher un rebuild (~15 min) + restart GPU non déterministe. Pour
monter de version : bumper le SHA dans defaults/main.yml, puis l'apply rebuild de façon voulue.
- Service systemd
llama-server : modèle GGUF depuis /mnt/models (NFS), :1234
- Embeddings activés (
--embeddings, pooling mean)
- Ouvre le port dans le firewall, désactive l'ancien service lm-studio
- Instance dédiée embeddings (optionnelle,
llama_embed_enabled) : service systemd
llama-embed servant un modèle d'embedding spécialisé (ex. nomic-embed-text) sur
:1238. Télécharge le GGUF depuis llama_embed_model_url si absent. Tourne en CPU
(llama_embed_n_gpu_layers: 0) : nomic est minuscule (137M) → ~100 ms déterministe, et
ne partage pas la RX 6700XT avec le chat :1234. Mettre sur GPU (99) provoquait
une latence bimodale (16 ms / 9-12 s) par contention → docs=0 du STT (cf.
admin/incidents-llm-gpu.md).
- Heartbeat embed (optionnel,
llama_embed_heartbeat_enabled, défaut true) : service
systemd llama-embed-heartbeat qui envoie un petit embed à :1238 toutes les
llama_embed_heartbeat_interval s → garde le slot d'embedding chaud. Sans ça, la 1ʳᵉ
requête après une pause part à froid (5-8 s) et dépasse le timeout du STT-server (4 s) →
recall mémoire vide et RAG documentaire raté (docs=0, cf. admin/ia/stt.md). Pendant
du llm-heartbeat (rôle litellm) côté chat. Logs : journalctl -u llama-embed-heartbeat.
Heartbeat embed — variables
| Variable |
Défaut |
llama_embed_heartbeat_enabled |
true (si llama_embed_enabled) |
llama_embed_heartbeat_interval |
20 (s entre deux pings) |
llama_embed_heartbeat_timeout |
15 (s max par ping) |
- Watchdog (optionnel,
llama_watchdog_enabled, défaut true) : service systemd
llama-watchdog qui sonde une vraie génération sur :1234 toutes les
llama_watchdog_interval s. Sur llama_watchdog_failures échecs consécutifs →
systemctl restart llama-server en local (tourne en root, pas de SSH). Répare
automatiquement le wedge ROCm où /health reste vert mais l'inférence est morte
(cf. admin/incidents-llm-gpu.md). Logs : journalctl -u llama-watchdog.
Watchdog — variables
| Variable |
Défaut |
llama_watchdog_enabled |
true |
llama_watchdog_port |
{{ llama_server_port }} (1234) |
llama_watchdog_model |
{{ llama_model_alias }} (qwen3-8b) |
llama_watchdog_interval |
20 (s entre deux sondes) |
llama_watchdog_timeout |
15 (s max par sonde) |
llama_watchdog_failures |
3 (échecs consécutifs avant restart) |
Complémentaire au llm-heartbeat du rôle litellm : le heartbeat empêche la
péremption par inactivité de la connexion LiteLLM↔llama-server ; le watchdog répare le
figeage du llama-server lui-même. Le watchdog gère le 503 "Loading model" post-restart
(rechargement VRAM) sans le compter comme échec.
Variables principales
| Variable |
Défaut |
Surcharge gpu-01 |
llama_server_port |
1234 |
— |
llama_model_path |
"" |
/mnt/models/bartowski/Qwen3-8B-GGUF/Qwen3-8B-Q4_K_M.gguf |
llama_model_alias |
"" |
qwen3-8b |
llama_ctx_size |
32768 |
32768 |
llama_n_gpu_layers |
99 |
— |
hsa_override_gfx_version |
10.3.0 |
— |
llama_embed_enabled |
false |
true |
llama_embed_port |
1238 |
— |
llama_embed_model_path |
"" |
/mnt/models/nomic-ai/nomic-embed-text-v1.5.f16.gguf |
llama_embed_model_url |
"" |
URL HuggingFace du GGUF nomic |
llama_embed_model_alias |
nomic-embed-text |
— |
llama_embed_n_gpu_layers |
0 (CPU — évite la contention GPU avec :1234) |
— |
Instances CPU retirées (2026-06-20)
Trois serveurs llama CPU manuels (hors Ansible) tournaient sur gpu-01 et ont été
supprimés (stop + disable + rm des units + ports firewall fermés) car inutilisés —
ils n'étaient même plus routés par LiteLLM (alias absents de /etc/litellm/config.yaml) :
| Service (supprimé) |
Port |
Modèle |
Ex-usage |
llama-server-system.service |
1236 |
Qwen3-1.7B CPU |
profil system |
llama-server-monitor.service |
1237 |
Qwen3-1.7B CPU |
profil monitor |
llama-server-dev.service |
1235 |
Qwen3-4B CPU |
profil dev |
Le rôle ne gère désormais que l'instance GPU (llama-server.service, :1234) et
l'embed CPU (llama-embed.service, :1238). Les profils Hermès system/monitor
n'ont plus de backend dédié — repointer leurs alias LiteLLM sur qwen3-8b (GPU) si on
veut les réactiver.
Caveats
- Rebuild forcé : supprimer le binaire (
/opt/llama.cpp/build/bin/llama-server) puis relancer le rôle
- Le modèle vient du NFS — voir caveat du rôle
nfs_client