freedzhost.cloud

fh-probes : mesurer un nœud sans devenir la cause de ce qu'on mesure

Niveau IntermédiaireTemps estimé 20 minUn mot inconnu ? Lexique

Dernière révision :

Toute supervision finit par se faire remarquer : un nvidia-smi par seconde, des docker inspect en boucle, et voilà l'outil de mesure en haut de la liste des consommateurs. fh-probes part du principe inverse : la mesure ne doit jamais apparaître dans ce qu'elle mesure. Une ligne JSON par seconde, zéro sous-processus, et un aveu quand un tour est en retard au lieu de le rattraper en rafale.

Ce que vous y gagnez. La vérité de la machine, seconde par seconde, dans un simple fichier .jsonl — et avec fh-history, le croisement qui change tout : « ce run a échoué pendant que la pression mémoire montait à 91 et que le prefill tombait à 20 tokens/s ». Python 3.10+, bibliothèque standard uniquement, service systemd utilisateur fourni (priorité basse, plafond mémoire 128 Mio).

1. Zéro sous-processus, c'est le point entier

Les GPU sont lus via NVML (libnvidia-ml.so.1 par ctypes), le reste vient de /proc et de deux requêtes HTTP locales (/metrics et /slots, au format llama.cpp). Pas de nvidia-smi, pas de docker inspect, pas de ssh : lancer un processus coûte plus cher que la mesure elle-même. Sans GPU ou sans pilote, ça marche quand même — le champ gpu est simplement vide.

2. Installation

git clone https://github.com/bengua/fh-probes
cd fh-probes
mkdir -p ~/.local/bin ~/.config/systemd/user
cp fh-probes fh-history ~/.local/bin/
cp fh-probes.service ~/.config/systemd/user/

3. Premier lancement : trois tours, au premier plan

FH_PROBES_ROUNDS=3 ~/.local/bin/fh-probes
tail -1 ~/.local/state/fh-probes/$(date +%F).jsonl

Chaque ligne est un objet JSON complet : GPU (utilisation, mémoire, température), RAM, pression PSI, compteurs des serveurs de modèles. Les compteurs cumulatifs sont stockés bruts — la dérivée se calcule à la lecture, donc un redémarrage de serveur ne produit pas un pic mensonger.

4. En service continu

systemctl --user daemon-reload
systemctl --user enable --now fh-probes

L'unité fournie tourne avec priorité CPU/IO basse et un plafond mémoire de 128 Mio : si la machine souffre, la sonde s'efface d'abord. Une seule instance à la fois — une seconde copie sort aussitôt, proprement.

5. fh-history : croiser la machine avec vos runs

La sonde seule dit ce que la machine faisait. fh-history pose vos exécutions (runs d'agents, jobs, benchs) sur le même axe de temps, et garde les extrêmes, pas les moyennes — un run qui passe dans un creux de pression et un run qui meurt dans un pic ne racontent pas la même histoire. Il signale aussi quand deux runs se sont chevauchés : leurs chiffres machine sont alors communs, et il faut le savoir avant de conclure.

Pièges

Le champ skipped n'est pas un bug : un tour en retard est avoué, jamais rattrapé en rafale. Une rafale de rattrapage fausserait précisément les mesures de pression qu'on vient chercher.

Un fichier par jour dans ~/.local/state/fh-probes/ — pensez à la rotation si la machine mesure pendant des mois (les lignes sont petites, mais les jours s'additionnent).

Utile ? Dites-nous ce qu'il faut mesurer ensuite.