Repository navigation
fix(qc,#16795): QC-Py-33 determinisme GPU + resync narrative complete (comparaison DQN/PPO inversee) - #16811
Conversation
…U locale + resync narrative Cellule 7 (site du seed 42) : CUBLAS_WORKSPACE_CONFIG avant import torch, puis cudnn.deterministic=True / benchmark=False / use_deterministic_algorithms(True, warn_only=True). Re-execution complete kernel coursia-ml-training (RTX 3080 Ti, 16/16 cellules, 0 erreur). Ancienne execution = stack etrangere PyTorch 2.11.0+cu128 ; le run PPO derive completement : meilleur Sharpe +0.645 -> +1.191 (step 25,600), backtest OOS +57.24% / 16.38% annuel / Sharpe 1.191 / MaxDD -15.23% / win rate 43.09%, distribution d'actions inversee (94% Buy -> 99.5% Hold). Prose resynchronisee : 24 remplacements scriptes dont reecriture honnete de la cellule verdict (la comparaison DQN/PPO s'inverse : PPO devant partout — la lecon "seed unique != verdict" survit, magnitudes recalculees 0.97 interne vs 0.53 inter-algorithmes). Ancres DQN Py-32 (0.657/22.94/31.3) intactes. Zero-residu assertion avant ecriture. best_ppo_model.pt regenere avec le notebook. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: source complète de la cellule 7 lue au head c02f4146 — trio déterminisme ordonné avant import torch ; 16/16 cellules code exec_counts 1-16 continus, 0 warning nondéterminisme, 0 erreur, 3 exercices « à compléter » intacts ; CI 77 check-runs, l'unique FAILURE = PR gate DWELL plancher 120 min, explicite « rien à corriger dans le code »)
[NanoClaw] Review structurelle (notebook — protocole extract-notebook-diff, pas de diff brut base64) — QC-Py-33 RL-PPO, tranche 5/13 du volet QuantConnect #16795.
Ce qui est vérifié :
- Le fix est au bon site, dans le bon ordre, en un seul endroit. Cellule 7 lue intégralement au head :
os.environ.setdefault('CUBLAS_WORKSPACE_CONFIG', ':4096:8')avantimport torch(l'ordre est obligatoire — cuBLAS lit l'env var à son init), puis les seeds préexistants (manual_seed(42),np.random.seed(42),cuda.manual_seed(42)— le seed CUDA était déjà là, contrairement à QC-Py-22), puis le triocudnn.deterministic=True+cudnn.benchmark=False+use_deterministic_algorithms(True, warn_only=True). Le grep de tout le notebook confirme : 1 seule cellule porte le déterminisme, pas de configuration éparpillée.setdefault(respecte une config explicite) etwarn_only(notebook exécutable si une op sans implémentation déterministe apparaît) restent les bons choix prudentiels. - La re-exécution déterministe est propre, pas seulement déclarée :
warn_only=Truetransforme une op non couverte en WARNING, or le scan des sorties de toutes les cellules trouve 0 warning « does not have a deterministic implementation » — la preuve affirmative que l'exécution a tourné intégralement en mode déterministe. C'est plus fort que le « grep NotImplementedError : 0 » du body (qui ne prouverait que l'absence d'erreur). - Sorties réelles, fraîches, continues : exec_counts 1→16 sans trou ni N/A (une seule session d'exécution) ; GPU nommé (RTX 3080 Ti Laptop, 17.2 GB) ; métriques non rondes et cohérentes en séquence (val_loss 3.1004 → 1.0028 → 0.6896, entropy 0.811 → 0.675 → 0.588, best Sharpe +1.191 figé dès le step 25,600) ; elapsed 75/148/222 s cohérent avec le « 4.7 min » du body. Le compte « Papermill 16/16 cellules code » du body se re-vérifie : 16 cellules code, 16 exec_counts — l'identité tient.
- Intention pédagogique préservée : 3 « Exercice a completer » intacts (clip ratio PPO, bonus d'entropie, +1 en fin de notebook) ; l'architecture Actor-Critic 256→128 (156 549 paramètres) et l'environnement partagé avec QC-Py-32 pour « comparaison équitable » sont inchangés dans leur rôle.
- CI lu firsthand (per_page=100) : 77 check-runs, 1 seul non-success = « PR gate » FAILURE dont le résumé est explicite : DWELL, tête âgée de 8 min, plancher 120 min, écoule 05:57:33Z — « rien à corriger dans le code : cette jambe est un minuteur ». Je ne compte pas cette jambe comme une régression ; note pour la lane : ne pas re-pusher (le re-push remet le plancher à zéro) ; re-jeu
gh run rerunaprès écoulement. - Le second fichier est l'artefact attendu :
best_ppo_model.pt(+2/−2, binaire) = le poids re-sérialisé par la re-exécution déterministe — cohérent avec la tranche (le meilleur checkpoint Sharpe 1.191 au step 25,600 correspond à la progression des sorties).
Limites (non bloquantes) :
- La preuve de reproductibilité (deux exécutions GPU → métriques identiques) vit dans le body de la lane, pas dans un artefact committé — même limite que sur QC-Py-22 (#16803), limite de famille du volet #16795.
- Le delta +386/−279 du .ipynb reste dominé par la régénération des sorties après re-exécution déterministe — cohérent, mais peu auditable ligne à ligne ; les métriques committées sont la parole de la lane (je les ai trouvées internement cohérentes, non re-dérivées).
— review structurelle NanoClaw, COMMENT-only (décision de merge à Emerjesse ; PR gate se débloque mécaniquement à 05:57:33Z).
Path-collision (organ #13359/#13615)Cette PR #16811 (
|
|
[ADJOINT PREFLIGHT] Dossier de prevalidation tierce (gate #16907, Phase 4, dispatch ai-01 01:01Z — lot QC po-2026). Empreinte recalculee en DERNIER, head re-verifie c02f414 juste avant, ce post est la derniere action sur cette PR. Verifications firsthand au head exact c02f414
Disposition : READY. Aucun merge, APPROVED ou CHANGES_REQUESTED effectue ici. |
…U + resync narrative (#16812) Cellule 5 (site du seed 42) : CUBLAS_WORKSPACE_CONFIG avant import torch, puis cudnn.deterministic=True / benchmark=False / use_deterministic_algorithms(True, warn_only=True). Re-execution complete kernel coursia-ml-training (RTX 3080 Ti, 17/17 cellules, 0 erreur ; SAC 2,1 min + A2C 4,5 min). Ancienne execution = stack CPU etrangere (PyTorch 2.11.0+cpu) : changement de DEVICE CPU->GPU. Le run inverse les roles : SAC demarre bien (+0.816) puis s'erode en evaluation, A2C stable (+0.942 x3) et GAGNE le classement final (A2C 0.942 > DQN 0.683 > PPO 0.645 stocke > SAC 0.509). Prose resynchronisee : 30 remplacements scriptes sur 5 cellules narratives, dont reecriture honnete des trois lectures du tableau (l'ancienne histoire "A2C meurt a 0, SAC quasi-inactif" devient "A2C gagne, photo a seed unique" avec note historique du run CPU inverse). Colonnes DQN/PPO = litteraux stockes coherents avec main (dependance post-#16811 signalee dans le body). Zero-residu assertion avant ecriture. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…1/32, research_rl_grpo) (#17482) * fix(qc,#16795): determinisme GPU strict — residu non couvert (QC-Py-31/32, research_rl_grpo) Three notebooks from the closed QC determinism series whose re-executed states were NOT covered on main (arbitrage c.38 volet QC, DM po2026-arb-16795-qc-volet) : main already carries the same fixes for QC-Py-22/23/24/33/34 + 6 research via #16803/#16806/#16807/#16811/#16812/#16815/#16816/#16818/#16822/#16823/#16824. Cherry-picked states from the retained branches feature/16795-qcdet-pr{A,B,C}. C.2: execution_count+outputs coherents (17/17, 15/15, 7/7), 0 error, 0 NotImplementedError; machine attestee dans les sorties (PyTorch 2.6.0+cu124, device cuda, NVIDIA RTX 3080 Ti; GRPO 4 seeds pour research_rl_grpo). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * ci: force fresh pull_request event (body Diagnostic derive kernel ajoutee) --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…1/32, research_rl_grpo) (#17482) * fix(qc,#16795): determinisme GPU strict — residu non couvert (QC-Py-31/32, research_rl_grpo) Three notebooks from the closed QC determinism series whose re-executed states were NOT covered on main (arbitrage c.38 volet QC, DM po2026-arb-16795-qc-volet) : main already carries the same fixes for QC-Py-22/23/24/33/34 + 6 research via #16803/#16806/#16807/#16811/#16812/#16815/#16816/#16818/#16822/#16823/#16824. Cherry-picked states from the retained branches feature/16795-qcdet-pr{A,B,C}. C.2: execution_count+outputs coherents (17/17, 15/15, 7/7), 0 error, 0 NotImplementedError; machine attestee dans les sorties (PyTorch 2.6.0+cu124, device cuda, NVIDIA RTX 3080 Ti; GRPO 4 seeds pour research_rl_grpo). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * ci: force fresh pull_request event (body Diagnostic derive kernel ajoutee) --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: DEEP/qc -- lane myia-po-2026:CoursIA -- prev: DEEP/qc #16808
QC-Py-33 : déterminisme rendu effectif + re-exécution GPU + resync narrative complète
Tranche 5/13 du volet QuantConnect de #16795. Candidat re-vérifié firsthand : seed 42 posé (cellule 7, avec
cuda.manual_seed), AUCUN réglage de déterminisme.Le fix (cellule 7, site du seed)
Preuve d'exécution (C.2)
Les chiffres — le run a changé de physionomie, la prose suit
Ancienne exécution = stack étrangère (PyTorch 2.11.0+cu128). Le PPO est seed-sensible : la re-exécution (données Yahoo re-téléchargées incluses) dérive complètement :
Périmètre
2 fichiers :
QC-Py-33-RL-PPO-Trading.ipynb+best_ppo_model.pt(sous-produit suivi régénéré par la cellule d'entraînement elle-même).SOTA
SOTA-OK : vrai PyTorch, vrai GPU local (PPO entraîné 4,7 min), kernel documenté, sorties réelles, aucun workaround.
See #16795 (contribution partielle — volet QC ; 8 FIX_CANDIDATE restants)
🤖 Generated with Claude Code