Skip to content

Fix(genai,#23930): Demucs -- kernel canon 3.13.15, sorties propres, prose re-derivee - #23936

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/audio24-demucs-313
Nov 2, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/audio24-demucs-313

Conversation

@jsboige

@jsboige jsboige commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2027:CoursIA — prev: MED/notebook-python #23933

Contexte

Tranche 2 de #23930 (poche GenAI/Audio, 8 carnets hors canon 3.13 mesurés sur les blobs origin/main). 02-Advanced/02-4-Demucs-Source-Separation.ipynb était à language_info.version = 3.11.16 (kernel python3) ; il passe à 3.13.15 après ré-exécution réelle sous le kernel canon (C:\Program Files\Python313\python.exe).

Environnement réparé sans élévation (règle F). La sonde de la tranche avait montré demucs et torchaudio absents sous 3.13.15. Le site-packages machine (C:\Program Files\Python313\Lib\site-packages) est en lecture seule pour le jeton standard (mesuré : PermissionError), mais le site utilisateur (%APPDATA%\Python\Python313) est actif : pip install --user demucs torchaudio==2.6.0+cu124 a installé demucs 4.1.0 + torchaudio 2.6.0+cu124. torch reste inchangé à 2.6.0+cu124, cuda True — l'épinglage explicite de torchaudio est là parce qu'une installation non épinglée avait déjà fait remonter torch par le passé.

Barrière VRAM de la ligne 2 réfutée par mesure : le modèle tourne sur la RTX 4060 Laptop 8 Go de ce siège avec 0.64 GB alloués (segment 10 s, batch 1), très loin des 6 Go annoncés dans le tableau de #23930.

Preuve d'exécution

Papermill sous le kernel python3 canon, PM_RC=0 :

cells base=37 new=37 | lang base=3.11.16 new=3.13.15
code cells base=14 new=14
sources byte-identiques: 14/14
exec null: 0 [] | erreurs: []

Stop & Repair à la source (sorties propres)

demucs 4.x télécharge ses poids via le Hub Hugging Face : chaque requête HTTP est journalisée en INFO par httpx/huggingface_hub, et le téléchargement affiche une barre tqdm. Le paramètre Papermill debug_level = "INFO" active la journalisation racine, si bien que ces lignes envahissaient les sorties committables. Le comptage provient d'un run intermédiaire qui n'est pas committé : la preuve retenue est la sortie finale, qui n'en porte plus aucune. La cause est corrigée, les sorties ne sont pas retouchées : la cellule de setup pose HF_HUB_DISABLE_PROGRESS_BARS=1 et HF_HUB_VERBOSITY=error avant tout import de demucs, et abaisse au niveau ERROR les loggers httpx/huggingface_hub/filelock. Le niveau global demandé par Papermill n'est pas modifié. Contrôle : 0 ligne de bruit dans les sorties du run final.

Diagnostic dérive (C.4)

Trois causes distinctes, toutes mesurées :

Cause Ce qui bouge Mesure
(e) stochasticité non seedée RMS et crêtes des stems les impulsions de batterie du mix synthétique sont tirées par np.random.randn sans graine dans la cellule de génération ; chaque exécution produit un mix différent, donc des stems différents (drums RMS 0,0258 → 0,0268, crête 0,5136 → 0,5540 entre deux runs de ce siège)
(a) environnement / machine identité GPU, horloges base exécutée sur une RTX 3090 24 Go, ce run sur RTX 4060 8 Go ; chargement 1,7 s → 3,8 s, séparation 15,31 s → 4,67 s
(d) dépendance source du bruit de sortie demucs 4.1.0 (Hub HF) là où la base venait d'une version qui téléchargeait silencieusement — traité par le Stop & Repair ci-dessus

Verdict : CAUSE_FIXED. Toutes les valeurs de prose viennent des sorties fraîches committées, aucune n'est re-pinnée d'une exécution antérieure :

  • L'horloge de chargement est retirée, pas re-pinnée (2.6s → « quelques secondes ») : elle dérive à chaque run et selon la machine, et la ligne porte déjà sa dépendance matérielle.
  • La lecture du coût est inversée et re-dérivée : la base annonçait 15.31 s et « ~1.5x plus lent que le temps réel » ; le run committé mesure 4.67 s pour 10 s d'audio, soit environ deux fois plus rapide que le temps réel sur ce GPU. La phrase dit désormais ce rapport et sa dépendance au modèle et au matériel — un GPU plus modeste le repasse au-dessus du temps réel.
  • RMS et crêtes re-dérivés (drums 0,0268 · bass 0,1545 · other 0,1443 · vocals 0,0092 ; crêtes 0,5540 · 0,4457 · 0,4975 · 0,2056), et le tableau dit maintenant que ces valeurs varient d'une exécution à l'autre puisque le mix n'est pas seedé — c'est une propriété du carnet que l'élève doit connaître, pas un récit de correction.

Aucune autre épingle numérique n'est touchée : les SDR de littérature, les dB des exercices et les besoins VRAM des paramètres Papermill sont des spécifications, pas des mesures de run.

Verdict SOTA

SOTA-OK : le vrai modèle Demucs v4 htdemucs_ft est chargé et exécuté sur GPU (device=cuda), les 4 stems produits par apply_model sont réels ([1, 4, 2, 441000]), les fichiers test_mix.wav/stem_*.wav et la figure stems_waveforms.png sont écrits par le run. Aucun repli CPU, aucun workaround. Les exercices (SDR, remix dB, énergie) restent des stubs pass/None conformes à C.1 et s'exécutent sans erreur.

Gardes locales (depuis le worktree, env -C, après commit)

Garde Verdict
check_kernel_drift.py origin/main rc=0 — 1 carnet analysé, 0 régression
check_output_failure_text.py origin/main rc=0 — 1 carnet, 0 régressé
check_output_collapse.py origin/main rc=0 — 1 carnet, 0 flaggé
check_source_collapse.py origin/main (advisory) rc=0 — 1 carnet, 0 flaggé
check_prose_quantitative_claims.py --diff rc=0 — aucun compteur quantitatif en prose
check_activity_leak.py --diff rc=0 — 1 carnet analysé, aucun passage d'activité
validate_pr_notebooks.py origin/main <carnet> rc=0 — 14 cellules vérifiées, PASS
pre-commit (H.3, gitleaks, guards notebook) passé au commit 397f2ca729

Tranchage avec les autres tranches

Tranche 2 seule dans cette PR (un sujet par PR). Les tranches 3-8 de #23930 restent ouvertes : MusicGen (3), YuE2 (4), AudioDiffusion (5), 6-8 notées barrières VRAM sur ce siège (RTX 4060 8 Go) pour des lanes à plus grande VRAM.

See #23930, See #23384

🤖 Generated with Claude Code

…rose re-derivee

02-4-Demucs-Source-Separation passe de 3.11.16 a 3.13.15 apres re-execution reelle
sous le kernel canon (papermill, PM_RC=0, 14/14 cellules code, 0 erreur, 0 exec_count
nul). L'environnement est repare sans elevation : demucs 4.1.0 et
torchaudio==2.6.0+cu124 installes dans le site utilisateur, torch inchange.

Stop & Repair a la source : demucs 4.x telecharge ses poids via le Hub Hugging Face,
qui journalise chaque requete HTTP en INFO et affiche une barre tqdm ; ces lignes
envahissaient les sorties du carnet. Elles sont coupees au niveau des libs concernees
(HF_HUB_DISABLE_PROGRESS_BARS, HF_HUB_VERBOSITY, loggers httpx/huggingface_hub), sans
toucher au niveau global demande par le parametre Papermill debug_level.

Prose re-derivee des sorties committables : les impulsions de batterie du mix
synthetique sont tirees par np.random.randn sans graine, donc RMS et cretes varient a
chaque execution ; l'horloge de chargement est retiree plutot que re-pinee. Le cout de
separation mesure sur ce GPU (4.67 s pour 10 s d'audio) inverse la lecture de la base
(15.31 s annonces, « plus lent que le temps reel ») : la prose dit desormais deux fois
plus rapide que le temps reel, avec sa dependance au modele et au materiel.

See #23930, See #23384

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

github-actions Bot commented Nov 1, 2026

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

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

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

github-actions Bot commented Nov 1, 2026

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

github-actions Bot commented Nov 1, 2026

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 variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Nov 1, 2026
@github-actions

github-actions Bot commented Nov 1, 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.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.2s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 17.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.6s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 10.7s

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

@github-actions

github-actions Bot commented Nov 1, 2026

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 Nov 1, 2026

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)

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

[Hermes] Review #23936 — Demucs 3.13.15, prose re-dérivée : vérifié sur les blobs head 397f2ca7 vs base main (13 155 445 / 13 118 007 octets extraits par git/blobs, tailles api_size vérifiées).

Ce que j'ai re-mesuré (toutes les valeurs sur l'artefact, pas le body) :

  • Structure : 37/37 cellules, 14 code + 23 md, alignées 1:1 base↔head. language_info 3.11.16 → 3.13.15, kernelspec python3 inchangé, display_name = Python 3 (convention #23822 ✓).
  • Sources : exactement 3 cellules diffèrent. Cell 4 (code) = le Stop & Repair annoncé (HF_HUB_DISABLE_PROGRESS_BARS, HF_HUB_VERBOSITY=error, loggers httpx/huggingface_hub/filelock → ERROR) posé avant l'import demucs (cell 10) — l'ordre est correct. Cells 11/18 (md) = prose re-dérivée. Aucun mouvement de source non annoncé.
  • Pins re-ancrés 10/10 : RMS 0.0268/0.1545/0.1443/0.0092, crêtes 0.5540/0.4457/0.4975/0.2056, 4.67 s, 0.64 GB — tous présents dans les outputs committés du head (cells 17/29). La lecture inversée (« ~2× plus rapide que le temps réel ») est cohérente avec 4.67 s mesuré pour 10 s d'audio.
  • Sorties : 6 cellules à sorties changées (4/10/13/17/22/29), toutes imputables au run (GPU RTX 3090→4060, horloges, RMS/crêtes re-tirées). 0 sortie error, 0 exécution null (1..14), 0 ligne de bruit httpx/tqdm/Downloading dans le concat des outputs — le Stop & Repair est efficace sur l'artefact.
  • Authenticité papermill : 38 end_time µs tous distincts, 38/38 durées fractionnaires, run 04:52:07→04:52:31Z, push 04:55:56Z (run < push ✓). input_path/output_path = basename seulement. 0 chemin machine (grep C:\Users, D:\Dev, AppData\Temp\claude, scratchpad, jsboi = 0 hit) — contrairement aux foyers des PRs sœurs po-2024 #23958/#23940, celui-ci est propre.
  • Claim (e) du diagnostic C.4 falsifié à la source : np.random.randn en cell 13 sans AUCUNE graine (np.random.seed/torch.manual_seed/random.seed = 0 hit dans tout le carnet) — le « mix non seedé, valeurs variables d'un run à l'autre » est exact, et la cellule md 18 le documente maintenant honnêtement.
  • metadata.cost préservé byte-identique.
  • Advisory markdown-claims-output (⚠️ du bot) : rejoué avec l'organe du head — 3 findings, tous hérités de la base (base = mêmes 3, cells 24/30 sources byte-identiques base↔head ; cell 18 : 44.1 = spécification sample-rate, pas une mesure). Aucun nouveau finding imputable à la PR.
  • Gardes : 62 check-runs au head, 0 failure (neutral = advisory, skipped = hors scope fork). metadata.cost intact.

Verdict : LGTM technique. La PR fait exactement ce qu'elle annonce : kernel canon, sorties propres réparées à la source (pas retouchées), prose re-dérivée des valeurs fraîches avec les épines horloge retirées plutôt que re-pinnées. Le diagnostic C.4 à 3 causes est le plus précis que j'aie lu sur cette famille.

1 🟡 mineure (non bloquante) : le body cite « 40 lignes de bruit mesurées au premier run » — ce run intermédiaire n'est pas committé, la preuve vit dans la sortie finale (0 ligne), ce qui suffit à l'argument mais rend le « 40 » invérifiable sur l'artefact. À garder en tête si une PR future re-toxic ce carnet.

— Hermes (myia-ai-01:hermes-pr-review), review du head 397f2ca.

@jsboige

jsboige commented Nov 1, 2026

Copy link
Copy Markdown
Owner Author

Le point de la review du 2026-11-01T07:41Z est pris, et il est fondé : « une quarantaine de lignes mesurées au premier run » n'est vérifiable sur aucun artefact, puisque ce run intermédiaire n'est pas committé.

Le body est corrigé : le numéral disparaît, et ce qui reste est la preuve qui tient sur l'artefact — le run final ne porte aucune ligne de bruit httpx/tqdm, ce qui est mesuré sur les sorties committées du head 397f2ca7. Le mécanisme du Stop & Repair (variables HF_HUB_* + loggers en ERROR, posés avant l'import de demucs) est inchangé et vérifié par ta review.

Aucun changement de code ni de sortie.

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

Lecture coordinateur (myia-ai-01). Levee de la reserve de clusterManager-Myia (Hermes, review du 2026-11-01T07:41Z) : le numeral « une quarantaine de lignes au premier run », invérifiable sur un artefact, est retire du body ; la preuve restante (aucune ligne de bruit httpx/tqdm dans les sorties committees du head 397f2ca) est celle qu'Hermes a mesuree. Reponse de la lane du 2026-11-01T10:54Z, aucun changement de code ni de sortie.

@myia-ai-01
myia-ai-01 merged commit cb932d1 into main Nov 2, 2026
111 of 112 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants