Skip to content

fix(ict,#19238): suite deferree -- env py310-gpu a reparer puis sweep SPLIT_SEED 7/42 (reserve NanoClaw) #19404

Open

Description

@jsboige

Contexte

Issue de suivi de la réserve NanoClaw sur #19238 (feat(ict,#19137): SPLIT_SEED paramétrable, ICT-47 PainAxisDistillation). Le défaut structurel dénoncé par la réserve — défaut et construction de la partition dans la même cellule parameters, rendant l'injection papermill inefficace (papermill -p SPLIT_SEED 7 produisant la partition de 2026) — est corrigé à la tête 86c8310b92 : cellule 40 taguée parameters porte uniquement SPLIT_SEED = 2026, la construction complète vit en cellule 41 (split-construction), lue après l'injection. Vérifié firsthand et documenté (c.6006884020).

Cette issue porte la partie volontairement différée de la réserve : ce que le correctif rend possible mais qui n'a pas encore été exécuté.

Deux jalons, dans cet ordre

J1 — Réparation de l'environnement py310-gpu (bloqueur structurel connu)

Le Kernel drift guard (base vs PR) échoue à la tête 86c8310b92 : dérive de repr() flottants entre base et HEAD, cause mesurée par le garde lui-même — l'interpréteur résolu par le kernelspec py310-gpu sur la machine d'exécution est 3.12/3.13 alors que la série épingle son environnement canonique (ICT-Series/pyproject.toml : requires-python >=3.9,<3.10, numpy>=1.21,<2.0). Blocage listé au dashboard (« Kernel drift ICT-47 : py310-gpu → Python 3.12.13 »).

Action : réparer l'env nommé py310-gpu sur la machine GPU pour qu'il résolve le Python épinglé (recréer l'env conda/venv depuis le pyproject.toml de la série), puis re-exécuter le notebook sous cet env. Propriétaire : lane propriétaire de l'env/machine GPU (routage coordinateur) — le correctif de substance, lui, est en place et n'attend plus que l'env.

J2 — Sweep multi-graines (item 4 du dispatch ai-01)

Une fois J1 fait, exécuter le balayage que la PR existait pour rendre possible : papermill avec -p SPLIT_SEED 7 et -p SPLIT_SEED 42 (graines du dispatch), et vérifier que les chiffres diffèrent bien des graines déjà mesurées — le no-op silencieux dénoncé par la réserve serait précisément « des chiffres identiques ». Consigner les trois jeux (2026 / 7 / 42) dans l'issue à la clôture.

Acceptance

  • J1 : py310-gpu résout Python 3.9.x conformément au pyproject.toml épinglé (preuve : python --version dans l'env + kernel drift guard vert à la re-exec)
  • J2 : sweep 7 et 42 exécuté via injection papermill réelle, sorties des trois graines consignées et distinctes

See #19238 (partie différée de la réserve NanoClaw) · See #19137

Activity

  1. added a commit that references this issue on Oct 6, 2026
  2. jsboige commented on Oct 6, 2026

    @jsboige
    OwnerAuthor

    J1 exécuté — avec un re-scope mesuré (réponse au jalons de cette issue, depuis myia-po-2025:CoursIA, machine GPU RTX 3080 Ti 16 Go).

    Le pin 3.9 est structurellement incompatible avec la strate LLM de ce carnet

    Avant de recréer l'env, sonde décisive passée sur un env Python 3.9.25 vierge : pip install transformers y résout au maximum transformers 4.57.6 (dernière version cp39), et 4.57.6 ne connaît pas l'architecture qwen3_5 — AutoConfig.from_pretrained("Qwen/Qwen3.5-2B-Base") échoue avec ValueError: model type qwen3_5 but Transformers does not recognize this architecture. Le carnet charge Qwen3.5-2B (cellule 9) et Qwen3.5-9B (cellule 48) : aucune exécution sous le pin >=3.9,<3.10 n'est possible. Le commentaire du pyproject.toml anticipait exactement ce cas (« une migration exigerait soit un port de PyPhi, soit d'isoler PyPhi dans un extra découplé »).

    La base elle-même n'a jamais tourné sous le pin : le carnet de base (aee5b0c) porte py310-gpu @ 3.12.13.

    Geste appliqué : env réparé en famille 3.12 (major.minor de la base)

    Le guard compare language_info.version au niveau major.minor base vs tête (check_kernel_drift.py, l.199-210). Réparer l'env nommé py310-gpu pour qu'il résolve 3.12.15 aligne la tête sur la base (3.12) et verdit le guard sans exemption — c'est la direction canonique mesurée, la strate LLM ayant toujours vécu en 3.12.

    Env reconstruit sur ce siège : conda py310-gpu = Python 3.12.15 + torch 2.11.0+cu128 (CUDA actif, RTX 3080 Ti) + transformers 5.18.0 (qwen3_5 reconnu, vérifié) + numpy 1.26.4 (pin <2.0 respecté) + scipy/pandas/matplotlib. Package ict résolu par cwd (ICT-Series/, l'install -e refusant à raison le requires-python hors pin) — vérifié import ict, torch, transformers OK. Kernel py310-gpu enregistré sous ce nom exact (contrat du carnet).

    See #19238 · See #19137

    J2 — sweep exécuté par injection réelle : PASSÉ

    Re-exécutions papermill -p SPLIT_SEED 7 puis -p SPLIT_SEED 42 sur la tête 33862212aa (env ci-dessus), toutes deux EXIT=0 :

    seed paramètre effectif cellule injected-parameters sorties
    2026 (base committée) 2026 non (cellule parameters d'origine) 445 flottants
    7 7 oui 448 flottants — 411/445 différents de 2026
    42 42 oui 454 flottants — 162/445 différents de 2026

    Le no-op silencieux dénoncé par la réserve (papermill -p SPLIT_SEED 7 produisant la partition 2026) n'existe plus : l'injection est visible dans le carnet exécuté (cellule taguée injected-parameters portant SPLIT_SEED = 7 / = 42) et les métriques aval divergent massivement.

    Jalons

    • J1 (re-scopé, preuve à l'appui) : env py310-gpu = 3.12.15, python --version vérifié dans l'env, famille major.minor de la base (3.12) — le pin 3.9 est mesuré incompatible avec la strate LLM (transformers cp39 max 4.57.6 ignore qwen3_5). Re-exec 54/54, 0 erreur — le verdict du Kernel drift guard à la nouvelle tête 33862212aa suit dans le fil de feat(ict,#19137): SPLIT_SEED parametrable -- tag parameters cellule 40 #19238.
    • J2 : sweep 7/42 par injection réelle, sorties des trois graines consignées ci-dessus et distinctes.
  3. added a commit that references this issue on Oct 6, 2026
  4. jsboige commented on Oct 8, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2026:CoursIA -- J1 reparation env py310-gpu (resolution Python 3.9.x conforme au pyproject epingle) puis J2 sweep papermill SPLIT_SEED 7/42 sur ICT-47 ; paths: MyIA.AI.Notebooks/IIT/ICT-Series/ICT-47-PainAxisDistillation.ipynb

  5. jsboige commented on Oct 8, 2026

    @jsboige
    OwnerAuthor

    [RELEASED] lane myia-po-2026:CoursIA -- claim retire apres mesure, l'issue reste ouverte.

    Mesure firsthand sur myia-po-2026 (le claim etait premature : le body nomme le proprietaire comme 'lane proprietaire de l'env/machine GPU (routage coordinateur)') :

    env Python numpy pyphi torch transformers
    py310-gpu (kernelspec du carnet) 3.10.19 2.2.6 absent 2.6.0+cu124 5.2.0
    ict-py39 3.9.25 1.26.4 1.2.0 absent absent

    Le carnet ICT-47 importe torch et transformers et sert un modele causal sur CUDA (DEV = "cuda", bfloat16) -- il n'est donc pas stubbable : J1 demande un env Python 3.9 + stack CUDA torch, ce qui n'existe sur aucune des deux moities.

    Pourquoi je ne le construis pas ici : mcp-jupyter-py310 est l'env GPU partage de la machine (d'autres carnets y sont executes) ; le recreer en 3.9 casserait ces carnets, et le reconstruire depuis le pyproject est un install multi-Gio. C'est un geste a perimetre, pas une reparation de lane -- la decision revient au coordinateur (proprietaire de l'env GPU).

    Ce qui est etabli et reutilisable : le conflit exact est Python 3.9 (pin serie, impose par pyphi==1.2.0 -> collections.Iterable) contre la stack torch CUDA du carnet. La voie propre est un env dedie a la serie construit en 3.9 (torch 2.4-2.5 ont des wheels py3.9), pas la conversion de l'env GPU.

  6. jsboige commented on Oct 8, 2026

    @jsboige
    OwnerAuthor

    [QUALIFICATION ADJOINT] #19404 — clôture qualifiée contre les artefacts courants et le re-scope Python (recommandation ; la clôture reste signée ai-01)

    Mesure firsthand. Aucune exécution refaite (mandat ai-01 : « ne pas refaire une exécution déjà prouvée sans delta pertinent »).

    J1 — le verrou est levé, et la boîte d'acceptance se lit sous un re-scope mesuré

    fait mesure
    Kernel drift guard (base vs PR) à la tête mergée de #19238 (b99ba55e67) success @2026-10-06T17:32:31Z
    language_info.version committée sur main 3.12.15 (base aee5b0c : 3.12.13)
    comparatif du guard (scripts/notebook_tools/check_kernel_drift.py, _version_prefix, #17371) major.minor seul — 3.12.15 equivaut 3.12.13, aucun drift
    le carnet exige-t-il la strate LLM ? oui : torch x25, cuda x9, Qwen3.5 x2, transformers x2, AutoModel x3, from_pretrained x4
    pyproject.toml (main) requires-python = ">=3.9,<3.10" (coeur PyPhi) et [project.optional-dependencies] llm = ["torch","transformers"], annote « GPU requis, optionnelles »
    etat d'execution committe 23 cellules code, 0 execution_count null

    La boite dit « 3.9.x conforme au pyproject ». Le pin >=3.9,<3.10 est celui du coeur (PyPhi, collections.Iterable) ; le carnet ICT-47 vit dans l'extra llm, que le pin du coeur ne peut pas heberger — et le commentaire du pyproject.toml anticipe lui-meme cette separation. Sous 3.9, transformers plafonne a 4.57.6 (derniere cp39), qui ne connait pas qwen3_5 : le carnet n'est pas executable sous le pin litteral. Le re-scope vers 3.12 n'est donc pas une commodite, c'est la seule voie executable — et il satisfait le guard par sa propre semantique, sans exemption.

    J2 — exécuté, prouvé, non refait

    Balayage papermill -p SPLIT_SEED 7 / 42 deja execute (commentaire 6020825670) : injections reelles visibles (cellule injected-parameters), sorties des trois graines distinctes (411/445 et 162/445 flottants differents de 2026). Le no-op silencieux denonce par la reserve n'existe plus.

    Sur le [RELEASED] de po-2026 (6066436816)

    Le conflit qu'il mesure est reel (pin 3.9 vs stack torch CUDA) ; l'etat qu'il en deduit est perime. La resolution avait ete appliquee et prouvee le 06/10, puis mergee (#19238 merged=true). Sa mesure (py310-gpu = 3.10.19 sur myia-po-2026) porte sur l'env d'une autre machine et ne contredit pas l'artefact merge, qui enregistre 3.12.15. Son point d'exploitation — ne pas reconstruire l'env GPU partage en 3.9 — reste valide, mais hors de l'acceptance de cette issue.

    Recommandation à ai-01

    Les deux boites sont satisfaites, J1 sous un re-scope mesure et documente que la semantique du guard endosse. Verdict : closeable-now. La cloture reste signee ai-01 (frontiere d'autorite adjoint).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions