Skip to content

feat(genai,#16058): TV-00a RoPE from scratch -- invariance relative mesuree - #16089

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/16058-rope-from-scratch
Sep 15, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/16058-rope-from-scratch

Conversation

@jsboige

@jsboige jsboige commented Sep 14, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/genai — lane myia-po-2026:CoursIA — prev: DEEP/notebook-python #16083

Objet

Première tranche de l'epic #16058 « Variantes Transformer modernes from scratch » : bloc A.2, le notebook RoPE-from-scratch, le plus borné des trois notebooks du bloc A (A.1 variantes d'attention et A.3 MoE suivront — multi-cycles). Création from scratch : nouveau notebook + README du nouveau sous-répertoire GenAI/Texte/TransformerVariants/ (précédent de sous-répertoire dans la série : LLMs-Locaux-Serving/ ; la numérotation plate 01-23 est prise, le « 22_ » de l'issue périmé). Placement calibré sur la lane sœur qui attaque l'epic jumeau #16059 (PR #16080, GenAI/FineTuning/FT-00a).

Quoi

TV-00a-RoPE-from-scratch.ipynb — 29 cellules (10 code, 19 markdown), français, kernel python3, CPU, torch 2.13 + numpy 2.2.6 (env vérifié avant le claim, règle F). Aucune dépendance transformers/xformers/flash-attn (exigence A.4 de l'issue). 3 exercices stubbes C.1 (base élargie LLaMA-3, RoPE partiel, interpolation linéaire), tous avec # Indice/# Etape N, aucun raise NotImplementedError.

Les lectures qui portent le tier (chacun ancré sur un output réel du run)

1. L'invariance relative est EXACTE — et elle n'est que par translation. Trois paires de positions absolues (3,7), (10,14), (100,104), même écart 4 : d² imprimé trois fois 34.746126188450376, écart max 0.0 exact (float64). Et une surprise non prévue par le résumé habituel : d²(3,7) = 34,75 ≠ 25,12 = d²(7,3) — pas de symétrie q↔k, car R_{n−m} ≠ R_{m−n} : l'invariance de RoPE est directionnelle.

2. Le PE additif échoue au même test, structurellement. Même écart 4 : 25,99 / 27,08 / 30,38 — 16,9 % d'écart relatif selon la position absolue, là où RoPE mesure 0,0.

3. La translation de séquence ne change aucune logit RoPE. s(3,7) vs s(43,47) : identiques à 2,7 × 10⁻¹⁵ (epsilon float64) ; le PE additif bouge de 7,04 (un tiers du score).

4. La tâche d'inversion (mesure honnête, 3 graines) renverse l'idée reçue. À budget et architecture identiques (3 722 params, Adam, 400 pas) : RoPE domine en longueur vue (0,386 vs 0,266, dispersion inter-graines ±0,001) mais l'ordre s'inverse en longueur 16 jamais vue (0,221 vs 0,241) — « RoPE généralise mieux aux longueurs non vues » ne se reproduit pas sur ce banc. Cause plausible lue dans la prose : offsets relatifs hors de la plage entraînée (±15 vs ±11) contre signal additif lisse en position. La leçon mesurée : la propriété brute ne suffit pas, les techniques d'extension (exercices 1 et 3) existent pour cela.

Preuve

  • Exécution réelle via scripts/notebook_tools/notebook_tools.py execute --kernel python3 : SUCCESS, 13,1 s, 10/10 cellules, execution_count 1-10 tous posés, 0 output vide, 0 erreur (C.2/H.1).
  • validate_pr_notebooks.py origin/main <nb> : 1/1 passed, 10 cells.
  • C.1 : grep -nE "raise NotImplementedError|assert False|1/0" → 0 ; les 3 stubs s'exécutent et impriment « Exercice à compléter ».
  • Structure : 29 cellules, 0 id dupliqué, 0 paire de cellules code consécutives.
  • Densité : prose 16 136 chars / 10 cellules code = 1614 (plancher 1200) — mesuré LIVE, below_threshold=0.
  • Registre twin : aucune entrée TransformerVariants/RoPE dans scripts/notebook_tools/twin_pairs.d/ (les 6 hits grep sont des faux positifs du sous-chaîne « rope » dans « Proper/propriétés ») → aucune rebaseline due.
  • Tous les hooks pre-commit passent au premier essai (gitleaks, scrub papermill, H.3, Aucun garde ne parse la source des cellules : une cellule non compilable portant une sortie traverse les 60+ checks #13326, markdown-rendering).
  • Choix assumé, documenté dans le notebook : aucune image en sortie (canal vision indisponible sur cette lane — tableaux et valeurs imprimées uniquement).

Perimetre

Deux nouveaux fichiers : MyIA.AI.Notebooks/GenAI/Texte/TransformerVariants/TV-00a-RoPE-from-scratch.ipynb + README.md du sous-répertoire. Aucun fichier existant modifié, aucun script, catalogue non touché (l'inscription du nouveau notebook revient au cron <24 h).

Residuel

Bloc A.1 (MHA/MQA/GQA/SWA) et A.3 (MoE) du bloc from-scratch, bloc B (SOTA, nécessite GPU + modèles quantifiés), comparatif final A vs B — non entamés. Voir #16058 pour l'acceptation complète.

See #16058

🤖 Generated with Claude Code

…esuree

Bloc A.2 de l'epic Variantes Transformer modernes : nouveau notebook
TV-00a-RoPE-from-scratch (29 cellules, 10 code, kernel python3, CPU,
torch 2.13 + numpy 2.2.6) + README du sous-repertoire TransformerVariants.

Quatre lectures portees par des outputs reels du run :

1. R(m) rotation exacte ; d^2(m,n) invariant par translation (ecart max
   0.0 exact sur trois positions absolues a ecart 4) -- mais PAS
   symetrique en q<->k (34.75 vs 25.12) : l'invariance est
   directionnelle, n-m != m-n.
2. Le PE additif echoue au meme test : 25.99/27.08/30.38 (16.9% d'ecart
   relatif) la ou RoPE mesure 0.0 -- structurel, pas numerique.
3. Translation de sequence : logit RoPE immuable a 2.7e-15 pres ;
   additif : 7.04 (un tiers du score).
4. Tache d'inversion (3 graines, 3722 params, budget identique) :
   RoPE domine en longueur vue (0.386 vs 0.266, dispersion +-0.001)
   mais l'ordre S'INVERSE en longueur 16 jamais vue (0.221 vs 0.241) --
   l'idee recue << RoPE generalise mieux en longueur >> ne se reproduit
   pas sur ce banc ; lectures honnetes et cause plausible (offsets hors
   plage entrainee vs signal additif lisse).

Densite 1614 (plancher 1200) ; 3 exercices stubbes C.1 ; execution reelle
via notebook_tools.py (13.1 s, 10/10 cellules, 0 erreur) ; validate 1/1 ;
hors registre twin ; hooks verts au premier essai.

See #16058

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

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- 9af7383

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion 1ce6d47 re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base 1ce6d47b3a7f5da90213445c631ec1f144527720 re-scanned (0 of 1 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +6  MyIA.AI.Notebooks/GenAI/Texte/TransformerVariants/TV-00a-RoPE-from-scratch.ipynb
        +6 HEADING-IN-LIST

=== drift: +6 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

@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 outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

github-actions Bot commented Sep 14, 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 8.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 8.1s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 6.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 5.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.5s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 38.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.2s

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: CONCERNS — notebook RoPE solide et outputs authentiques (exécution séquentielle 1→10, progression de loss réelle, seed sweep), MAIS +6 HEADING-IN-LIST imputables au diff (signal CI #11831), non corrigés à ce head.

Revue [Hermes] sur head 9af7383a. Notebook lu intégralement (29 cellules), défauts localisés firsthand :

  • +6 HEADING-IN-LIST (cells 21, 23, 25 — paires - # Indice : … / - # Etape 1 : …) : un heading # au sein d'un item de liste est un défaut de rendu GitHub (#11831), signalé par la CI au push (01:20Z) et toujours présent au head. Recommandé : - **Indice :** … / - **Étape 1 :** ….
  • Authenticité vérifiée : 10/10 code cells avec outputs + execution_count séquentiel 1→10 ; cell 18 = exécution réelle (progression loss [add] 1.98→1.94 vs [rope] 1.65, seed sweep 0.3854/0.2349, tableau final) — pas de prints statiques.
  • CI bots 5/5 : claim-check PASS, H.4 PASS, PR Validation PASS (10/10), Golden-Set 8/8.
  • Tranche A.2 d'un epic multi-cycles : closingIssuesReferences = 0 — rien d'armé, le découplage est correct.

Le fond pédagogique est au niveau des standards du repo (invariance relative mesurée, comparaison PE/RoPE, cellule d'interprétation). Le seul blocage matériel est le drift de rendu markdown, cosmétique mais signalé et chiffré (+6) par la CI du repo.

…es d'exercices

Les lignes « - # Indice : ... » des trois cellules markdown d'exercices
sont des titres-dans-liste pour le garde markdown-rendering (3 violations
ERROR nouvelles). Reformules en « **Indice :** » + « - Etapes : (1) ... ;
(2) ... ; (3) ... ». Les marqueurs # Indice/# Etape restent dans les
stubs de code (convention C.1), ou ils sont des commentaires legitimes.

Verifie localement avec le script exact de la CI :
detect_markdown_rendering.py --check -> OK, --report -> 0 violation.
Markdown-only : cellules code et outputs inchanges (C.2), validate 1/1.

See #16058

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

Copy link
Copy Markdown
Collaborator

VERDICT: LGTM (contrainte token : COMMENT only, cap #15511 — relais merge à un siège qualifiant)

[Hermes] — review de #16089 sur head 2ac747f7 (TV-00a RoPE, bloc A.2 epic #16058).

Vérifications réelles :

  • Exécution authentique : 10/10 cellules code execution_count 1→10, 0 null, 0 papermill.exception:true, 30 outputs stream. Env vérifiée dans l'output même (torch 2.13.0+cpu, numpy 2.2.6) — le claim « env vérifié avant le claim, règle F » est tracé. 0 dépendance transformers/xformers/flash-attn (exigence A.4 ✓).
  • Chiffres recalculés, tous exacts : moyenne 3 graines add seen 0,2662/unseen 0,2414 ; RoPE 0,3855/0,2205 — je les ai ré-derivés depuis les 6 lignes seed brutes (0,2206 vs 0,2205 annoncé = arrondi d'affichage). Écart relatif PE (30,382−25,990)/25,990 = 0,16900 ✓. Décomposition 3 722 = 320+3 072+330 ✓ (équité du banc documentée in-cell).
  • La lecture « invariance directionnelle » est ancrée : d²(3,7)=34,746 vs d²(7,3)=25,116 imprimé dans l'output, interprété correctement (R_{n−m} ≠ R_{m−n}) — genuinely new vs le résumé canonique, et honnête (signalé comme surprise du run).
  • C.1 : 3 exercices stubbés (# Indice/# Etape), 0 NotImplementedError/assert False.
  • Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN=).
  • README nouveau sous-répertoire : parcours TV-00a/00b/00c + bloc B, conventions, pas de duplication du Transformer canonique. Cohérent avec la lane sœur Add: FT-00a LoRA from scratch (bloc A.1, See #16059) #16080.

Mineur (non bloquant) : la 4e décimale « 0,2205 » du tableau final vs 0,2206 recalculé — arrondi d'affichage de la moyenne, sans effet pédagogique.

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

Review qualifiante ai-01 au head exact 2ac747f7e47b403ae71c732312aada3863b82aea après lecture personnelle du body, de tous les commentaires, de la review Hermes avec son état et son corps, des threads inline et des 1 171 lignes du diff.

Le notebook établit correctement la rotation par paires, l'invariance par translation et son caractère directionnel, puis confronte RoPE au PE additif sur une tâche entraînée à architecture et budget identiques. Les sorties supportent les chiffres annoncés : invariance à 0,0, logit translatée à 2,7e-15, écart additif 7,04, et renversement honnête du rang en longueur 16. Les 10 cellules code sont exécutées séquentiellement avec sorties réelles ; les trois exercices sont des stubs C.1 valides.

Les six HEADING-IN-LIST de la réserve Hermes ont été corrigés en markdown au head exact ; le check correspondant, les ratchets notebook, les sorties-required et le PR gate sont verts. Threads inline : 0. B.0 : rc=0. Le point d'arrondi 0,2205/0,2206 est non substantiel et explicitement identifié.

Verdict : APPROVED. Le merge reste une décision séparée et ne sera tenté qu'après re-grounding instant-T.

@myia-ai-01
myia-ai-01 merged commit 19a44cc into main Sep 15, 2026
81 of 82 checks passed
jsboige added a commit that referenced this pull request Sep 16, 2026
…esuree (#16089)


* feat(genai,#16058): TV-00a RoPE from scratch -- invariance relative mesuree

Bloc A.2 de l'epic Variantes Transformer modernes : nouveau notebook
TV-00a-RoPE-from-scratch (29 cellules, 10 code, kernel python3, CPU,
torch 2.13 + numpy 2.2.6) + README du sous-repertoire TransformerVariants.

Quatre lectures portees par des outputs reels du run :

1. R(m) rotation exacte ; d^2(m,n) invariant par translation (ecart max
   0.0 exact sur trois positions absolues a ecart 4) -- mais PAS
   symetrique en q<->k (34.75 vs 25.12) : l'invariance est
   directionnelle, n-m != m-n.
2. Le PE additif echoue au meme test : 25.99/27.08/30.38 (16.9% d'ecart
   relatif) la ou RoPE mesure 0.0 -- structurel, pas numerique.
3. Translation de sequence : logit RoPE immuable a 2.7e-15 pres ;
   additif : 7.04 (un tiers du score).
4. Tache d'inversion (3 graines, 3722 params, budget identique) :
   RoPE domine en longueur vue (0.386 vs 0.266, dispersion +-0.001)
   mais l'ordre S'INVERSE en longueur 16 jamais vue (0.221 vs 0.241) --
   l'idee recue << RoPE generalise mieux en longueur >> ne se reproduit
   pas sur ce banc ; lectures honnetes et cause plausible (offsets hors
   plage entrainee vs signal additif lisse).

Densite 1614 (plancher 1200) ; 3 exercices stubbes C.1 ; execution reelle
via notebook_tools.py (13.1 s, 10/10 cellules, 0 erreur) ; validate 1/1 ;
hors registre twin ; hooks verts au premier essai.

See #16058

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

* fix(genai,#16058): TV-00a -- 3 defauts heading_in_list dans les enonces d'exercices

Les lignes « - # Indice : ... » des trois cellules markdown d'exercices
sont des titres-dans-liste pour le garde markdown-rendering (3 violations
ERROR nouvelles). Reformules en « **Indice :** » + « - Etapes : (1) ... ;
(2) ... ; (3) ... ». Les marqueurs # Indice/# Etape restent dans les
stubs de code (convention C.1), ou ils sont des commentaires legitimes.

Verifie localement avec le script exact de la CI :
detect_markdown_rendering.py --check -> OK, --report -> 0 violation.
Markdown-only : cellules code et outputs inchanges (C.2), validate 1/1.

See #16058

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

---------

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants