Zrychlení jádra Qwen-Image se v celém požadavku neprojevilo
SGLang sloučil závěrečnou normalizaci a modulaci obrazového modelu Qwen-Image do jediného jádra. Samotná operace zrychlila podle délky vstupu 3,1krát až 5,6krát, deset měření celého požadavku ale skončilo v pásmu statistického rozptylu.

Do hlavní větve SGLangu přibyl 31. srpna 2026 commit 771e613d, který mění závěrečnou operaci obrazového modelu Qwen-Image. Původní výpočet spouštěl normalizaci, násobení měřítkem a přičtení posunu odděleně. Nová cesta je slučuje do jediného jádra napsaného v Tritonu. V izolovaném testu je rozdíl výrazný; při měření celého generování obrázku se ale ztratil.
Model Qwen-Image-2512 vede jeho karta na Hugging Face jako systém pro tvorbu obrazu z textu v knihovně Diffusers. Změna ve SGLangu nezasahuje do vah ani do postupu odšumování. Nahrazuje jediný řádek na konci transformátoru voláním nové funkce _qwen_norm_out.
Pět délek vstupu dalo pět různých násobků
Autor návrhu 37144 měřil na jedné kartě NVIDIA GB300 s 288 GB paměti, CUDA 13.0 a PyTorchem 2.13.0. Data byla ve formátu bfloat16, dávka měla jeden požadavek a skrytý rozměr 3 072. Měnil se počet tokenů, tedy kolikrát se stejná operace v jednom průchodu provede.
| Tokenů | Původní výpočet | Sloučené jádro | Zrychlení |
|---|---|---|---|
| 128 | 62,032 µs | 11,040 µs | 5,619× |
| 512 | 49,824 µs | 11,296 µs | 4,411× |
| 2 048 | 54,304 µs | 16,512 µs | 3,289× |
| 4 096 | 83,680 µs | 26,944 µs | 3,106× |
| 4 608 | 99,360 µs | 29,632 µs | 3,353× |
Číslo 3,35× tedy není rychlost modelu. Patří poslednímu řádku mikrotestu jedné operace. Stejný násobek uvádí i Baseten v rozboru své sady jader z 28. srpna. Baseten ale skládal několik různých optimalizací a pro celý Qwen-Image uvádí zkrácení latence o 42,3 %. SGLang převzal právě sloučení závěrečné normalizace a modulace, ne celou sadu.
Celý požadavek vyšel o 96 milisekund delší
Měření celého generování použilo Qwen-Image-2512 v kvantizaci NVFP4, obrázek 1 024×1 024 bodů, padesát kroků odšumování a pevné semínko 20260830. Každá varianta běžela pětkrát v novém procesu po jednom zahřívacím požadavku. Pořadí se střídalo, aby první nebo poslední série nezískala výhodu.
Původní větev potřebovala v průměru 24 465,062 ms, větev s novým jádrem 24 560,894 ms. Rozdíl 95,832 ms je vlastní odečet druhé hodnoty od první. Nová varianta tak na naměřeném průměru vyšla o 0,392 % pomalejší. Autoři výsledek neoznačili za zpomalení, ale za shodu: směrodatná odchylka jednotlivých běhů byla 287,005 ms u původní větve a 239,495 ms u nové, tedy několikrát víc než rozdíl průměrů.
Profil samotného kroku přitom změnu viděl. Sloučení odstranilo šest spuštění jader a v celém záznamu ušetřilo 63,571 µs na jeden krok odšumování. Padesát kroků krát 63,571 µs dává 3,179 ms na požadavek. Průměr obou směrodatných odchylek je 263,250 ms; běžné kolísání bylo tedy zhruba 83krát větší než úspora, kterou profil připsal změně. Obojí je vlastní výpočet z hodnot uvedených v návrhu.
Pojistka porovnává nový výsledek s původním
Rychlejší větev se nepouští bez kontroly. SGLang si pro každou novou kombinaci datového typu, zařízení, tvaru a přesnosti nejprve spočítá sloučený i původní výsledek a porovná je funkcí torch.equal. Při neshodě nebo chybě se optimalizace vypne a výpočet pokračuje původní cestou. Během záznamu grafu CUDA se dosud neověřený tvar také vrátí k původnímu výpočtu; překlad přes torch.compile novou větev nepoužívá.
V deseti celých bězích, pěti na každé variantě, vznikly obrázky se stejným otiskem sha256. Srovnání pixelů nenašlo jediný rozdíl. Tohle tvrzení má silnější oporu než tvrzení o rychlosti: u obrazu vyšel shodný výsledek ve všech pokusech, kdežto časová úspora byla menší než šum měření.
Jeden násobek popisuje jen jednu vrstvu měření
Čísla z mikrotestu, profileru a celého požadavku si neodporují. Každé odpovídá na jinou otázku. Mikrotest ukazuje, kolik práce ušetří sloučené jádro bez okolí. Profiler potvrzuje, že v modelu zmizelo šest spuštění jader. Celý požadavek pak říká, zda je úspora dost velká proti zbytku generování a proměnlivosti stroje. Tady zatím nebyla.
Zdroje
- Návrh 37144 v projektu SGLang, popis mikrotestu, profilu, celého měření a kontroly shody obrazu
- Sloučený commit 771e613d z 31. srpna 2026, zdrojový kód a testy nové cesty
- Agentic kernels in production, rozbor Basetenu z 28. srpna 2026 s výsledky celé sady jader
- Karta Qwen-Image-2512 na Hugging Face