Repository navigation
Conversation
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Path-collision (organ #13359/#13615)Cette PR #13891 ( |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
→DELIVERED PR #14272 (cycle 178) — fix(pt11c,#13891): basename OUTPUT_DIR/metrics_path in cell 4+22 prints. Cause triage (C) source-leak : cell 4 et cell 22 imprimaient le path absolu du worktree ( Verif : Stop & Repair respecte (secrets-hygiene rule 6) : pas de hand-edit d'output, source corrigee d'abord puis outputs regenres. Lane myia-po-2026:CoursIA. Light/guard tier. |
#13738 relocation Before: cell 4 (pt11c-switch) defined `OUTPUT_DIR = "./pt11c_multiseed_output"`, which wrote per-seed metrics + LoRA checkpoints outside the canonical `_measurements/` provenance area committed in #13738 (e30dd5c). Every run defeated the V1 safe-tier cleanup by re-polluting the notebook's parent directory. After: cell 4 resolves `OUTPUT_DIR` to a sibling of `_measurements/` (the canonical archive folder for PostTraining measurements) by walking up from `Path(os.getcwd())` up to 3 levels. The path is **absolute** and works under both Papermill (cwd=notebook folder) and nbclient (cwd=worktree root). Co-located changes: - `.gitignore` : add `MyIA.AI.Notebooks/GenAI/PostTraining/_measurements/pt11c_multiseed_output/` so per-run `seed_*/` LoRA checkpoints (multi-MB, not re-generable in the same form) stay untracked local scratch. The `pt11c_per_seed_metrics.jsonl` archive remains tracked in the sibling `_measurements/` directory. - Cell 22 (pt11c-training) and CPU-safe mode : paths now resolved at runtime via `Path(OUTPUT_DIR) / "..."`. The 8-seed archive (1.7B + 2B, run precedent) is preserved as provenance; a re-run will overwrite the JSONL (re-generable) but never the source. - Cell 22 outputs re-executed and updated to reflect the new path (`_measurements\pt11c_multiseed_output\pt11c_per_seed_metrics.jsonl`). - Other cells' outputs restored from origin/main (nbclient re-execution re-timestamped `iopub.execute_input` etc., no semantic change). Pre-commit : 10/10 hooks passed (gitleaks, H.3 exec_count, #13326 compile, papermill scrub, .NET banner strip, etc.). Grain: MED/tooling - lane myia-po-2026:CoursIA - prev: tooling #13842 cycle 30. paths: .gitignore, MyIA.AI.Notebooks/GenAI/PostTraining/PT_11c_grpo_qwen17_rlvr.ipynb Closes #13871 See #13738, #13829
aade58b to
a435fee
Compare
…het papermill/exec-seq) Le carnet portait les outputs d une re-execution cellule-par-cellule en noyau chaud : le bloc metadata.papermill decrivait encore le run precedent (ratchet). Un passage complet fresh kernel (papermill 2.6.0, kernel python3, cwd = racine du worktree, mode par defaut : LOAD_MODEL_AND_TRAIN=False, metriques multi-seed rechargees depuis _measurements/pt11c_multiseed_output) reecrit le bloc et la sequence complete. Verification : execution_count 1..15 strictement croissants sans doublon, 0 error output, metadata.papermill end_time 2026-09-03T11:47:32 (frais). Cellules source inchangees (0 changement de source). Co-Authored-By: Claude-Code <noreply@anthropic.com>
…apermill ratchet remedy) - full pass kernel python3, 15 code cells, exec sequence 1..15 strictly increasing, no duplicates, zero errors, papermill exception=None (12.9s) - read mode (LOAD_MODEL_AND_TRAIN=False): JSONL detected, 8 seeds loaded, full DM analysis ran (Edge cross-seed mean=0.1148, std=0.0059, edge=19.33 sigma; DM pooled n=80 dm_stat=29.5486) - references the per-seed measurements JSONL under worktree-local _measurements/ (gitignored, #13738 relocation preserved) - merges origin/main (base refresh) before the pass See #13891 Co-Authored-By: Claude-Code <noreply@anthropic.com>
…aded run repaired) - previous commit f70eeab ran degraded: JSONL not found, DM analysis skipped (wrong cwd for the _measurements walk-up) - redo from worktree root cwd with per-seed JSONL staged at _measurements/pt11c_multiseed_output/: 8 seeds loaded, full DM analysis ran (Edge cross-seed mean=0.1148, std=0.0059, edge=19.33 sigma; DM pooled n=80 dm_stat=29.5486) - exec sequence 1..15 strictly increasing, no duplicates, zero errors, papermill exception=None (14.3s, kernel python3) See #13891 Co-Authored-By: Claude-Code <noreply@anthropic.com>
…tebook Le ratchet MACHINE_PATH ne scanne que les SORTIES de cellules. Cette PR les a nettoyees (cellules 4 et 22, verdict `0 regressed`), mais le notebook portait encore le meme chemin dans une cle de metadata au niveau document : metadata.path = C:\dev\CoursIA-cycle-32\MyIA.AI.Notebooks\GenAI\PostTraining Mesure de la classe sur main : 0 notebook sur 1234 porte un `metadata.path` machine. La cle n'existe pas en amont -- la merger l'y introduirait pour la premiere fois, sous un ratchet vert qui ne la voit pas. Retrait de metadata, PAS d'une sortie : c'est la classe que secrets-hygiene regle 6 autorise a normaliser a la main, au meme titre que metadata.papermill.input/output_path. La preuve d'execution est intacte -- sources, sorties et execution_count des 34 cellules verifies byte-identiques, et le bloc papermill (passe du 2026-09-03T12:20Z, exception: null) est conserve. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…tecteur LIVE restaure)
La passe precedente tournait sur une machine sans `rewardspy` -- paquet
GitHub-only (AvAdiii/rewardspy), absent de PyPI, ce que la note d'en-tete du
notebook documente deja. Le fallback no-op est donc une voie CPU-safe prevue,
pas une improvisation ; mais committer sa sortie remplacait sur `main` deux
lignes de compte-rendu par leur version degradee :
cell 2 : rewardspy 0.1.0 -> rewardspy : NOT INSTALLED
cell 16 : rewardspy.watch_trl (live) -> no-op wrapper (rewardspy absent)
Sur un notebook RLVR, la cellule 16 EST le sujet : consacrer « detecteur de
reward hacking = no-op » aurait ete la regression que sota-not-workaround
Prong A nomme, avec un verdict RECOVERABLE-MACHINE non tente.
Re-execution end-to-end sur ai-01, env `coursia-ml-training` (rewardspy 0.1.0,
trl 1.9.2 -- la meme que la passe de `main`), papermill 2.7.0, cwd = racine du
depot. Aucun training : `LOAD_MODEL_AND_TRAIN = False` est en dur dans la
cellule 4, le garde `if LOAD_MODEL_AND_TRAIN and CUDA_AVAILABLE:` reste ferme
malgre le CUDA disponible -- verifie avant de lancer quoi que ce soit ici.
Mesures sur la sortie obtenue :
- 15 cellules code, 0 erreur, 0 execution_count nul
- 0 chemin machine sur TOUTE surface (sources, sorties, metadata) -- le
`metadata.path` retire au commit precedent n'est pas revenu
- 0 cellule portant un marqueur de degradation absent de `main`
- les 8 seeds restent identiques (memes t_train / vram_peak / loss) : ils
viennent du JSONL tracke, la re-execution ne les recalcule pas
- ratchet `check_output_failure_text.py origin/main` : 0 regressed
`pt11c_reward_curves.png` est regenere par cette meme passe : le laisser en
l'etat l'aurait date du run precedent.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…avec rewardspy (#14272) Trois changements sur PT_11c_grpo_qwen17_rlvr.ipynb, dans cet ordre : 1. correctif du leak MACHINE_PATH (#13891) : `.name` sur les prints des cellules 4 et 22, plus la relocalisation d'OUTPUT_DIR sous _measurements/ (#13738) -- ~22 lignes que le body d'origine decrivait a tort comme "0 modification de logique", releve par clusterManager-Myia et corrige ; 2. retrait de `metadata.path` (C:\dev\CoursIA-cycle-32\...), chemin machine hors du champ scanne par le ratchet -- angle mort suivi en #14513 ; 3. re-execution papermill sur une machine porteuse de rewardspy, qui restaure `rlvr_reward_func : rewardspy.watch_trl (live detection)` la ou la passe precedente aurait consacre `no-op wrapper (rewardspy absent)` sur un notebook RLVR (verdict RECOVERABLE-MACHINE, cf sota-not-workaround Prong A). Tete verifiee : 15 cellules code, 0 erreur, 0 execution_count nul, 0 chemin machine sur toutes surfaces, 0 marqueur de degradation absent de main, 8 seeds identiques a main, ratchet 0 regressed, validate_pr_notebooks PASS. Aucun training n'a tourne (LOAD_MODEL_AND_TRAIN = False en dur). See #13891
|
[ai-01] Fermee comme superseded par #14272, mergee il y a quelques minutes. Les deux PRs partaient de branches divergentes (
Ce qui a departage n'est pas l'anciennete mais la cause. Cette PR a recu deux passes papermill aujourd'hui et est restee rouge les deux fois : elle re-executait sans corriger la source, donc chaque passe re-emettait le chemin machine. #14272 a patche la source d'abord ; sa passe est sortie propre. Les deux portaient par ailleurs La branche L'issue #13871 que cette PR visait est traitee par le merge de #14272 -- je la ferme separement avec sa propre mesure. |
…#14762) * fix(guard,#14513): le ratchet MACHINE_PATH voit aussi les metadonnees Le garde derriere "Output-failure ratchet (base vs PR)" ne scannait que les SORTIES de cellules : un chemin machine loge dans metadata.path (ou toute cle de metadata, niveau document ou cellule, dont la valeur est une chaine) passait sous un check vert. Fondation #14272/#13891 : le ratchet est passe a "0 regressed" sur PT_11c avec metadata.path = C:\dev\CoursIA-cycle-32\... toujours present, retire a la main en 109cf4e avant merge. Extension : - metadata_texts() releve toute valeur de metadata STRING (document + cellule), sans liste blanche de noms de cles -- la prochaine cle qu'une re-execution leake est vue des sa premiere apparition. - scan() applique MACHINE_PATH_PATTERNS a ces surfaces. MACHINE_PATH seulement : une metadata ne porte pas de banniere de tool-failure. - location des hits : "doc:<cle>" / "cell[<i>]:<cle>" a cote de l'index de cellule des hits de sortie (samples/gate inchanges par ailleurs). Controles : - Precaution 1 verifiee : 0 nouvelle accusation metadata sur les 1234 notebooks de main (papermill.input/output_path sont repo-relative ou basename -> silencieux par construction). - Positive control reel : replay c4b99a3 -> 109cf4e dans --self-test ("metadata-path hits 1 -> 0"), garde par cat-file comme le replay fondateur ; asserte doc:path vu a la base, absent au head. - 7 tests unitaires sur le predicat etendu (17 passed au total). - Replays fondateur (TOOL_FAILURE +18 / MACHINE_PATH +12) et downgrade #14603 inchanges : extension non-regressive. Closes #14513 Co-Authored-By: Claude-Code <noreply@anthropic.com> * fix(guard,#14513): imprimer la localisation metadata verbatim au lieu de l'envelopper Point cosmetique leve par la review Hermes de #14762 : l'imprimeur FAIL prefixait systematiquement `cell[...]`, alors que `metadata_texts()` produit deja son propre label de localisation. Un hit metadata de document sortait donc `cell[doc:path]`, et un hit metadata de cellule `cell[cell[3]:papermill]` -- doublement enveloppe. Lisible, mais mal etiquete, et c'est precisement la sortie qu'un mainteneur lit pour situer une fuite. `_sample_location()` trie sur le type : un index de cellule entier (hit d'output) reste `cell[7]` ; une chaine (hit metadata) est imprimee verbatim. Aucun changement de detection ni de comptage -- `compare()` consomme `len(h[cls])`, agnostique au type. 2 tests, avec controle negatif verifie : sans le tri, les deux rougissent (mesure locale, 2 failed / 17 passed), et le second controle porte sur les localisations REELLES rendues par `scan()`, pas sur des litteraux -- il assure qu'aucune sortie ne contient `cell[cell[` ni `cell[doc:`. Suite complete : 19 passed. --------- Co-authored-by: Claude-Code <noreply@anthropic.com>
…ecution reelle 4 seeds x 2 tailles sur RTX 3090
- logging_steps 5 -> 4 : 25 pts/seed >= 22 requis, DM intra-seed calculable
- re-execution complete 2026-10-05 : 4 seeds x {1.7B, 2B}, 14 725 s cumulees, 0 alerte reward-hacking
- verdict mesure les deux tailles : MECANISME_REPRO (edge 12.68 sigma / 16.41 sigma, intra p = 0.826 / 0.632)
- prose alignee sur le GPU reel (RTX 3090 24 GB, probe re-mesure) ; wallclock/VRAM depuis le JSONL
- cellule diagnostic : les 2 defauts -> CAUSE_FIXED par re-execution (C.4)
- affichage basename output_dir/figure : machine-path safe (#13891)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…écution réelle 4 seeds × 2 tailles (RTX 3090) (#19394) * fix(#14833): decideur intra-seed calculable -- logging_steps=4, re-execution reelle 4 seeds x 2 tailles sur RTX 3090 - logging_steps 5 -> 4 : 25 pts/seed >= 22 requis, DM intra-seed calculable - re-execution complete 2026-10-05 : 4 seeds x {1.7B, 2B}, 14 725 s cumulees, 0 alerte reward-hacking - verdict mesure les deux tailles : MECANISME_REPRO (edge 12.68 sigma / 16.41 sigma, intra p = 0.826 / 0.632) - prose alignee sur le GPU reel (RTX 3090 24 GB, probe re-mesure) ; wallclock/VRAM depuis le JSONL - cellule diagnostic : les 2 defauts -> CAUSE_FIXED par re-execution (C.4) - affichage basename output_dir/figure : machine-path safe (#13891) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(#14833): f3d9a2c1 reecrite depuis le JSONL de la tete -- plus de chiffres 4090, 8.19σ PT-11b insourcable retire (runs seed_*/ vides) - Lecture chiffree : 1.7B 1626/1572/1637/1661 s (mediane 1631, ordre de passage sans effet, seed 1 le plus rapide) ; 2B 1895/2002/1951/2381 s (couloir 107 s sur 3 seeds, outlier seed 42 +26 %, pas de warm-up premier-seed) ; ratio median +21 % pour +18 % de parametres, alerts=0/8, vram_peak signature de la taille. - 6 mentions '8.19σ PT-11b' remplacees par 'non archive' / MECANISME_REPRO : aucun artefact pt11b (_measurements seed_*/ vides, #10603 = issue de diagnostic, pas de JSONL pt11b). - Cellules markdown uniquement (exception C.2). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Summary
Avant cette PR, la cellule 4 (
pt11c-switch) du notebookPT_11c_grpo_qwen17_rlvr.ipynbdéfinissait :Le
OUTPUT_DIRécrivait donc à la racine du notebook, en dehors du dossier_measurements/créé par le commit #13738 (e30dd5c) pour accueillir les artefacts de mesure des notebooks PostTraining. Conséquence : chaque exécution du notebook défait le rangementV1 safe-tier cleanup(lesseed_*/checkpoints LoRA apparaissent dansgit statusà la racine du notebook), et lept11c_per_seed_metrics.jsonln'est pas committé comme provenance (puisqu'il atterrit hors de_measurements/).Voie A retenue (Option A de l'issue #13871)
Repointer
OUTPUT_DIRvers un sous-dossier_measurements/pt11c_multiseed_output/, à côté de l'archive canonique_measurements/pt11c_per_seed_metrics.jsonl(déjà trackée sur main par #13738). Le path est calculé en absolu dans cell 4, en remontant depuisPath(os.getcwd())jusqu'à 3 niveaux — tolérant aux cwd Papermill (cwd = notebook folder) ET nbclient (cwd = worktree root), ce qui couvre les deux modes d'exécution du dépôt.Fichiers modifies
MyIA.AI.Notebooks/GenAI/PostTraining/PT_11c_grpo_qwen17_rlvr.ipynbiopub.execute_inputetc. ont ete re-timestampes par nbclient, pas de changement semantique).gitignoreMyIA.AI.Notebooks/GenAI/PostTraining/_measurements/pt11c_multiseed_output/(anti-pollution desseed_*/checkpoints LoRA ; le JSONL re-generable reste tracke dans_measurements/, voir #13738)Pourquoi Option A plutot que Option B
L'issue #13871 proposait deux remedes :
OUTPUT_DIR(cette PR) — un seul passage, rangement durable, archive preservee comme provenanceOption A est la voie qui rend le rangement durable sans dependre d'un script externe. Le cout (re-execution GPU) n'est PAS un cout de cette PR — la prochaine execution ecrira naturellement au bon endroit. L'archive existante a
_measurements/pt11c_per_seed_metrics.jsonl(8 lignes, run precedent 1.7B+2B) est preservee comme provenance ; le JSONL re-genere aura le meme chemin logique et ecrasera l'archive au prochain run (acceptable : re-generable, voirgit grep pt11c_per_seed_metricsqui montre que le fichier n'a aucun consommateur externe autre que le notebook lui-meme).Verification firsthand
Le seul consommateur du JSONL est le notebook producteur lui-meme (in-memory apres load) — c'est un artefact re-generable, pas une mesure de reference externe.
Le pattern
.gitignoreest strictement ancre dans_measurements/(pas de risque de collision avec des fichiers au nompt11c_multiseed_outputailleurs dans le depot).Outputs cell 4 + cell 22 (re-executes)
Les 8 seeds archives sont lus correctement depuis le nouveau path. Cell 22 reaffirme que le mode CPU-safe est operationnel meme avec le nouveau routage.
Acceptance issue #13871
Path(OUTPUT_DIR).seed_*/checkpoints LoRA sont sous le pattern gitignore_measurements/pt11c_multiseed_output/; le JSONL archive reste tracke dans_measurements/(canonique depuis [consolidation] Nettoyage racine + gitignore residuels (V1 sans risque) #13738).Lien avec cycles precedents
OUTPUT_DIRsous_measurements/.e30dd5c72) : relocation originelle des artefacts de mesure vers_measurements/; le JSONL tracke est la provenance que cette PR preserve.Grain: MED/tooling - lane myia-po-2026:CoursIA - prev: tooling #13842 cycle 30.
paths: .gitignore, MyIA.AI.Notebooks/GenAI/PostTraining/PT_11c_grpo_qwen17_rlvr.ipynb
Closes #13871
See #13738, #13829
🤖 Generated with Claude Code