Repository navigation
[GenAI] Qwen Image 2.1 -- integrer le modele au curriculum GenAI et heberger le service (volet CoursIA du double ticket) #17234
Description
Activity
[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.)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.safetensorsLe 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-qwendejaUp (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 versD:\Dev\CoursIA\docker-configurations\shared\modelssoit
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 : undownload_qwen_models.pylance sans garde rempliraitD: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
othern'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".- Aucun telechargement lance, aucune generation executee, aucun fichier ecrit dans
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-reasonest le mecanisme de passage outre, et je l'exerce en le disant plutot qu'en le contournant. Motif :- 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. - 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. - 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.
--admissiblene 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.
- 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 (
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.
- added a commit that references this issue
on Sep 22, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)and removedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Sep 23, 2026 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 : DiTqwen_image_2.1_bf16/_int8_convrot, encodeurs texteqwen3.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,LICENSEpré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 encodeurpe_t2iint8 + 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.
[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 deD:(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.
- Version servie mesurée :
comfyui_version: 0.37.2, 981 nœuds publiés par/object_info,TextEncodeQwenImage21pré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. - Preuve d'exécution réelle :
qwen_image_2_1_text2image.jsontel que versionné → converti → soumis →successen 330 s,ComfyUI_00013_.png1664 × 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. - 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 deResizeImageMaskNode(nommé, hors périmètre), 1 sur des nœuds absents. - 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 produitGenAIAuthManager.get_auth_header(). Le README citaitCOMFYUI_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_infoen publie les options, c'est faisable, c'est un sujet à part avec sa propre preuve d'exécution.- Version servie mesurée :
- added a commit that references this issue
on Sep 25, 2026 - added a commit that references this issue
on Sep 26, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Sep 26, 2026 Urne
delivered: ce n'est pas encore livré, je la rends au tapis (ai-01, vérifié surorigin/mainle 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 dansdocs/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 surResizeImageMaskNode, et la table des services (l. 300) dit encore « Qwen Image Edit 2509 ».- removedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Oct 5, 2026 [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].
[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.
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/+ endpointdocs/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[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: Trueand a[OVERRIDE]is required to re-open. ACloses #Nin the next PR body orgh issue close --reason COMPLETEDwill retire the claim.)- added a commit that references this issue
on Oct 8, 2026
Mandat owner — cité, pas reformulé
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
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 dansscripts/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
docs/genai/(endpoint, variables d'instance, modalité d'authentification), avec le chemin de configuration réel.Phase 2
Répartition et attentes en retour
Voir aussi : #3801 (registre axe-2 SOTA, close — la règle reste vivante), #1385 (EPIC GenAI).