feat(llama_server): watchdog auto-réparation du wedge ROCm

Service systemd local sur gpu-01 qui sonde une vraie génération sur :1234
(pas juste /health, qui ment quand le slot d'inférence est figé). Sur N
échecs consécutifs → systemctl restart llama-server en local (root, sans
SSH/sudo distant). Gère le 503 "Loading model" post-restart sans le compter
comme échec.

Complète le llm-heartbeat (rôle litellm) : le heartbeat empêche la péremption
par inactivité de la connexion ; le watchdog répare le figeage du serveur lui-même.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
alkatrazz 2026-06-19 20:44:25 +02:00
parent 6e6dd45ac5
commit 0cb886acf7
7 changed files with 157 additions and 5 deletions

View file

@ -144,9 +144,27 @@ systemctl status llm-heartbeat ; journalctl -u llm-heartbeat -f # v
⚠️ Le heartbeat appelle `hermes-default` en continu → si on bascule cet alias sur **Claude**
(API facturée), mettre `llm_heartbeat_enabled: false`.
### Reste à faire (durci, mais pas zéro-risque)
### Fix racine #2 — watchdog gpu-01 (déployé)
Le heartbeat empêche la *péremption par inactivité*. Si `llama-server` **se fige** carrément
(wedge ROCm), le heartbeat le **détecte** (échecs loggués) mais ne le **répare pas** encore.
Évolution possible : sur N échecs consécutifs du heartbeat → restart auto de `llama-server`
**et** `litellm` (watchdog actif). Pour l'instant : détection + alerte manuelle.
Le heartbeat empêche la *péremption par inactivité*, mais si `llama-server` **se fige**
carrément (wedge ROCm), il le **détecte** sans le **réparer**. C'est désormais couvert par le
`llama-watchdog` (rôle `llama_server`) : un service systemd **local sur gpu-01** qui sonde une
**vraie génération** sur `:1234` toutes les `llama_watchdog_interval` s (défaut 20 s,
`max_tokens:1`, `/no_think`). Sur `llama_watchdog_failures` échecs consécutifs (défaut 3) →
`systemctl restart llama-server` **en local** (tourne en root, ni SSH ni sudo distant), puis
cooldown jusqu'à ce que la génération remarche (gère le `503 "Loading model"` du rechargement
VRAM sans le compter comme échec).
```bash
ansible-playbook -i inventory.yml playbooks/gpu-01.yml --tags llama_server # déploie le watchdog
systemctl status llama-watchdog ; journalctl -u llama-watchdog -f # vérifier
```
Pourquoi sur gpu-01 (et pas piloté depuis storage-01 via le heartbeat) : le restart est
**local** → pas de SSH/sudo inter-hôtes, répare même si LiteLLM ou le réseau cluster est en
vrac, et sonde au plus près du serveur figé.
**Défense en profondeur (3 couches)** :
1. `llm-heartbeat` (storage-01, rôle `litellm`) — garde la connexion chaude (anti-péremption).
2. `request_timeout: 20` + `num_retries: 2` (LiteLLM) + retry STT-server — bornent le blip.
3. `llama-watchdog` (gpu-01, rôle `llama_server`) — répare le wedge ROCm à la source.