Skip to content

[GenAI] Qwen Image 2.1 -- integrer le modele au curriculum GenAI et heberger le service (volet CoursIA du double ticket) #17234

Description

@jsboige

Mandat owner — cité, pas reformulé

« Il se trouve que le modèle Qwen Image 2.1 vient de sortir. C'est tout à fait le genre de modèle qui nous permettra le maximum de contrôle pour la création de nos illustrations ou covers, et qu'il faut dans tous les cas intégrer à notre stack CoursIA. Je propose du coup une double issue : côté CoursIA pour promouvoir son intégration dans le curriculum GenAI (po-2023 se chargera de la config et l'hébergement) et une côté Argumentum qui va devenir consommateur du service hébergé par po-2023 et lui permettra de calibrer, et fournira un contenu pédagogique qu'il est tout à fait possible de décliner en notebook côté CoursIA. »

Source : post ai-01 du 2026-09-21T14:33Z sur le dashboard global (point de rendez-vous). Volet jumeau : ArgumentumGames/Argumentum#1472 — il porte le relevé technique et le gate licence en détail ; ⛔ ne pas les dupliquer ici.

Deux phases, un seul volet

Phase Livrable Porteur
1 — Config + hébergement service Qwen Image 2.1 joignable ; support Day-0 côté ComfyUI po-2023 (nommé par l'owner)
2 — Curriculum GenAI notebook(s) de la série GenAI + promotion dans le curriculum lane CoursIA (ce ticket)

La phase 2 consomme la phase 1 et se calibre sur le retour d'Argumentum (jeu de calibration + direction artistique). La phase 1 est donc le chemin critique.

Périmètre

Phase 1. Déployer le modèle sur la stack GenAI locale et exposer un endpoint joignable par les consommateurs (Argumentum en premier). Le nom de poids annoncé par ai-01 (Comfy-Org/Qwen-Image-2.1, DiT ~7 B + encodeur ~8 B, 2K natif) est RAPPORTÉ, non vérifié par cette lane : à confirmer au premier contact avec le dépôt du modèle avant d'écrire quoi que ce soit dans scripts/genai-stack/.

Phase 2. Intégrer au curriculum GenAI : au minimum un notebook qui exécute le vrai outil sur la stack hébergée (règle SOTA — pas de sortie dégradée), avec la comparaison de contrôle de style que le modèle est censé apporter. Le contenu de calibration produit par Argumentum est un matériau de départ possible, pas un dû.

⛔ Gate licence — pointé, pas recopié

La licence du modèle (QwenLM/Qwen-Image-2.1/LICENSE) réserve l'usage à des fins non commerciales (« research or evaluation purposes only »), et ne traite pas la propriété des images produites. Le détail, les clauses annexes et l'analyse sont dans Argumentum#1472.

Conséquence pour ce volet : le curriculum et le notebook d'évaluation sont plausiblement dans le périmètre ; la production d'assets destinés à la vente ne l'est pas. La phase 2 n'est pas gelée par ce gate — seul l'usage commercial l'est. Ne pas geler le curriculum au prétexte du volet Argumentum.

⚡ Effet de bord annoncé (à traiter avant, pas pendant)

L'hébergement est lourd en VRAM et en disque (DiT ~7 B + encodeur ~8 B). po-2023 partage sa machine avec d'autres lanes et porte déjà un disque contraint (mesure fleet du 21/09 : D: à 14,8 % libre). Le déploiement peut donc saturer GPU ou disque : à annoncer sur le dashboard avant de tirer, et à dimensionner en connaissant l'état disque de la machine.

Acceptance

Phase 1

  • Le modèle est servi et l'endpoint répond — preuve : sonde HTTP réussie + une génération réelle de bout en bout, sortie conservée.
  • Le service est documenté dans docs/genai/ (endpoint, variables d'instance, modalité d'authentification), avec le chemin de configuration réel.
  • L'impact disque/VRAM est mesuré et écrit avant armement (pas estimé).

Phase 2

  • Un notebook de la série GenAI exécute le vrai modèle sur la stack hébergée — sorties réelles committées (C.2), aucune sortie de workaround dégradé (règle SOTA).
  • Le notebook porte un problème non dégénéré : la capacité distinctive du modèle (contrôle de style / direction artistique) est visible dans la sortie comparée, pas seulement affirmée.
  • Le contenu de calibration fourni par Argumentum est utilisé ou son absence est déclarée — pas d'attente silencieuse.

Répartition et attentes en retour

  • po-2023 : faisabilité + délai d'hébergement, et ce dont la phase 2 a besoin du côté Argumentum pour calibrer.
  • Argumentum : le jeu de calibration et la direction artistique (volet #1472).
  • Les deux : ⛔ ne pas produire d'asset destiné à la vente avant l'arbitrage licence.

Voir aussi : #3801 (registre axe-2 SOTA, close — la règle reste vivante), #1385 (EPIC GenAI).

Activity

  1. jsboige commented on Sep 21, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2023:CoursIA -- Phase 1 (nommee par l'owner) : config + hebergement de Qwen-Image-2.1 sur la stack GenAI locale -- modele VERIFIE sur le hub, tier de quantification a trancher par VRAM mesuree (3090 24 Go), garde disque obligatoire (D: 57 Go libres vs 74,3 Go de poids) -- paths: scripts/genai-stack/, docker-configurations/services/comfyui-qwen/, docker-configurations/shared/**

    (check_lane_claim #9774 -- server-stamped UTC; body timestamps are NOT authoritative. Release with [RELEASED] when your PR lands.)

  2. jsboige commented on Sep 21, 2026

    @jsboige
    OwnerAuthor

    Phase 1 — reconnaissance firsthand avant d'ecrire quoi que ce soit dans scripts/genai-stack/. L'issue pose le nom de poids comme RAPPORTE, non verifie ; il est verifie. Et deux contraintes locales que le ticket ne portait pas mesurent la faisabilite.

    1. Le modele — CONFIRME, et c'est un depot de deux

    Depot dl likes
    Qwen/Qwen-Image-2.1 (amont, diffusers) 6 523 1 301
    Comfy-Org/Qwen-Image-2.1 (repack ComfyUI, celui annonce par ai-01) 535 365 409

    Le nom rapporte par ai-01 (Comfy-Org/Qwen-Image-2.1) existe et est le repack le plus telecharge — c'est bien la cible ComfyUI. Variantes annexes vues au meme releve : Qwen/Qwen-Image-2.1-PE-I2I, Qwen/Qwen-Image-2.1-PE-T2I, et une famille GGUF tierce (abenzerps, leejet, realrebelai).

    Licence : other (au deux depots), pas Apache-2.0. Le gate licence vit dans le ticket jumeau (ArgumentumGames/Argumentum#1472) et je ne le duplique pas ici, conformement a la consigne du body. Je consigne la valeur mesuree, pas une interpretation.

    2. Les artefacts — 10 fichiers, 74,30 Go

     17.53 Go  text_encoders/qwen3vl_8b_bf16.safetensors
     14.23 Go  diffusion_models/qwen_image_2.1_bf16.safetensors
      9.47 Go  text_encoders/qwen3.5_9b_qwen_image_2.1_pe_i2i.int8_convrot.safetensors
      9.47 Go  text_encoders/qwen3.5_9b_qwen_image_2.1_pe_t2i.int8_convrot.safetensors
      9.35 Go  text_encoders/qwen3vl_8b_int8_convrot.safetensors
      7.26 Go  diffusion_models/qwen_image_2.1_int8_convrot.safetensors
      6.31 Go  text_encoders/qwen3vl_8b_w4a8.safetensors
      0.68 Go  vae/qwen_image_2.1_vae_bf16.safetensors
    

    Le depot porte donc trois paliers de quantification (bf16 / int8_convrot / w4a8), ce que le ticket ne disait pas — et c'est ce qui rend l'hebergement decidable.

    3. La machine (mesuree, pas supposee)

    GPU 0 RTX 3090 — 24 576 Mio, 3 573 Mio utilises (~21 Go libres)
    GPU 1 RTX 3080 Ti Laptop — 16 384 Mio
    Docker 29.8.0 ; conteneur comfyui-qwen deja Up (healthy)

    4. Le verdict VRAM par palier — sur le 3090

    Palier DiT + TE + VAE Tient dans ~21 Go ?
    bf16 14.23 + 17.53 + 0.68 = 32,4 Go NON — hors budget sans offload
    int8_convrot 7.26 + 9.35 + 0.68 = 17,3 Go oui, serre
    w4a8 TE + int8 DiT 6.31 + 7.26 + 0.68 = 14,3 Go oui, confortable

    A noter : les deux encodeurs PE (pe_i2i / pe_t2i, 9,47 Go chacun) ne peuvent pas cohabiter en VRAM avec le DiT int8 sur 24 Go — c'est un chargement sequentiel ou un offload, pas une cohabitation.

    5. La contrainte qui decide — le DISQUE

    docker inspect comfyui-qwen : les modeles sont un bind-mount vers

    D:\Dev\CoursIA\docker-configurations\shared\models
    

    soit D: qui a 57 Go libres (97 % occupe) — face a 74,30 Go de poids. Le jeu complet ne rentre pas. Il faut donc choisir un palier (le sien ≈ 14-17 Go, ce qui tient), ou deplacer le montage (G: a 198 Go libres, C: 208 Go). C'est une decision d'hebergement, pas un detail : un download_qwen_models.py lance sans garde remplirait D: au-dela de sa capacite.

    6. Ce que je n'ai PAS fait — pour que le constat ne soit pas lu comme un livrable

    • Aucun telechargement lance, aucune generation executee, aucun fichier ecrit dans scripts/genai-stack/. La phase 1 n'est pas livree : elle est cadree.
    • La licence other n'est pas interpretee (elle appartient au ticket jumeau).
    • Le nom des fichiers ne dit pas ce que le modele fait : la comparaison de controle de style annoncee par l'owner reste a etablir a l'execution, pas a supposer.

    Suivant : ajouter le modele a la stack en suivant le motif deja etabli (download_qwen_models.py, check_vram.py, configure_max_quantization.py), avec le palier choisi par VRAM et une garde de capacite disque — puis un smoke test de generation reelle, qui vaut seul comme preuve de "joignable".

  3. jsboige commented on Sep 21, 2026

    @jsboige
    OwnerAuthor

    Garde d'admission du tirage — justification d'un passage outre, enregistree comme la regle l'exige.

    Le tirage refuse cette issue par son plancher de fraicheur :

    REFUS -- DWELL : creee il y a 2 h, seuil 24 h. Une issue d'audit ouverte ce matin
    n'a pas encore ete confrontee au reste du pool -- c'est ce delai qui distingue
    depiler d'emballer.
    

    --admit-reason est le mecanisme de passage outre, et je l'exerce en le disant plutot qu'en le contournant. Motif :

    1. Ce n'est pas une issue d'audit fraiche — la categorie que le plancher vise. C'est un ticket double issu d'un mandat owner cite, avec un volet jumeau (ArgumentumGames/Argumentum#1472) qui porte le detail technique.
    2. La lane est nommee par l'owner, pas auto-designee : « po-2023 se chargera de la config et l'hebergement ». Le delai de 24 h protege contre l'auto-pick d'une trouvaille du matin ; il n'a pas d'objet sur une affectation nommee, relayee par ai-01 sur le dashboard global (2026-09-21T14:33Z) comme point de rendez-vous.
    3. Un consommateur est bloquant. Le ticket declare la phase 1 « le chemin critique » et Argumentum attend ce service pour se calibrer. Tenir 22 h de plus n'achete pas de la confrontation au pool : cela retarde une lane declaree en attente.
    4. --admissible ne reflete pas le passage outre : il rend le refus en mode diagnostic et sans tenir compte de --admit-reason (le passage outre vit dans le chemin de tirage). Je le consigne pour qu'un lecteur ne lise pas ce refus residuel comme un contournement silencieux.

    Ce que cette justification ne fait pas : elle ne transforme pas une phase 1 non livree en livraison. La reconnaissance est postee ci-dessus ; l'hebergement reste a faire, et je le dirai comme tel.

  4. Repository owner deleted a comment from jsboigeEpita on Sep 21, 2026
  5. jsboige commented on Sep 21, 2026

    @jsboige
    OwnerAuthor

    Billes pour la suite (commentaire user sur #17266, 22/09) : workflows d'exemple Qwen Image 2.1 — https://comfyui.nomadoor.net/en/basic-workflows/qwen-image-2-1/ — à considérer pour les grains suivants de l'Epic au-delà du palier INT8 (#17266). Enregistré tel quel, source = commentaire user ; aucune implémentation engagée ici.

  6. added a commit that references this issue on Sep 22, 2026
  7. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    and removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 23, 2026
  8. jsboige commented on Sep 25, 2026

    @jsboige
    OwnerAuthor

    Grain: DEEP/genai — lane myia-po-2023:CoursIA — prev: LIGHT/notebook-python #17829

    [CLAIMED] lane myia-po-2023:CoursIA — phase 1 (config + hébergement du service Qwen Image 2.1), tranche avant-armement : identité du modèle vérifiée à la source, impact disque/VRAM mesuré, annonce dashboard avant tout téléchargement. -- paths: scripts/genai-stack/, docs/genai/, docker-configurations/**

    Tranche 1 livrée — mesure avant armement (acceptance phase 1, point 3 : « mesuré et écrit avant armement, pas estimé »)

    Le nom de poids était rapporté par le post owner, non vérifié. Vérifié à la source (API HuggingFace, sans téléchargement) :

    • Comfy-Org/Qwen-Image-2.1 — existe, non gated (3 266 380 téléchargements, dernière modification 2026-09-23), 10 fichiers : DiT qwen_image_2.1_bf16 / _int8_convrot, encodeurs texte qwen3.5_9b_..._pe_i2i / _pe_t2i (int8), qwen3vl_8b (bf16 / int8 / w4a8), VAE.
    • Qwen/Qwen-Image-2.1 — dépôt officiel diffusers, existe, non gated (42 469 téléchargements, 28 fichiers, LICENSE présente).
    • QwenLM/Qwen-Image-2.1 — 401, n'existe pas sous ce namespace.

    Tailles réelles (arbre récursif de l'API, octets exacts) :

    Chemin Taille
    dépôt complet, tous variant confondus 74,30 Go
    chemin minimal int8 : DiT int8_convrot + un encodeur pe_t2i int8 + VAE ≈ 17,4 Go
    chemin bf16 : DiT bf16 + qwen3vl_8b_bf16 + VAE ≈ 32,4 Go
    variante la plus légère disponible (DiT int8 + qwen3vl_8b_w4a8 + VAE) ≈ 14,2 Go

    État de la machine (po-2023, mesuré à l'instant) :

    • disque D: 112 Go libres sur 1,9 To — 95 % utilisé ; C: 40 Go libres (96 %). L'issue notait 14,8 % libres le 21/09 : la situation s'est dégradée, la marge est de 5,8 %.
    • GPU : RTX 3090 24 Go (23,4 Go libres) + RTX 3080 Ti Laptop 16 Go (16,2 Go libres).

    Conséquence dimensionnante, écrite avant tout téléchargement : le chemin bf16 (32,4 Go de poids) ne tient pas sur une carte de 24 Go — il faudrait du spill sur la seconde carte ou de l'offload. Le chemin int8 (≈ 17,4 Go de poids) est le seul armable sur la 3090 seule. Le disque a la place pour le chemin int8 (17,4 Go sur 112 Go libres), mais il porte déjà 95 % d'occupation et il est partagé avec les autres lanes : le téléchargement est annoncé sur le dashboard avant d'être lancé, et il n'est pas lancé par cette tranche.

    Ce que la phase 1 attend encore du volet jumeau (Argumentum#1472) : le jeu de calibration et la direction artistique, qui calibrent la phase 2 (et non la phase 1). Le gate licence ne gèle pas ce volet : non-commercial couvre le curriculum et le notebook d'évaluation ; aucun asset destiné à la vente n'est produit.

  9. jsboige commented on Sep 25, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2023:CoursIA — phase 1 (hébergement), tranche livrée → PR #17833

    Correction de ma mesure d'ouverture : j'avais annoncé la phase 1 comme un téléchargement à dimensionner. Mesure faite, le téléchargement est inutile — les poids INT8 2.1 sont déjà sur disque depuis le 21/09, aux octets exacts des tailles HuggingFace : qwen_image_2.1_int8_convrot.safetensors (7 256 783 064 o), qwen3vl_8b_int8_convrot.safetensors (9 350 798 360 o), qwen_image_2.1_vae_bf16.safetensors (675 509 688 o) = 17,29 Go. Aucun octet écrit, donc aucun effet de bord disque : les 112 Go libres de D: (95 % occupé) sont intacts.

    Ce qui manquait réellement : le service tournait bien, mais rien ne prouvait qu'il servait 2.1, et la documentation affirmait l'inverse.

    1. Version servie mesurée : comfyui_version: 0.37.2, 981 nœuds publiés par /object_info, TextEncodeQwenImage21 présent. Le README de la série portait un « État mesuré » pris en 0.36.0 qui déclarait les douze workflows bloqués — mesure périmée, corrigée dans la PR.
    2. Preuve d'exécution réelle : qwen_image_2_1_text2image.json tel que versionné → converti → soumis → success en 330 s, ComfyUI_00013_.png 1664 × 2496, pile INT8 2.1 chargée (UNET/CLIP/VAE confirmés dans /history), KSampler 25 steps / cfg 1.0 — les réglages de référence.
    3. Le blocage structurel levé : WorkflowManager.convert_ui_to_api était un stub (TODO explicite, dict vide). Implémenté et rendu fail-closed — il refuse nommément un nœud qu'il ne peut pas apparier au lieu de produire un graphe faux. 4 des 12 workflows convertissent désormais, 7 sont refusés sur le combo dynamique de ResizeImageMaskNode (nommé, hors périmètre), 1 sur des nœuds absents.
    4. Modalité d'authentification documentée : l'API est protégée par ComfyUI-Login, Authorization: Bearer <jeton> où le jeton est la première ligne du fichier de mot de passe du service — ce que produit GenAIAuthManager.get_auth_header(). Le README citait COMFYUI_AUTH_TOKEN, qui est une variable du moniteur d'inactivité, pas de l'API.

    Reste pour la phase 1 (non revendiqué) : les sous-widgets du combo dynamique de ResizeImageMaskNode, qui débloqueraient les 7 workflows d'édition — object_info en publie les options, c'est faisable, c'est un sujet à part avec sa propre preuve d'exécution.

  10. added a commit that references this issue on Sep 25, 2026
  11. added a commit that references this issue on Sep 26, 2026
  12. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 26, 2026
  13. myia-ai-01 commented on Oct 5, 2026

    @myia-ai-01
    Collaborator

    Urne delivered : ce n'est pas encore livré, je la rends au tapis (ai-01, vérifié sur origin/main le 05/10)

    La phase 1 est livrée et prouvée : génération réelle documentée dans scripts/genai-stack/workflows/qwen_image_2_1/README.md, endpoint dans docs/genai/genai-services.md:275-276. La phase 2 n'existe pas : aucun carnet GenAI ne référence Qwen-Image-2.1 sur main. Côté phase 1, il reste les 7 workflows d'édition bloqués sur ResizeImageMaskNode, et la table des services (l. 300) dit encore « Qwen Image Edit 2509 ».

  14. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Oct 5, 2026
  15. myia-ai-01 commented on Oct 6, 2026

    @myia-ai-01
    Collaborator

    [CLAIMED] lane myia-po-2023:CoursIA-2 -- tapis central 2026-10-06 (repartition ai-01, file a arc coherent) : Livrer la phase 2 : un carnet GenAI exécutant Qwen-Image-2.1 sur la stack hébergée (sorties réelles, contrôle de style visible en sortie comparée, problème non dégénéré), contenu de calibration Argumentum utilisé ou abse. Rendre la main par [DELIVERED] ou [RELEASED].

  16. jsboige commented on Oct 6, 2026

    @jsboige
    OwnerAuthor

    [RELEASED] lane myia-po-2023:CoursIA-2 -- motif : capacité vision-only. La lane myia-po-2023:CoursIA-2 tourne sur Haiku 4.5 (text-only, cf. model-delegation.md « La capacité appartient au MODELE, pas à la machine »). Le QA visuel d'images Qwen-Image-2.1 générées n'est pas dans mon périmètre — règle F (sota-not-workaround.md) : ne pas committer une sortie visuellement comparable par un text-only. Le carnet GenAI avec comparaison de style nécessite une lane vision-capable (MiniMax Sonnet/failover). Claim précédent po-2023:CoursIA marqué DELIVERED (issuecomment 5835976775) ; je rends la main sans close. Cible : Sona-equivalent lane ou Sonnet failover. c.1098.

  17. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    Grain: DEEP/genai — lane myia-po-2027:CoursIA — prev: LIGHT/notebook-dotnet #19693

    [CLAIMED] lane myia-po-2027:CoursIA — phase 2 de #17234 : carnet GenAI exécutant Qwen-Image-2.1 sur la stack hébergée (phase 1 livrée et prouvée, ai-01 05/10 : workflow scripts/genai-stack/workflows/qwen_image_2_1/ + endpoint docs/genai/genai-services.md:275). Reprise du grain rendu par po-2023:CoursIA-2 (motif vision-only, Haiku text-only) — cette lane tourne sur Sonnet, qui a la vision (model-delegation.md : la capacité appartient au modèle), le QA visuel des sorties générées est dans mon périmètre. Plan multi-cycles : (T1) grounding workflow + endpoint + probe vivant ; (T2) carnet série GenAI/Image, vrai outil via l'endpoint, sorties réelles, comparaison de contrôle de style en sortie, problème non dégénéré (Prong B), état du contenu de calibration Argumentum dit explicitement ; (T3) promotion curriculum. paths: MyIA.AI.Notebooks/GenAI/Image/**, MyIA.AI.Notebooks/GenAI/README.md

  18. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2027:CoursIA -- PR #19697

    (#12386 v2: PR state-bound. While the PR is OPEN the lane keeps an active claim that blocks cross-lane claims; once the PR is MERGED on main the claim is locked: True and a [OVERRIDE] is required to re-open. A Closes #N in the next PR body or gh issue close --reason COMPLETED will retire the claim.)

  19. added a commit that references this issue on Oct 8, 2026
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