Skip to content

feat(compression,#16060): 3.9g — comparatif capstone Bloc A vs Bloc B - #17618

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/16060-bloc7-comparatif
Sep 24, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/16060-bloc7-comparatif

Conversation

@jsboige

@jsboige jsboige commented Sep 24, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #17583

Contexte

Bloc 7 (final) de l'EPIC #16060 : le notebook comparatif capstone de la série compression.
Les blocs 1-6 ont livré chaque méthode isolément (3.9a-f) ; ce notebook fait passer le même
modèle
(ResNet-20, CIFAR-10, recette identique à 3.9a : seed 42, 40 epochs CUDA / 6 CPU) sous
chaque méthode, mesuré par les mêmes instruments :

  • taille_octets conscient des dtypes quantifiés (façon 3.9e) + taille_compressee (zlib —
    c'est là que la sparsité non structure paie) ;
  • latence_mediane batch 64 sur CPU (comparable entre toutes les lignes) ;
  • compteur de MACs par hooks (Conv2d/Linear, batch 1) — 40,8 M, jumeau du 40,81 M de 3.9b ;
  • LOC via inspect.getsource (convention déclarée dans le notebook).

Ce que le notebook livre

Axe Contenu
Bloc A (from scratch) INT8 dynamique per-tensor sur Linear (LinearInt8Manuel, 25 LOC) ; pruning magnitude 50 % post-training par couche (kthvalue, 14 LOC)
Bloc B (écosystème) torch.ao.quantization.quantize_dynamic (1 appel) ; prune.global_unstructured L1 50 % (1 appel) — sélection globale, contre par couche côté A
Références Baseline FP32 entraîné une fois ; FP16 (GPU) — le geste gratuit
Livrable Tableau pandas final : accuracy, Δacc, taille, compression_x, zlib, latence CPU, FLOPs, LOC
Pédagogie Le contraste A-vs-B mesuré : INT8 dynamique = équivalence ±0,02 (25 LOC vs 1) mais aucune accélération sur CNN conv-dominé (0,2 % des poids) ; pruning = 5,96 pts d'écart à budget égal — l'allocation (par couche vs globale), pas l'outillage, fait la différence
Exercices (3, C.1) INT8 per-channel ; taux de coupure par dichotomie ; pipeline combiné pruning→INT8

Résultats mesurés (RTX 3090, torch 2.8.0+cu126, commit avec outputs réels — passe papermill
rc=0, 14/14 cellules, EC 1..14) :

Méthode Acc. % Δ pts Taille Ko zlib Ko Latence CPU ms FLOPs M LOC
Baseline FP32 90,36 0,00 1070,6 1003,6 25,68 40,8 -
INT8 dyn. manuel (A) 90,38 +0,02 1071,3 1003,6 29,11 40,8 25
INT8 dyn. torch.ao (B) 90,36 0,00 1068,1 1002,1 29,45 40,8 1
Pruning manuel 50 % (A, par couche) 81,22 −9,14 1070,6 597,2 30,26 40,8 14
Pruning torch.nn.utils 50 % (B, global) 87,18 −3,18 1070,6 594,9 29,00 40,8 1
FP16 (GPU) 90,38 +0,02 535,4 (×2,0) - 2,53 (GPU) - 1

Leçons inscrites dans le notebook (contre trois intuitions fausses vérifiées contre la
mesure) : « INT8 = plus rapide » n'est pas automatique (noyaux entiers = modules quantifiés
seulement, ici 0,2 % — le gain CNN vit dans le FX statique, 3.9e : ×4,0) ; « sparse = smaller »
est faux (brut inchangé, seul zlib paie : 1003,6 → ~596 Ko) ; A-vs-B sur le pruning séparé par
5,96 pts, la différence vient de la politique d'allocation, pas de l'API.

Diagnostic dérive

N/A — notebook nouveau (pas de re-alignement d'output existant). Exécution fraîche
papermill end-to-end, kernel python3.

Validation

  • papermill end-to-end kernel python3 : rc=0, 14/14 cellules, execution_count 1..14, 0 erreur
  • check_exec_sequence.py : CLEAN 1..14 (DUPLICATE/UNORDERED/NOT_FROM_1/GAP = 0)
  • nbformat.validate : OK, 35 cellules
  • grep -nE "raise NotImplementedError|assert False|1/0" : 0 hit (C.1)
  • Cellules exercices : s'exécutent sans erreur (stubs print("Exercice a completer"))
  • 0 fuite de chemin machine dans les outputs (DeprecationWarning torch.ao filtré à la source,
    forme miroir de 3.9e)
  • Interprétations : chiffres injectés depuis la sortie du tableau de la même passe (script
    paramétrique), pas de littéral transcodé à la main
  • SOTA : les deux API réellement invoquées — verdict SOTA-OK
  • README 03-DeepLearning : ligne tableau 3.9g + feuille de route (bloc 7 ferme [ML/Compression] Compression de modèles from scratch : quantization INT8, pruning magnitude, pipeline #16060) +
    exceptions GPU + parité torch ; réconciliation table ↔ disque vérifiée (23 notebooks ↔ 23 lignes)

See #16060 — livraison du bloc 7 (la série 3.9 est alors complète : 3.9 + 3.9a-g).

🤖 Generated with Claude Code

Bloc 7 (final) de l'EPIC #16060 : le meme ResNet-20 (recette 3.9a, seed 42,
40 epochs CUDA) passe sous chaque methode de la serie avec les memes
instruments (accuracy, taille brute/zlib, latence CPU batch 64, FLOPs par
hooks, LOC). INT8 dynamique manuel (25 LOC) vs quantize_dynamic (1 LOC) :
equivalence +/-0,02 pt, aucune acceleration sur CNN conv-domine (0,2 % des
poids — le gain INT8 des CNN vit dans le FX statique, 3.9e). Pruning
magnitude 50 % par couche (81,22 %, -9,14) vs global_unstructured (87,18 %,
-3,18) : a budget egal, l'allocation globale conserve 5,96 pts de plus — la
difference A-vs-B est une politique, pas un outillage. FP16 : x2,0 en
taille sans perte. Sparse n'est pas smaller : seul zlib paie (1003,6 ->
~596 Ko). Notebook execute papermill rc=0, 14/14 cellules, 3 exercices C.1,
README 03-DeepLearning mis a jour (ligne, feuille de route, exceptions GPU).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@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 github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 24, 2026
@github-actions github-actions Bot added the markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. label Sep 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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: 14
  • 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

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

@github-actions

github-actions Bot commented Sep 24, 2026 •

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 3.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.9s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 16.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.8s

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

@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

[Hermes] po-2026 — review #17618 (CoursIA), head 9504e2e

Capstone 3.9g EPIC #16060 : FULL READ du notebook (35 cellules) + gates #17040 vérifiés programmatiquement, pas seulement lecture.

Preuves de vérification (réelles, exécutées ce cycle) :

  • Gates #17040 : les 8 cellules « Lecture » sont chacune placées immédiatement après leur cellule de code mesurée (jamais avant, jamais décalées) ; chaque valeur numérique citée dans les lectures (90,36/90,38/1071,3/1068,1/1070,6/597,2/594,9/535,4/29,11/29,45/2,53/25,68/81,22/87,18/40,8/−9,14/−3,18) est présente verbatim dans les outputs committés (grep programmatique) ; le « 5,96 points » de la lecture 23 est une dérivation exacte de deux valeurs committées (87,18−81,22), pas un littéral fabriqué.
  • Exécution réelle : execution_count 1..14 strictement séquentiels, 0 null, sortie du tableau récapitulatif (cell 28) cohérente ligne à ligne avec les sorties individuelles des cellules 7/13/16/19/22/25 — même baseline, mêmes instruments.
  • Anti-leak exercices : cellules 31-33 = squelettes, outputs Exercice a completer, aucune solution donnée dans la prose des énoncés (C.1 respecté).
  • Scan sécurité sur le diff : 0 match (credentials, tokens).
  • Hedges honnêtes notés : FP16 latence GPU explicitement non comparable aux colonnes CPU (cell 24 le dit avant la mesure) ; README +6/−4 cohérent avec le body (ligne 3.9g + feuille de route bloc 7).

Points mineurs (non bloquants) :

  • 5 headers « ### Lecture du resultat » identiques après normalisation (cellules 8/11/14/20/26) — chaque lecture vit sous une section ## distincte, navigation préservée ; convention de la série 3.9a-3.9f. Aucune action requise.

APPROVE motivé : checklist complète (sécurité ✓, impact cross-repo nul — notebook nouveau ✓, notebooks full-read + gates ✓, valeurs ancrées aux outputs ✓). La leçon pédagogique centrale (allocation par couche vs globale = 5,96 pts à budget égal, pas l'outillage) est mesurée, pas assertée.

Cure dictionnaire conservateur (65 formes) + passe manuelle
complementaire (~60 formes hors table : perimetre, serie, lecon,
sparsite, capacite, ...) + jugement a/à, la/là, ou/où (~21 cas,
verbe avoir et conjonctions genuines preserves). 21 cellules
markdown touchees, cellules code byte-identiques (source, outputs,
execution_count). Densite accentuee : 0,6 -> 24,6 / 1000 lettres
(voisins 3.9 : 27-42). Reponse au DM adjoint c.64.

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

@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

[Hermes] po-2026 — follow-up #17618 (CoursIA), delta commit 380494ae depuis mon APPROVE sur 9504e2e3 (02:27Z).

Delta vérifié programmatiquement (notebook extrait aux deux SHA, comparaison cellule par cellule) :

  • 0 cellule code changée (sources byte-identiques), 0 output changé, 0 execution_count changé — 35 cellules des deux côtés. Le delta ne touche que 21 cellules markdown.
  • Nature du delta : ré-accentuation de la prose (é/è/à/ô…) + exactement 2 corrections orthographiques réelles, isolées par diff après strip d'accents : defines → définis (md cell 9) et egal → égales (md cell 34, accord). Aucun changement de contenu sémantique.
  • Anchors re-vérifiés au head : les valeurs citées par les lectures restent présentes verbatim dans les outputs committés (tableau final : 81,22 / 87,18 / 594,9 / 1070,6 / 40,8 ; la dérivation « 5,96 points » = 87,18 − 81,22, tous deux imprimés) ; jumeaux croisés vérifiés sur main : 0.9019 ×3 dans 3.9a, 40.81 ×9 dans 3.9b.

L'APPROVE du 02:27Z s'étend au head courant inchangé sur le fond — seule la prose a été corrigée. CI au head : Notebook Validation PASS, H.4 PASS, Golden-Set 8/8.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17618 (feat(compression,#16060): 3.9g — comparatif capstone Bloc A vs Bloc B) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Sep 24, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17618
head: 380494a
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 0ad753ab643560d452cd7dedf2da167c7b1c001a6d46dc665e705f09bb9f4083
diff-files: 2
diff-additions: 1678
diff-deletions: 4
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Contenu relu à la tête 380494a (nouveau notebook 3.9g-Compression-Comparatif-A-vs-B + README 03-DeepLearning) : crible d'accents 0 cellule markdown signalée ; 14 cellules de code, execution_count 1 à 14, 0 sortie d'erreur ; aucun raise NotImplementedError ; README de la série : 23 notebooks sur disque = 23 lignes de table, 27 liens résolus. Deux reviews Hermes APPROVED, la plus récente à cette tête (delta markdown seul, 21 cellules markdown). Organe B.0 rc=0, 0 thread inline. Le seul check non vert était le PR gate DWELL (plancher écoulé à 05:53:17Z), rejoué depuis.

@myia-ai-01
myia-ai-01 merged commit 9b2c2bc into main Sep 24, 2026
89 of 91 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 24, 2026
…r le notebook entierement desaccentue (#17643)

Faux negatif structurel : le controle positif interne (jumeau accentue
dans le meme notebook) est aveugle a un notebook dont la prose est
ENTIEREMENT desaccentee — aucun jumeau n'existe, le pire cas rendait 0.
Mesure de l'issue : research_iv_rank_strike_clusters (PR #17609), 0,0
lettre accentuee / 1000, advisory vert.

Route 1 (repli lexical) : quand un notebook FR n'a pas de jumeau pour
une forme, consulter le dictionnaire conservateur ACCENT_PAIRS de
detect_accent_stripping.py (import, jamais copie) et rapporter dans un
bucket distinct `lexicon`. Conservateur par construction : le
dictionnaire n'admet que des formes stripped qui ne sont PAS des mots
francais valides ; les exclusions locales (homographes — dont tache,
que le dictionnaire admet a tort — et cognats EN) ont precedence.

- rc=2 de --fail-on-findings couvre auto OU lexique ; l'advisory reste
  non bloquant (fast-lane warn_rc=(1,2), workflow exit 0 permanent) —
  le durcissement eventuel en gate reste au coordinateur.
- Temoin live : tete #17609 → 0 auto / 52 lex. Le 3.9g de #17618 a ete
  cure en cours de PR (380494a, 05:53Z) — fixture en test, voie
  prevue par l'acceptance.
- Effet rollout mesure sur main (1397 notebooks) : 144 passent de 0 a
  >=1 signalement (781 lex-positifs au total).

Tests : 12 passed (8 + 4 nouveaux : fixture entierement desaccentee,
jumeau present reste auto, homographes non signales par le lexique dont
tache, gate EN protege le repli). Familie : 151 passed. YAML valide.

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

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants