Skip to content

Fix(finetuning,#17073): audit FT-00a -- durees par epoch et ordres de grandeur float64 regroundes sur les sorties - #20489

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/17073-ft00a-audit
Oct 13, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/17073-ft00a-audit

Conversation

@jsboige

@jsboige jsboige commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/genai — lane myia-po-2025:CoursIA — prev: MED/genai #20488

Fix des 2 findings de l'audit v2.1 (partition #19451, campagne #17073) sur MyIA.AI.Notebooks/GenAI/FineTuning/FT-00a-LoRA-from-scratch-Python.ipynb — les deux sont des claims quantitatives contredites par les sorties committées. Markdown-only (aucune cellule code touchée → pas de re-exécution, exception C.2).

Findings

F1 — durée par epoch (c.0 + c.3)

La carte d'en-tête annonce « les durées affichées sont mesurées sur GPU, ~6 s par epoch » et la section 3 répète « ~6 s par epoch sur RTX 3090 ». Les sorties committées montrent 6 lignes epoch toutes entre 3,1 et 4,0 s (3,7/3,1 en entraînement de base, 3,9/4,0 en LoRA, 3,8/3,8 en full). Le « ~6 s » date manifestement d'un run antérieur (dataloader ou machine différente). Fix : formulation qualitative « quelques secondes par epoch » aux deux endroits — portee de #20535 (constat du 13/10), qui ecarte le realignement chiffre « ~4 s / mesure 3,1-4,0 s » : un nombre de timing ecrit en dur sur un carnet re-executable localement (CPU suffit) redevient perime a la prochaine variation de machine ou de charge, soit exactement la classe de derive que l'audit corrige (C.4). La fourchette mesuree reste lisible dans les sorties commitees des cellules d'entrainement.

F2 — ordres de grandeur du contrôle float64 (c.22)

La lecture dit : « la même comparaison en double précision tombe de près de trois ordres de grandeur plus bas ». Les sorties committées : drift32 = 1.907e-06, drift64 = 3.109e-15 — ratio 6,1×10⁸, soit 8,8 ordres de grandeur (cohérent avec le rapport des epsilons float32/float64 ≈ 5,5×10⁸, que la cellule imprime elle-même : « epsilon ~2e-16 »). « Trois » est faux d'un facteur ~10⁶. Fix : « près de neuf ordres de grandeur ».

Preuves

  • Diff : 4 insertions / 4 délétions, 2 cellules markdown (c.0, c.3) + 1 (c.22) — aucune cellule code touchée, exec 1-11 et outputs committés inchangés (C.2 OK sans re-exec).
  • Vérifs rejects post-écriture : plus aucune occurrence de « ~6 s par epoch » ni « trois ordres de grandeur plus bas ».

Vérifiés OK sans finding (lecture intégrale, 30 cellules)

Toute l'arithmétique recoupe : 512×10=5 120 et 4×(512+10)=2 088 (40,8 %) ✓ ; 2 088 = r(d+k) mesuré ✓ ; 7 218 totaux (28,93 %) ✓ ; 0,2 % du delta à 4096×4096 ✓ ; 29 066 paramètres du CNN (160+4 640+18 496+5 770) ✓ ; budgets conv3 (1 152+256) et fc (2 344) = 3 752/32 818 (11,43 %) ✓ ; full 24 266/29 066 (83,49 %) ✓ ; « 6,5 fois plus » (6,47) ✓ ; exactitudes 0,8325/0,0363/0,7351/0,8242 toutes citées fidèlement (~0,83, ~0,04 sous le hasard 0,10, ~0,74, ~0,82) ✓ ; ||ΔW||/||W|| = 46 % ↔ « la moitié » ✓ ; ε float32 1,2e-7 et float64 ~2e-16 ✓ ; GPT-2 124 M ✓ ; exercices 1/2/3 stubs conformes C.1 (result = None # TODO etudiant + print).

Fusion de doublon (13/10)

#20535 auditait le meme carnet et le meme finding F1, avec un constat plus robuste sur la forme du correctif : qualitatif plutot que chiffre. Son constat a ete porte ici (commit ba93414ccd, deux cellules markdown, markdown-only) et #20535 est fermee au profit de cette PR — un carnet, une PR. Le reviewer tiers de #20535 (clusterManager-Myia, 2026-10-13T09:50:28Z) valide explicitement le choix qualitatif, en notant qu'une fourchette chiffree ecrite en dur redeviendrait perimee.

See #19451 (partition de #17073)

🤖 Generated with Claude Code

… et ordres de grandeur float64 (3 -> 9)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@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

⚠️ 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

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2025:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-12) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.3s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.6s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 25.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.2s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 16.2s

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

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 11
  • 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)

…poch en qualitatif

La PR #20535 (constat du 13/10) remplace le realignement chiffre
"~4 s par epoch, mesure 3,1-4,0 s" par une formulation qualitative
"quelques secondes par epoch".

Motif (C.4, et verdict NanoClaw sur #20535) : un nombre de timing ecrit en
dur sur un carnet re-executable localement (CPU suffit) redevient perime a la
prochaine variation de machine ou de charge -- c'est exactement la classe de
derive que l'audit corrige. La fourchette mesuree reste lisible dans les
sorties commitees des cellules d'entrainement.

Le finding F2 de cette PR (trois -> neuf ordres de grandeur, controle
float64 sur c.22) est conserve tel quel.

Markdown-only : aucune cellule code touchee, outputs et execution_count 1-11
inchanges (exception C.2).

See #19451 (partition de #17073)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Oct 13, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 20489
head: ba93414
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 4e57cfcff14ba9613556982aa989f7fab0e6293e29cd85e9d618790c932a82ef
diff-files: 1
diff-additions: 4
diff-deletions: 4
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20489
organ-rc: 0
[/ADJOINT PREFLIGHT]

Verification du champ domain (lecture C.5 contre le head ba93414, notebook FT-00a) :

  • prose re-quantifiee « ~6 s par epoch » -> « quelques secondes par epoch » : sorties committes cell 14/18 (exec 5/7) = 3.1 a 4.0 s par epoch — conforme.
  • prose corrigee « trois ordres de grandeur » -> « pres de neuf ordres de grandeur » pour le controle float64 : sortie committe cell 21 (exec 8) = derive float32 1.907e-06 vs controle float64 3.109e-15, rapport 6.1e8 soit ~8.8 ordres — l'ancienne prose etait fausse contre la sortie, la nouvelle est la valeur committée.
  • exec_count non nul sur les cellules code (5, 7, 8, 11), 0 erreur dans les sorties, stub Exercice 3 conforme C.1.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue coordinateur à la tête exacte. Uniquement du markdown, aucune source de code touchée. « Quelques secondes par epoch » correspond aux sorties (3,1 à 4,0 s par epoch, cellules 7eb76d45 et 28aba3d4) ; l'ancien ~6 s était faux. « Près de neuf ordres de grandeur » correspond au contrôle float64 (1,9e-06 contre 3,1e-15, cellule 0ae9d3b8) ; l'ancien « trois » était faux. Carnet : séquence 1..11, 0 erreur. Approuvé.

@myia-ai-01
myia-ai-01 merged commit dd7140e into main Oct 13, 2026
96 of 113 checks passed
@jsboige
jsboige deleted the fix/17073-ft00a-audit branch October 16, 2026 12:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants