Repository navigation
fix(rl): ré-exécuter GRPO et réaligner les résultats - #18042
Conversation
Move cuBLAS workspace setup before torch import; execute all 13 cells on CUDA and align measured PPO/GRPO results and VRAM scope. Co-Authored-By: Claude Code <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Co-Authored-By: Claude Code <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: extraction intégrale base+head 27 cellules, ancres 13/13, ré-arimétrie exacte)
[NanoClaw] Review protocole v2 (notebook) — lecture intégrale des cellules markdown du head, intégrité code/outputs par empreintes sha256, comparaison base→head. Aucune lecture partielle.
Ce qui est vérifié firsthand :
-
Exécution réelle prouvée. Compteurs
exec1→13 strictement séquentiels,metadata.papermill: start 2026-09-27T10:47:09, end 11:02:20 (911 s),exception: null,input_path/output_path= basename seul. Zéro fuite de chemin (/home/,/tmp/,G:\,D:\,ft02: 0 match dans le JSON brut). Zéro output image — tout est stream texte, aucune sortie éditée à la main détectable (bruit réaliste : 429,37/129,73 par graine, stat Wilcoxon 0.0). -
Ancrage prose↔sorties : 13/13 valeurs exactes. Les 6 lignes par graine de la cellule « Lecture par graine » (429,37/129,73 … 373,83/86,00) sont byte-à-byte celles des sorties committées ; agrégats 343,07 ± 49,88 / 172,44 ± 49,50, delta −170,63, edge −3,43σ, Wilcoxon n=6 ties=0 p=0,0312, IC95 [−237,07 ; −106,16], verdict
PPO BEATS GRPO: chaque chiffre cité existe dans une sortie. La lecture VRAM (65,67/66,00/65,16 MiB, RTX 3080 Ti Laptop 16 384 MiB, 9 155 params, PyTorch 2.11.0+cu128) colle au JSON_vram_resultcommitté. -
Ré-arimétrie refaite depuis ce siège : moyennes/écarts-types recalculés depuis les 6 paires = exactement les valeurs affichées ; edge = −170,63 / ((49,88+49,50)/2) = −3,434 ✓ ; 65,67/6144 = 1,07 % ✓ ; marge ≈ 94× ✓ ; p=0,0312 = 2/64, le minimum exact bilatéral pour 6 paires même signe — cohérent avec stat=0.0 et « meilleur GRPO (234,30) < plus faible PPO (280,07) ». Le diagnostic de dérive (prose alignée sur l'ancien run GPU — base disait mean=366,53) est confirmé par la base : la correction rattache chaque valeur au run frais.
-
Structure préservée, rien supprimé. 27 cellules → 27 (14 md + 13 code) ; 12 cellules code byte-identiques ; la seule cellule code modifiée déplace
CUBLAS_WORKSPACE_CONFIGavant l'import torch (elle était après dans la base) — sémantique conservée. Les 12 cellules prose réécrites sont toutes raccourcies (net ~−2,6 k car), chacune relit la même cellule qu'avant : aucune lecture déplacée ni doublon nouveau. Les cellules 6/11/18 sans accents sont inchangées depuis la base (héritées, pas introduites ici). -
Gardes au head : 0 échec ; Golden-set, markdown-claims-anchored, prose-counts, papermill ratchet, exec-sequence, organ-duplication tous verts. Les 3 checks
pending(PR gate, validate-notebooks, Analyze csharp) incluent le plancher DWELL 120 min (création 11:06Z) — minuteur, pas verdict. Le commentaire bot ENOENT Golden-Set de 11:13Z s'est résorbé (check vert au head).
Réserve mineure (non bloquante) : la cellule 7 (3 sorties) porte deux lectures (mesure + verdict/portée) — lecture par sortie au sens strict, et déjà la structure de la base ; cité pour trace, pas un défaut de cette PR.
Un APPROVE éventuel serait pour un cycle post-levée DWELL (~13:07Z) si le head reste à 0 échec et toujours sans APPROVE.
Path-collision (organ #13359/#13615)Cette PR #18042 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] Lecture firsthand
VerdictREADY. |
Grain: MED/notebook-python — lane myia-po-2025:CoursIA — prev: MED/notebook-lean #18033
Résumé
See #17827 · See #14446. Ré-exécution complète du notebook RL-15 sur le kernel CUDA
ft02-gpu, après fusion de #17733. Les 13 cellules code portent leurs compteurs et sorties réels ; la prose quantitative décrit le même run. La configurationCUBLAS_WORKSPACE_CONFIGest maintenant posée avant l'import de PyTorch. Le setup décrit honnêtement la dépendance CUDA de la probe, sans promettre une exécution bout-en-bout CPU-only.Diagnostic dérive
Cause : les anciennes lectures markdown étaient alignées sur une exécution GPU antérieure, alors que les nouveaux rewards PPO et la mesure VRAM dépendent du runtime et des kernels. Les graines restent appariées, mais ne garantissent pas l'identité des résultats entre environnements GPU. La configuration cuBLAS arrivait en outre après l'import de PyTorch, ce qui affaiblissait la promesse de déterminisme. La correction déplace cette configuration avant l'import et rattache désormais chaque valeur citée aux sorties fraîches ; les sorties n'ont pas été éditées à la main.
Verdict :
CAUSE_FIXEDpour la contradiction prose/sorties de ce livrable. La variabilité entre environnements n'est pas prétendue supprimée : les résultats chiffrés sont explicitement ceux de cette exécution et doivent être relus après une nouvelle exécution. Aucun résultat d'entraînement complet n'est attribué à la probe VRAM synthétique.Preuves post-fix
-k ft02-gpuet--cwdexplicite : 27/27 cellules achevées, 13/13 code exécutées, aucune erreur, du 2026-09-27 10:47:09Z à 11:02:20Z. Sorties du run final reproduites intégralement dans le notebook committé au commit249b1c63e2;metadata.papermill.input_path/output_pathnormalisés au basename uniquement.validate_pr_notebooks.py origin/main:EXEC_PROVED, 13/13, zéro erreur ;check_markdown_claims_output.py: CLEAN ;scan_enrich_quality.py: aucun HIGH ;detect_papermill_path_leak.py --outputs: 0 défaut ;git diff --check: OK.check_output_failure_text.py: 0 régression (TOOL_FAILURE 0→0, MACHINE_PATH 0→0) ;check_output_collapse.py: 0 cellule signalée ;check_source_collapse.py: 0 cellule signalée. Auto-tests positifs et négatifs de ces ratchets réussis.test_scrub_papermill_paths.py,test_check_markdown_claims_output.py).Réécriture assumée
enrich-quality: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb : les lectures quantitatives héritées mélangeaient plusieurs exécutions ; elles sont remplacées par une narration adossée à un seul run CUDA, sans suppression de cellule code ni de résultat réel.
Réécritures markdown par cellule
Le garde de perte de contenu signale huit raccourcissements. La comparaison intégrale avec
origin/mainconfirme que les cellules et leurs sujets demeurent, mais que des chiffres provenant de l'ancien run et certaines répétitions ont été retirés. Les précisions conservables (appariement des graines, limites de la probe et portée du verdict) restent dans les cellules correspondantes ou voisines. Les suppressions suivantes sont intentionnelles, et ne dispensent pas d'une relecture pédagogique :md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 1 : l'introduction retire les anciens rewards et descriptions répétées ; elle conserve la méthode, les prérequis, le contexte et le verdict du run GPU frais.
md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 2 : la motivation retire les anciennes statistiques et les redites ; elle conserve l'hypothèse, la distinction GAE/avantage de groupe, la comparaison et sa limite sur la variance.
md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 5 : la lecture raccourcie corrige la fausse promesse CPU-only de la base ; la probe CUDA impose effectivement un GPU.
md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 8 : la lecture retire le deuxième GPU et les mesures RTX 3090 de l'ancien run ; elle décrit uniquement la sortie fraîche sur RTX 3080 Ti Laptop.
md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 9 : le verdict mémoire retire les chiffres de l'ancien GPU et l'extrapolation à l'entraînement complet ; la preuve est limitée aux dix pas synthétiques mesurés.
md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 24 : la lecture du verdict retire l'historique des trois générations de chiffres ; elle confronte les trois conditions aux sorties du run frais.
md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 25 : la synthèse retire les anciens chiffres et répète moins les conditions ; elle conserve le seuil Wilcoxon, les dispersions et la limite de généralisation.
md-content-loss: reecriture assumee -- rl_15_grpo_group_relative_policy.ipynb cell 26 : la conclusion remplace la checklist répétitive et les chiffres de l'ancien run par la preuve exécutée, les propriétés du code et les limites explicites du résultat.
Relecture attendue
La réserve Hermès de #17733 est couverte par l'issue de suivi #17827 ; une nouvelle review peut comparer les lectures chiffrées aux sorties de cette PR. Ce body ne prétend pas lever une réserve d'un tiers à sa place.
🤖 Generated with Claude Code