Skip to content

fix(qc,#16795): QC-Py-24 determinisme GPU effectif + resync prose (18 repl) - #16806

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/qcdet-qcpy24
Sep 21, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/qcdet-qcpy24

Conversation

@jsboige

@jsboige jsboige commented Sep 19, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/qc -- lane myia-po-2026:CoursIA -- prev: DEEP/qc #16803

QC-Py-24 : déterminisme rendu effectif + re-exécution GPU + prose resynchronisée

Tranche 2/13 du volet QuantConnect de #16795 (triage du 19/09 ; celui-ci re-vérifié firsthand — seed 42 sans AUCUN réglage de déterminisme, métriques réelles committées).

Le fix (cellule 4, site du seed)

import os
os.environ.setdefault('CUBLAS_WORKSPACE_CONFIG', ':4096:8')  # avant import torch
# après les seeds :
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
torch.use_deterministic_algorithms(True, warn_only=True)

warn_only = délibéré (pédagogique : un warning, pas un crash ; le notebook reste exécutable de bout en bout, C.1). Même pattern que la tranche 1 (#16803, QC-Py-22), appliqué au site du seed de ce notebook.

Preuve d'exécution (C.2) — kernel documenté du notebook

Papermill 21/21 cellules code, kernel coursia-ml-training, 0 erreur
Device: cuda | RTX 3080 Ti Laptop | PyTorch 2.6.0+cu124 | hmmlearn 0.3.3
21/21 cellules code execution_count rempli, 0 error
grep NotImplementedError/assert False/1/0 : 0 occurrence

Les chiffres — honnêteté complète

Métrique Committé avant Cette PR (GPU déterministe)
VAE temporel (LSTM) — losses 0.7408→0.4925, Recon 0.7026→0.4238 bit-identiques (architecture légère = stable)
Transformer-VAE stats erreur mean 0.4771 / std 0.5160 mean 0.5298 / std 0.6457 (drift = device/flags)
Backtest Regime-Adaptive +3.55%, Sharpe 0.75, MaxDD 4.58%, exposition 18.6% +3.67%, 0.77, 4.47%, 18.5%
B&H +29.70%, Sharpe 0.98 inchangé
Seuil P95 0.736097 0.736250 (prose « 0.736 » arrondie reste valide)
Taille VAE ObjectStore 148.2 KB 147.9 KB
  • Prose resynchronisée : 18 remplacements scriptés (comparaison VAE cellules 27 : les deltas dérivés « −24%/−34% » deviennent −16%/−18% ; synthèse backtest cellule 45 ; citation croisée cellule 50 ; 5 citations de la taille 148.2→147.9 KB). Assertion zero-résidu exécutée AVANT l'écriture — elle a intercepté 2 citations hors périmètre imprimé initial (cellule 50, tailles ObjectStore) que le script a ensuite couvertes.
  • Les affirmations qualitatives survivent : « le Transformer gagne sur les deux axes » (vrai à −16%/−18%), « 18.5% × 29.70% ≈ 5.5%, ordre de grandeur du +3.67% » (vrai), B&H inchangé.
  • Le drift des métriques Transformer/backtest vient de l'exécution GPU locale déterministe vs l'ancienne exécution committée — même lecture qu'en tranche 1 : le déterminisme garantit même-run-même-run, PAS l'égalité cross-device.

Périmètre

1 fichier, QC-Py-24-Autoencoders-Anomaly.ipynb (+402/−304, outputs régénérés inclus). Guard markdown : 0 nouvelle violation ERROR sur ce fichier.

SOTA

SOTA-OK : vrai PyTorch, vrai GPU local (RTX 3080 Ti), kernel documenté (coursia-ml-training), sorties réelles, aucun workaround.

See #16795 (contribution partielle — volet QC, 11 autres FIX_CANDIDATE en file)

🤖 Generated with Claude Code

…U + resync prose

Cellule 4 (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,
21/21 cellules, 0 erreur). Prose resynchronisee sur les outputs : comparaison
VAE (0.6276/0.7859 vs 0.5298/0.6457, -16%/-18%), backtest (+3.67%, Sharpe 0.77,
MaxDD 4.47%, exposition 18.5%), taille ObjectStore 147.9 KB — 18 remplacements
scriptes, assertion zero-residu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 21
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.3s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.4s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 7.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.8s
Search-01-StateSpace.ipynb ✅ SUCCESS 5.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.9s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 46.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 5.1s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16806 (fix(qc,#16795): QC-Py-24 determinisme GPU effectif + resync prose (18 repl)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@jsboige

jsboige commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 16806
head: 25bcd46
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 67d369e545281c26c8450368adf28a1e5f30f42c9695f96bd8b7f06daf5aae43
diff-files: 1
diff-additions: 402
diff-deletions: 304
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 4879527 into main Sep 21, 2026
77 of 78 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 23, 2026
…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>
jsboige added a commit that referenced this pull request Sep 23, 2026
… de la branche retenue

Les deux cotes corrigent le MEME defaut (+16795 : graine posee, aucun reglage de
determinisme) sur le MEME notebook, par deux formes differentes. Conflit
semantique, pas textuel -- sorti uniquement sur la cellule 4 (52 cellules des
deux cotes, une seule dont la SOURCE differe).

Forme retenue (branche) : `os.environ.setdefault('CUBLAS_WORKSPACE_CONFIG',
':4096:8')` pose AVANT `import torch` (l.16 vs l.17, mesure), puis
`use_deterministic_algorithms(True, warn_only=True)`.
- placement : le reglage doit preceder l'initialisation cuBLAS ; la forme de
  main le pose APRES `import torch` (l'effet n'est alors pas etabli).
- `warn_only=True` : le motif des 12 autres tranches du volet #16795
  (#16803/#16806/#16807) -- un motif strict ici ferait diverger cette tranche
  du reste du volet.

Ce qui est ecarte, et pourquoi : la ligne `print("Determinisme: ...")` de main
n'est PAS greffee. Elle apparaitrait dans la sortie de la cellule 4 sans y avoir
ete produite (la sortie retenue est celle de l'execution de la branche) --
l'incoherence sortie<>code est precisement ce que C.2/H.1 interdisent, et la
corriger exigerait une re-execution GPU que cette lane n'a pas.

Ce que les deux cotes ont en commun et qui est preserve : la sortie de la
cellule 4 atteste la meme stack (PyTorch 2.6.0+cu124, RTX 3080 Ti Laptop) --
les deux cotes ont re-execute, aucun n'a committe un reglage sans execution.

Artefacts suivis : `transformer_multiasset_model.pt` et `training_curves.png`
ne sont touches que par cette branche (1 commit chacun ; main 0). La suppression
non committee du .pt presente dans le worktree a ete restauree avant la fusion
(`git checkout HEAD -- <pt>`, 17927888 octets) : elle contredisait le perimetre
annonce de la PR (regeneration, pas retrait) et sortait du sujet.

Preuve : JSON valide, 52 cellules, 17 cellules code toutes avec
execution_count et outputs (0 sans), 0 CRLF, 0 raise NotImplementedError /
assert False, fichier du notebook byte-identique a la tete de branche.
jsboige added a commit that referenced this pull request Sep 23, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants