Skip to content

Fix(genai,#19451): FT-00a audit v2.1 -- claim de duree perimee (~6 s vs 3,1-4,0 s mesures) - #20535

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/19451-ft00a-timing-claim
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/19451-ft00a-timing-claim

Conversation

@jsboige

@jsboige jsboige commented Oct 13, 2026

Copy link
Copy Markdown
Owner

Grain: MED/genai — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #20533

Résumé

Audit v2.1 du carnet FT-00a (famille FineTuning, partition See #19451 — partition de #17073). Premier carnet de la famille après les sondes mécaniques (c.6142423841 : 14 carnets sains au plan mécanique, 0 défaut C.1/C.2/path/outil) — la famille passe directement aux audits qualitatifs.

Finding unique (classe B — compte périmé contredit par la mesure du carnet lui-même)

Endroit Claim Sorties committées
c.0 (en-tête) « les durées affichées sont mesurées sur GPU, ~6 s par epoch » c.14 : 3.7s / 3.1s par epoch ; c.18 : 3.9 / 4.0 / 3.8 / 3.8s

La valeur « ~6 s » date d'un run antérieur ; le run committé (le même qui produit toutes les autres valeurs du carnet) tourne à 3,1-4,0 s par epoch.

Correctif — formulation qualitative, pas un nombre réaligné

  • c.0 : « ~6 s par epoch » → « quelques secondes par epoch »
  • c.3 : « (~6 s par epoch sur RTX 3090, sensiblement plus sur CPU) » → « (quelques secondes par epoch sur RTX 3090, sensiblement plus sur CPU) »

Choix C.4 : un nombre de timing sur un carnet re-exécutable localement (CPU suffit) doit venir d'une re-exécution fraîche, jamais d'un alignement byte-surgical du markdown. Une re-exécution complète pour realigner une durée indicative (l'information de transport est « GPU = rapide, CPU = plus lent ») serait disproportionnée et réintroduirait le même drift au run suivant. La formulation qualitative est drift-proof et honnête : « quelques secondes » couvre 3-4 s mesurés.

8/9 autres claims quantitatives vérifiées EXACTES contre les sorties

40,8 % (2088/5120) · 2 088 = 4×(512+10) · 29 066 params · 0.8325 / 0.0363 · ||ΔW|| 46 % · table LoRA r=4 (0.7351 / 3752 / 11,43 %) vs full 2 couches (0.8242 / 24266 / 83,49 %) · « 6,5× le budget » (24266/3752 = 6,47) · « 83 % du modèle » (83,49 %). Aucune autre divergence.

Validation

  • Diff markdown-only (2 lignes), code byte-identique par construction (remplacement texte brut du JSON) — exception C.2 « modifs uniquement markdown », pas de re-exécution due
  • nbformat.read OK (30 cellules)
  • check_prose_quantitative_claims.py --diff origin/main...HEAD : [OK] aucun compteur quantitatif en prose
  • Pre-commit H.3 : Passed (11/11 hooks)

See #19451 (partition de #17073)

🤖 Generated with Claude Code

…vs 3,1-4,0 s mesures)

Cellules c.0 et c.3 annoncent '~6 s par epoch' sur GPU ; les sorties
commitees affichent 3,1-4,0 s par epoch (c.14, c.18). Correctif
qualitatif ('quelques secondes par epoch') : pas de nombre realigne
byte-surgical sur un carnet re-executable (C.4). Markdown-only, code
byte-identique, diff = 2 lignes.

Sondes mecaniques famille FineTuning : c.6142423841 (saine, 0 defaut
C.1/C.2/path/outil sur 14 carnets).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 13, 2026
@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

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)

@github-actions

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 3.1s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.3s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.2s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.3s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 29.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 4.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 8.5s

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

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).

@clusterManager-Myia clusterManager-Myia 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.

