You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Ledger de reservation GPU + planification hebdomadaire des trainings (ai-01 tenancier) #16737
« Oui on ouvre, et on laisse les agents décider en fonction de ce dont ils disposent. Les GPU devraient être gérées via le ledger de réservation que tu avais conçu et que je ne crois pas que tu utilises. On devrait avoir une gestion planifiée hebdomadaire de toutes les expériences et trainings qui vont être réalisés, et tu devrais en être le tenancier, chaque worker se chargeant des exécutions de sa machine en claimant les issues correspondantes. »
Code : scripts/coordination/ ne contient que README.md et debt_ledger.py. Aucun hit pour gpu_ledger, gpu_reservation, reserve_gpu, gpu_lease, training_slot, gpu_claim. Le seul mécanisme GPU du dépôt est scripts/genai-stack/commands/gpu.py — un verrou de clocks nvidia mono-machine (undervolt lock), pas un ledger de flotte.
Doc : docs/reference/cluster-agents.md porte la topologie (3x4090 ai-01, 3080+eGPU3090 po-2023) et une politique (« GPU 2 occupée 24/7 », CUDA_VISIBLE_DEVICES=2) — aucun mécanisme de réservation.
Il n'a donc jamais été écrit. Ce qui existe est une politique tenue de tête, ce qui explique exactement le symptôme observé : elle ne se planifie pas, elle ne s'audite pas, et une lane CPU ne peut pas savoir ce qui est libre.
Ce qui est demandé
1. Le ledger de réservation GPU — extension bornée de debt_ledger.py
L'organe existe déjà sur main (#16574) et son architecture est à dicts par kind. Ajouter un kind gpu-reservation demande : une constante, 5 entrées de dict (LEDGERS, LEDGER_WORKSPACES, ENTITY_FIELDS, LEDGER_FIELD_SPECS, TERMINAL_VALUES) et ses FieldSpec. Pas de refonte. Les garde-fous génériques (UTC explicite, actor/evidence/confidence obligatoires, refus des clés inconnues, refus d'écrire dans le repo ou sous $ROOSYNC_SHARED_PATH) s'appliquent tels quels.
Ce n'est pas un verrou dur. C'est un registre partagé qui rend visible qui occupe quoi — la discipline reste celle du claim, comme pour les lanes.
2. La planification hebdomadaire, dont ai-01 est le tenancier
Une passe hebdomadaire qui inscrit les expériences et trainings prévus, une issue par exécution, chaque worker claimant celles de sa machine. ai-01 tient le registre et le restitue ; il n'exécute pas à la place des lanes.
Le corollaire est ce que le mandat vise vraiment : une lane CPU qui ne peut pas prendre un grain training ne doit plus le découvrir en le tirant — le plan dit d'avance ce qui tourne où.
3. L'ouverture de l'accès
Les grains à gate de capacité cessent d'être réservés à la machine qui porte le matériel. Un worker sans GPU peut porter la préparation (dataset, config, protocole de validation) d'un training dont l'exécution est claimée par une lane équipée. C'est à l'agent de juger s'il peut prendre le grain, sur ce dont il dispose — pas à une table de routage de le décider pour lui.
Ce qui N'est PAS dans cette issue
La vision n'y est pas, et c'est délibéré : le mandat user la disjoint explicitement du GPU. Elle ne dépend pas de la machine mais du modèle qui anime la lane, et elle est traitée séparément (correction de .claude/rules/model-delegation.md, dont la section de routage visuel est fausse sur ce point).
Acceptance
debt_ledger.py déclare un kind gpu-reservation avec ses FieldSpec, tests inclus
Un dashboard dédié porte le ledger (LEDGER_WORKSPACES)
Une passe hebdomadaire ai-01 inscrit les exécutions prévues, une issue par exécution
docs/reference/cluster-agents.md renvoie au ledger au lieu de porter la politique de tête
Une lane CPU peut lire l'état d'occupation sans se connecter à la machine
Comment cette issue se réfute
Si le ledger existe déjà quelque part que je n'ai pas sondé — un post PROPOSAL sur un dashboard RooSync, une conversation inter-machines — le citer ici ferme l'issue en ramenant l'acquis plutôt qu'en le réécrivant.
Mandat user (2026-09-18)
Constat — le ledger n'existe pas
Recherche exhaustive au
f65e72d50f(code, issues, PRs,docs/, mémoires locales ai-01) :scripts/coordination/ne contient queREADME.mdetdebt_ledger.py. Aucun hit pourgpu_ledger,gpu_reservation,reserve_gpu,gpu_lease,training_slot,gpu_claim. Le seul mécanisme GPU du dépôt estscripts/genai-stack/commands/gpu.py— un verrou de clocks nvidia mono-machine (undervolt lock), pas un ledger de flotte.issue-debt/pr-actions, aucune mention GPU.docs/reference/cluster-agents.mdporte la topologie (3x4090 ai-01, 3080+eGPU3090 po-2023) et une politique (« GPU 2 occupée 24/7 »,CUDA_VISIBLE_DEVICES=2) — aucun mécanisme de réservation.Il n'a donc jamais été écrit. Ce qui existe est une politique tenue de tête, ce qui explique exactement le symptôme observé : elle ne se planifie pas, elle ne s'audite pas, et une lane CPU ne peut pas savoir ce qui est libre.
Ce qui est demandé
1. Le ledger de réservation GPU — extension bornée de
debt_ledger.pyL'organe existe déjà sur
main(#16574) et son architecture est à dicts par kind. Ajouter un kindgpu-reservationdemande : une constante, 5 entrées de dict (LEDGERS,LEDGER_WORKSPACES,ENTITY_FIELDS,LEDGER_FIELD_SPECS,TERMINAL_VALUES) et sesFieldSpec. Pas de refonte. Les garde-fous génériques (UTC explicite,actor/evidence/confidenceobligatoires, refus des clés inconnues, refus d'écrire dans le repo ou sous$ROOSYNC_SHARED_PATH) s'appliquent tels quels.Entité proposée :
(machine, gpu_index). Champs :holder(lane),workload,started_at,expected_end,issue,state(held/released/stale).Ce n'est pas un verrou dur. C'est un registre partagé qui rend visible qui occupe quoi — la discipline reste celle du claim, comme pour les lanes.
2. La planification hebdomadaire, dont ai-01 est le tenancier
Une passe hebdomadaire qui inscrit les expériences et trainings prévus, une issue par exécution, chaque worker claimant celles de sa machine. ai-01 tient le registre et le restitue ; il n'exécute pas à la place des lanes.
Le corollaire est ce que le mandat vise vraiment : une lane CPU qui ne peut pas prendre un grain training ne doit plus le découvrir en le tirant — le plan dit d'avance ce qui tourne où.
3. L'ouverture de l'accès
Les grains à gate de capacité cessent d'être réservés à la machine qui porte le matériel. Un worker sans GPU peut porter la préparation (dataset, config, protocole de validation) d'un training dont l'exécution est claimée par une lane équipée. C'est à l'agent de juger s'il peut prendre le grain, sur ce dont il dispose — pas à une table de routage de le décider pour lui.
Ce qui N'est PAS dans cette issue
La vision n'y est pas, et c'est délibéré : le mandat user la disjoint explicitement du GPU. Elle ne dépend pas de la machine mais du modèle qui anime la lane, et elle est traitée séparément (correction de
.claude/rules/model-delegation.md, dont la section de routage visuel est fausse sur ce point).Acceptance
debt_ledger.pydéclare un kindgpu-reservationavec sesFieldSpec, tests inclusLEDGER_WORKSPACES)docs/reference/cluster-agents.mdrenvoie au ledger au lieu de porter la politique de têteComment cette issue se réfute
Si le ledger existe déjà quelque part que je n'ai pas sondé — un post
PROPOSALsur un dashboard RooSync, une conversation inter-machines — le citer ici ferme l'issue en ramenant l'acquis plutôt qu'en le réécrivant.