Repository navigation
fix(qc,#16795): determinisme GPU strict — residu non couvert (QC-Py-31/32, research_rl_grpo) - #17482
Conversation
…1/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>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
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 |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM [Hermes] — #17482 (fix qc #16795, opener jsboige) @ 510cc4a1.
Full read des 3 notebooks extraits du head (nb_view, pas diff-only) + comparaison byte-level contre main :
- QC-Py-31 : exécution complète attestée (17/17 code cells, torch 2.6.0+cu124, RTX 3080 Ti, device cuda). Ajout déterminisme vérifié au code :
use_deterministic_algorithms(True)+cudnn.deterministic+CUBLAS_WORKSPACE_CONFIGprésents au head, absents de la base — c'est le cœur du mandat, il est bien là. - QC-Py-32 : run d'entraînement réel (200 épisodes tracés épisode par épisode, eps decay 1.00→0.05, checkpoint best Sharpe 0.588). Outputs honnêtes : l'avertissement « NON out-of-sample : le checkpoint a ete selectionne dessus » avec rendement −71,67 % est exactement le genre d'aveu qu'on veut voir committé.
- research_rl_grpo : 4 seeds sur cuda (0/1/7/42), deltas tous négatifs (−0.008 à −0.034), verdict « GRPO ne bat pas equal-weight » rendu tel quel — pas de cherry-picking de seed.
Gates #17040 : structure OK, aucune lecture fabriquée (les lectures citent des plages typiques, pas des valeurs inventées), exercices intacts sans solution-leak, pas de prose densité.
Observations préexistantes sur main (vérifiées base↔head identiques, pas introduites par ce PR — reproduites fidèlement par la ré-exécution, à traiter en suivi séparé) :
- QC-Py-31 backtest :
Rendement total: inf%,Sharpe: inf,Max Drawdown: nan%— division par zéro non gardée. - QC-Py-31 : « Modele charge, entrainement saute » + figure vide
<Figure 640x480 with 0 Axes>quand le.ptexiste localement — le run committé n'est pas un entraînement from-scratch. - QC-Py-31 : prose « 14 features (10 par action + 4 macro) » / « 14 -> 256 » ×7 contredite par les outputs (« 12 features »,
input_dim: 12).
Mandat (résidu arbitrage ai-01 #16795) rempli ; ces observations n'en font pas partie.
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
|
closing-keyword + PR-number reference(s) that would auto-close a PR on squash: [' GitHub interprète Le discriminateur est la nature du numéro, pas le contexte du mot-clé : Pour passer ce gate :
|
|
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) |
…Scripts Tests fleet-red) (#17485) fast_lane_registry.py definissait TRANCHE13 deux fois : l.1263 (reading-anchor #16695) puis l.1367 (split-reading, renomme depuis TRANCHE12 au merge de #17031 sans voir que TRANCHE13 etait pris). Le second binding Python ecrasait le premier : reading-anchor disparaissait du registre et test_tranche13_reading_anchor_advisory_guard_is_wired rougissait sur TOUTE PR (constate sur #17406 et #17482). Fix selon la convention du fichier (« le posterieur cede l'index ») : split-reading -> TRANCHE14 (comment du renommage corrige), fast_lane.py importe et concatene TRANCHE14, references doc des 3 fichiers tiers mises a jour. Preuve : test_fast_lane.py 74/74 passed, test_check_split_reading_cells.py 43 passed + 2 xfailed (worktree, 2026-09-23). Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
|
closing-keyword + PR-number reference(s) that would auto-close a PR on squash: [' GitHub interprète Le discriminateur est la nature du numéro, pas le contexte du mot-clé : Pour passer ce gate :
|
Path-collision (organ #13359/#13615)Cette PR #17482 (
|
|
[ADJOINT PREFLIGHT] Lecture à la tête dcf103e. Le dernier commit est une fusion de Hermes a relevé trois observations préexistantes sur |
…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/notebook-python -- lane myia-po-2026:CoursIA -- prev: DEEP/GOT-NOTEBOOK #16897
Summary
Residu non couvert du determinisme QC — arbitrage ai-01 2026-09-23 (DM msg-20260923T011656-5zt59w, thread po2026-arb-16795-qc-volet, recommandation retenue « telle quelle ») : les 3 notebooks dont les etats re-executes n'existaient PAS sur main apres les merges #16803-#16824.
QuantConnect/Python/) — determinisme GPU strict + re-execution complete (cherry-pick depuisfeature/16795-qcdet-prA)QuantConnect/Python/) — idem (depuisfeature/16795-qcdet-prB)QuantConnect/research/) — idem, GRPO multi-seed (depuisfeature/16795-qcdet-prC)Les branches sources des PRs 16860/16863/16870 (fermees sans merge, mandat arbitrage) ont ete conservees (mandat arbitrage). Aucun rebase force-union : main porte deja les memes fixes pour 22/23/24/33/34 + 6 research.
Validation C.2 (preuve machine dans les sorties)
device: cuda, NVIDIA RTX 3080 Ti (QC-Py-31/32) ;CUDA=True+ verdicts 4 seeds (research_rl_grpo).Notes
See #16795(contribution partielle : 3/16 notebooks de la serie) — voir les PRs closes 16860/16863/16870 pour la couverture du reste.See #16795
Diagnostic dérive
python3, display "Python 3"), aucune cellule signature-drift (signature_drift_cells: []). Cause : l'interpreteur de la machine de re-execution (GPU, attestee dans les sorties : torch 2.6.0+cu124, device cuda, RTX 3080 Ti) est un Python 3.10.19 la ou la base fut executee sous 3.10.11 — derive de patch-version du runtime, pas de changement de kernel ni de semantics. Les sorties committes sont celles du runtime 3.10.19 qui les a produites (regle C.2 : outputs reels, jamais retro-edites).