Qwen-Image 2.1 sur deux T4 gratuites
la mesure. Qwen-Image 2.1 · 2026-09-24 · Kaggle 2 × T4 · 4 sessions · 0 €
Ce modèle ouvert peut-il fournir les images d'une chaîne de reconstitutions antiques, sur le seul GPU gratuit disponible ? Ici : le déploiement, la vitesse et la génération. L'édition et les styles sont à la page suivante.
- run
- essais 1 à 3 + tests
- date
- 2026-09-24
- machine
- Kaggle 2 × T4 (15 Go)
- durée
- ≈ 100 min de GPU
- coût
- 0 €
- journal
- releve.json
Le modèle, tel que publié
Un DiT d'environ 7,1 milliards de paramètres (14,23 Go en bf16, 32 couches), un encodeur de consignes Qwen3-VL 8B (17,53 Go) et un VAE à 4 canaux, qui sort une vraie transparence RGBA. Réglages par défaut : 40 pas, sans guidage, 2048×2048 recommandé. Le pipeline n'était pas dans diffusers 0.40 : il s'installe depuis git.
1. Faire tenir 33 Go dans deux cartes de 15 Go
Rien ne tient en bf16 sur une carte, et le T4 n'a pas de bf16 matériel. La recette qui marche : encoder toutes les consignes, libérer l'encodeur, débruiter avec le DiT en fp16, le libérer, puis décoder. Le risque du fp16, c'est le débordement : le format plafonne à 65 504.
Un T4 fait 27,46 TFLOPS en fp16, 4,08 en fp32 et 2,31 en bf16 émulé : d'où le DiT en fp16. L'activation la plus forte monte à 9 128, avec 0 NaN et 0 bloc saturé sur 32.
diag/sortie/diag.json · sorties/essai-2/mesures.json (sondes)
Essai 1 : arrêt à l'import après 237,6 s. Le torchao 0.10 préinstallé sur Kaggle n'a pas FqnToConfig, que diffusers importe sans garde ; correctif : le désinstaller. Essai 2 : manque de mémoire au décodage, le VAE en fp32 posé à côté d'une moitié du DiT (14,50 Gio sur 14,56). Le repli — DiT entier sur une carte, VAE seul sur l'autre — a sorti les 3 images.
sorties/essai-1/journal.txt · sorties/essai-2/journal.txt
Essai 3, la recette rejouée : fin en 918,6 s, et 3 images identiques bit à bit à celles de l'essai 2 (sha256). Les 13,26 Gio du DiT tiennent sur un seul T4 avec 0,4 Gio de marge pendant le débruitage (14 487 Mio sur 14 909). Mise en route : 33,1 Go téléchargés en ≈ 2,6 min, mais 178 à 194 s d'installation pip ; ≈ 6 min par session avant la première image.
sorties/essai-2 et essai-3/mesures.json · sorties/essai-1 à 3/journal.txt · tests/journal.txt
Le premier rapport annonçait 0,7 Gio de marge, calculée sans le cache de l'allocateur ; nvidia-smi donne 0,4. Aussi : pas de flash-attention sur T4 (« mem_efficient » 13,9 ms contre 97,8 ms en « math ») ; une L4 demandée par la CLI ouvre une session sans GPU ; pendant la génération, le T4 tourne en moyenne à 619 MHz, jusqu'à 80 °C.
sorties/essai-3/mesures.json · diag/sortie/diag.json · diag-l4/sortie/sonde.json
2. La vitesse
| taille | s par pas | 40 pas | 20 pas |
|---|---|---|---|
| 1024×1024 | 4,21 à 4,26 | ≈ 170 s | ≈ 85 s |
| 1344×1344 | 8,28 | 331 à 340 s | 166 à 175 s |
| 1664×928 (16:9) | 6,85 | 274 à 282 s | 137 à 145 s |
| 2048×2048 | non lancé | — | — |
DiT réparti 16 + 16 blocs sur les deux cartes, 7,3 et 8,4 Gio alloués ; décodage en plus (4,4 s en 1024, 8 s en 16:9). Source : tests/mesures.json.
Une image 1024², 20 pas, coûte ≈ 90 s en tout : 85,6 s de débruitage, 0,7 s d'encodage de la consigne, 4,4 s de décodage — soit ≈ 40 images par heure de GPU (calcul). La session de tests a sorti 15 images sur 16 en 59,6 min.
styles/sorties/essai-1/mesures.json · tests/journal.txt
La taille native annoncée, 2048², n'a pas été lancée : le garde-fou de budget estimait la fin de session à 67,7 min pour 67 permises. Les ≈ 24,5 s par pas qu'on pourrait citer sont une extrapolation, pas une mesure.
tests/journal.txt (16_forum_2048 sauté)
Sur la même machine, un tiers annonce 139 à 147 s par image 1024² en 40 pas, avec des poids et une attention INT8 sous ComfyUI. Ici, sans quantification, c'est ≈ 170 s.
3. Ce qu'il génère bien 9/10
Une affiche en français de trois lignes sort exacte au caractère près, un long titre anglais reste lisible en miniature, et les portraits atteignent le niveau d'une banque d'images, mains comprises. L'arabe, lui, gagne une ligne de pseudo-texte sans aucun sens (5/10). Les notes viennent de la relecture visuelle : ce sont des jugements, pas des mesures.
La consigne d'exemple officielle, première image du déploiement : 1024², 40 pas, ≈ 166 s. Image générée par Qwen-Image 2.1.
Personne fictive, 1024², 40 pas, 174 s : cinq doigts par main (9/10). Image générée par Qwen-Image 2.1.
Demandé « avec fond transparent », affiché ici sur un damier. Image générée par Qwen-Image 2.1.
Le casque sort en RGBA natif : 62,3 % de pixels transparents, alpha de 0 à 255. Deux pièges : sur une icône, 48,7 % des pixels ont un alpha de 1 à 9, au-dessus d'un violet caché — ramener les alpha sous 10 à 0 ; et des images demandées opaques sortent en RGBA avec 5 à 24 % de pixels sous 255 — les aplatir avant publication.
sorties/essai-2/journal.txt · rapport/donnees.json · tests/mesures.json
4. Ce qu'il rate : l'Antiquité 3 à 4/10
Demandé « au IIe siècle, achevé », le Forum romain sort six fois tel qu'aujourd'hui : ruines, façades baroques, ville moderne, drapeau italien, Colisée doublé en 16:9. Photoréalisme 8/10, histoire 1/10 : le modèle connaît les sites célèbres par leurs photos touristiques.
rapport/donnees.json (générations 04, 11 à 15) · relecture visuelle
Même consigne, graine 42. En haut 40 pas, en bas 20 ; de gauche à droite 1024², 1344², 1664×928. Images générées par Qwen-Image 2.1.
Vignette 16:9, 282 s : titre exact (10/10), mais des ruines et des hangars de tôle sous le mot « Rebuilt » (histoire 3/10). Image générée par Qwen-Image 2.1.
Karnak « neuve », 175 s : la meilleure scène historique (7/10). Au zoom : des tongs, un tabouret pliant, des murs érodés. Image générée par Qwen-Image 2.1.
La parade : interdire le moderne ≈ 8/10
En consigne courte, la rue de marché de Carthage punique sort avec balcons en fer forgé et voiliers de plaisance (5/10). La même rue, avec une consigne longue qui interdit explicitement le moderne — « no iron balconies, no modern boats, no tourists… » — monte à ≈ 8/10. Il reste un balcon.
À gauche, consigne courte (1024², 40 pas). À droite, consigne longue avec exclusions (1664×928, 20 pas) : maisons intactes, port circulaire au fond. Images générées par Qwen-Image 2.1.
Cette scène 1664×928 en 20 pas a pris 126,1 s (6,26 s par pas) ; 132,1 s avec la graine 7. La note de travail disait 130 s : c'est le journal brut qui est publié.
animation/assets/journal-kaggle/journal.txt
C'est cette scène qui sert ensuite de décor à l'animation dans Blender.