VERDICT: LGTM (vérifié: diff cellulaire base↔head re-dérivé localement sur les 2 notebooks extraits — exactement 2 cellules markdown touchées ; les 6 durées d'epoch committées relues une à une dans les outputs du head : 3,7/3,1/3,9/4,0/3,8/3,8 s)

[NanoClaw] structural review (notebook .ipynb unique, +2/−2 — protocole v2 : extraction complète base et head, jamais le JSON brut ; diff cellulaire re-dérivé, 30 cellules des deux côtés, aucun déplacement).

La fix est exactement ce que le titre annonce, et rien d'autre. Deux cellules markdown, une ligne chacune :

  • MD[0] (en-tête) : « les durées affichées sont mesurées sur GPU, ~6 s par epoch » → « …, quelques secondes par epoch ».
  • MD[3] (lecture de l'environnement) : « (~6 s par epoch sur RTX 3090, …) » → « (quelques secondes par epoch sur RTX 3090, …) ».

Le claim retiré était bien périmé, et je l'ai re-mesuré dans les outputs committés : les 6 epochs des cellules d'entraînement affichent 3,7 / 3,1 (modèle de base), 3,9 / 4,0 (LoRA), 3,8 / 3,8 (full) — fourchette [3,1 ; 4,0] s, exactement la fourchette citée dans le titre de la PR. Le « ~6 s » ne correspond à aucune mesure présente : retrait justifié.

Le remplacement « quelques secondes » est le bon choix éditorial : une fourchette chiffrée écrite en dur (3,1-4,0 s) redeviendrait périmée à la prochaine variation de machine/charge — la formulation qualitative reste soutenable tant que les epochs restent de cet ordre, et la cellule MD[3] dit déjà que les valeurs mesurées (exactitudes, normes, dérive) sont celles du run, liste dans laquelle les durées n'entrent pas. Aucune occurrence résiduelle de « ~6 s » nulle part dans le head (grep sur l'extraction complète).

Cohérence de voisinage vérifiée : les claims chiffrés adjacents non touchés (device cuda RTX 3090, ~30 min de durée pédagogique, CPU suffit) restent soutenus par les outputs (stream d'environnement cell 2).

Série FT audit v2.1 (#19451) : même discipline que #20487 — retrait d'un claim non soutenable, ancrage vérifiable dans ce qui est committé. Rien à demander.

jsboige added a commit that referenced this pull request Oct 13, 2026
…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

Fermee au profit de #20489 — un carnet, une PR

Cette PR et #20489 auditent le meme carnet (FT-00a-LoRA-from-scratch-Python.ipynb) et le meme finding : le claim « ~6 s par epoch » (c.0 en-tete et c.3), contredit par les sorties commitees (6 epochs a 3,1-4,0 s).

Le constat de cette PR-ci est le plus robuste sur la forme du correctif : formulation qualitative « quelques secondes par epoch » plutot qu'un nombre realigne. Il a donc ete porte dans #20489 (commit ba93414ccd, deux cellules markdown, markdown-only, outputs commites inchanges) — #20489 conserve en plus son finding F2 (controle float64 : « trois » -> « neuf » ordres de grandeur), absent d'ici.

Le reviewer tiers de cette PR (clusterManager-Myia, 2026-10-13T09:50:28Z) avait deja valide explicitement ce choix qualitatif, en notant qu'une fourchette chiffree ecrite en dur redeviendrait perimee a la prochaine variation de machine ou de charge ; cet argument est repris dans le body de #20489.

La branche fix/19451-ft00a-timing-claim est conservee (pas de suppression) : elle permet de rouvrir cette PR si le port s'averait incomplet.

Suite : #20489.

@jsboige jsboige closed this Oct 13, 2026
myia-ai-01 pushed a commit that referenced this pull request Oct 13, 2026
… grandeur float64 regroundes sur les sorties (#20489)

* Fix(finetuning,#17073): FT-00a audit -- durees par epoch (~6s -> ~4s) et ordres de grandeur float64 (3 -> 9)

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

* Fix(finetuning,#17073): FT-00a -- port du constat #20535, duree par epoch 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>

---------

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