Titelkort för vLLM PR #61018, märkt OVERIFIERAD — UTKAST-PR, EJ MERGAD, med rubriken "3 rader så att Qwen4Exp kan sampla shardat" och chips för källrepot, öppningsdatumet 2026-10-10 och öppen-utkast-statusen.
Guides & Insights

Qwen4Exp batch-shardad sampling: i vLLM PR #61018, och vad den säger om Qwen 4

Författare

Gideon Frost

Publiceringsdatum

Senaste modellerna · 20Visa alla modeller →
Benchmarks: Artificial Analysis · uppdateras dagligen
Tillbaka till alla inlägg

Det mest informativa talet i vLLM:s pull request #61018 är en förlust: 1,5 %. Det är den övre gränsen som författaren själv sätter för sin egen ändring — ungefär 0,6 till 0,8 millisekunder sparade på ett genomsnittligt steg om 42 millisekunder, mätt på en maskin han inte äger, i en patch han inte kan köra alls. Pull requesten, med titeln "[Model] Qwen4Exp: support batch-sharded sampling (compute_logits_local)" och öppnad 2026-10-10 av bidragsgivaren kimseunghyun-kr, lägger till tre rader modellkod i två filer så att Qwen4Exp-arkitekturen kan använda en samplingsväg som vLLM släppte i augusti. Det är ett utkast. Det är 14 rader modellkod plus 57 rader test. Och det är ändå värt att läsa noga, på grund av vad de där tre raderna täcker över: Qwen4Exp är arkitekturen inuti Qwen3.8-Flash-Next, den öppna viktmodellen med 125 miljarder parametrar som leverantören publicerade 2026-08-24 som "en experimentell förhandsvisning av arkitekturen som kommer att ligga till grund för Qwen4" — och en bugg med två vägar i den textbaserade halvan av den arkitekturen är precis den typ av detalj man bara lär sig genom att titta på serveringslagret i stället för lanseringsinlägget.

För att vara entydig om inramningen, eftersom den spelar roll här: Qwen 4 i sig är inte släppt. Leverantören namngav fyra Qwen 4-nivåer – Qwen 4 Max, Flash, Plus och 27B – på sin Apsara-konferens den 22 september 2026, och har inte publicerat några vikter, ingen identifierare, inget pris, ingen kontextlängd och inget benchmark för någon av dem. Inget av det som följer är en release. Detta är en sammanställning av vad vi vet så här långt om en enda pull request i utkastläge, och allt i den som innehåller en siffra är antingen en tidsstämpel du kan verifiera, en siffra som bidragsgivaren skrev in i sin egen PR-text, eller ett värde utläst ur en offentlig modellkonfigurationsfil.

Vad batch-sharded sampling är, i ett stycke

Tensor-parallellism delar upp en modells vikter över GPU:er; vokabulärprojektionen är den bredaste enskilda tensorn i stacken, så varje rank beräknar normalt endast sin egen skiva av vokabulären — och sedan all-gatherar varje rank, så att var och en till slut håller hela logits för varje begäran i batchen. Shardad sampling inverterar det utbytet. Istället för att replikera vokabulären över rankar, shardar den batchen: varje rank samplar en skiva av förfrågningarna, och rankarna byter vokabulärskivor med varandra över en all-to-all. vLLMs egen CLI-dokumentation beskriver flaggan rakt på sak — "Varje rank samplar en skiva av batchen istället för att varje rank samplar hela batchen" — och anger begränsningarna: --enable-batch-sharded-sampling har standardvärdet False, kräver tensor_parallel_size större än 1, minst tensor_parallel_size maximala sekvenser, och en icke-negativ max_logprobs. Den sista raden i den dokumentationen är den krok som denna pull request hänger på: "Modeller ansluter sig genom att implementera compute_logits_local."

Funktionen i sig är inte ny. vLLM slog samman den som PR #50465 — "[Model Runner V2] batch-sharded sample," av Giancarlo Delfin — den 24 augusti 2026, samma dag som Qwen3.8-Flash-Nexts vikter lades upp. Motiveringen där var minne och latens: att materialisera fullständiga target-logits kostar i storleksordningen batchstorlek × (spekulativa tokens + 1) × vokabulärstorlek, och sharding minskar den allokeringen med en faktor motsvarande tensor-parallellitetsgraden samtidigt som samplerns top-k- och top-p-arbete kan köras parallellt. Det är det möjliggörande steget, inte målet: PR:ens egen text flaggar shardade draft-logits som framtida arbete.

Varför tre rader var hela jobbet

GitHub page for vllm-project/vllm pull request 61018, titled "[Model] Qwen4Exp: support batch-sharded sampling (compute_logits_local)", showing the Draft badge, a three-file diff with 71 additions, the qwen label and the PR body.

Här är den faktiska defekten, och den är bra eftersom den är osynlig från utsidan av koden. vLLM:s Qwen4Exp-implementering levereras som två klasser. Qwen4ExpForConditionalGeneration är vision-språk-wrappern — ett Qwen3-VL-visionstorn fastskruvat på språkmodellen — och Qwen4ExpForCausalLM är den textbaserade vägen. Wrappern ärver compute_logits_local från Qwen3_5ForConditionalGeneration, som vidarebefordrar anropet ned till language_model.compute_logits_local. Men språkmodellklassen som wrappern pekade på definierade aldrig den metoden.

Så de två vägarna befann sig i olika tillstånd. En vision-language-driftsättning av Qwen3.8-Flash-Next kunde ta den shardade vägen; en text-only kunde inte, eftersom metoden som wrappern delegerade till inte existerade. Lösningen är en metod, identisk i NVIDIA- och AMD-kopiorna av modellfilen:

• Metoden returnerar self.logits_processor(self.lm_head, hidden_states, skip_gather=True) — rankens egen vokabulärdel, utan gather och utan materialisering av hela vokabulären på någon rank.

• Den följer vad PR:en kallar "samma 3-radiga mönster som Qwen3.5 och MiniMax M3", vilket är värt att stanna upp vid: två andra modellfamiljer i samma repository hade redan valt att följa det. Qwen4Exp var helt enkelt den som inte hade gjort det.

Testfilen är där patchens ärlighet är lättast att kontrollera, och där dess begränsningar är lättast att se. Den är 57 rader, den är parametriserad över både NVIDIA- och AMD-modulerna, och den laddar inte ner någon modell. Hjälpfunktionen bygger klassen med object.__new__, sätter in nn.Identity i stället för språkmodellshuvudet, och installerar en falsk logitsprocessor som returnerar sin indata plus ett medan den registrerar hur den anropades. Det första testet gör gällande att ett 4,0 som matas in kommer ut som 5,0 och att det registrerade anropet bar skip_gather=True. Det andra testet omsluter språkmodellen i klassen för villkorad generering och gör gällande att delegeringen når fram. Det är ett riktigt test av kopplingarna och ett test av inget annat — ingen kernel körs, ingen ranggräns korsas, och antalet inblandade GPU:er är noll.

Båda dessa fakta anges i PR:en i stället för att begravas. Testfilens egen docstring kallar Qwen4Exp för "en liten testdubbel som endast körs på CPU". Författarens valideringsavsnitt noterar att han inte alls kunde importera modellen i sin macOS-miljö, eftersom den transformers-versionen han hade inte innehöll någon Qwen4ExpConfig. CUDA-körningen återstod fortfarande. End-to-end-benchmarken – MLPerf agentic dataset, 20 samtidiga sessioner, tre 60-minutersarmar – återstod fortfarande. MTP-draftarens egen logits-väg är flaggad som okontrollerad. LoRA avvisas redan av flaggan uppströms, så det ligger utanför omfattningen snarare än att vara en regression. Det finns också en rad som avslöjar att utkastet skrevs med AI-assistans, och commit-trailern anger Claude Opus 5.5 som medförfattare, vilket är den typ av avslöjande som borde vara normalt i en stack av den här storleken och för det mesta inte är det.

Uppskattningen på 1,5 %, och mätningarna den står bredvid

Bidragsgivarens uppskattning är en nsys-spårning vid 16 samtidiga sessioner på Qwen3.8-Flash-Next-FP8 med tensorparallellism 8 och expertparallellism över åtta A100-SXM4-40GB-kort: cirka 1,6 millisekunder av ett steg på 42 millisekunder, nedskuret till ungefär en tredjedel av det, för en end-to-end-vinst på 1,5 till 2 %. Hans huvudnummer är aritmetiken – 0,6 till 0,8 ms över 42 ms. Notera vad som hänger samman med det: 42 ms är ett värde för latensen mellan tokens, så en minskning med 1,7 % är en minskning med 1,7 % av tokengenereringstiden, inte ett påstående om genomströmning i sig.

Den ärliga jämförelsen är mot den överordnade funktionens egna siffror efter merge, eftersom de mättes från början till slut av någon med hårdvaran. I Speed-Bench 2K/2K-körningarna som publicerades i PR #50465 flyttade batch-shardad sampling DeepSeek V4 med DSpark vid 7 spekulativa tokens och concurrency 64 från 2,62 till 2,66 förfrågningar per sekund – en genomströmningsvinst på 1,53 % – medan medianlatensen mellan token sjönk med 3,09 % och tiden till första token ökade med 1,45 %. På MiniMax M3 med DSpark vid 8 spekulativa tokens ökade genomströmningen för förfrågningar med 5,38 % och median-TPOT sjönk med 8,33 % från 15,61 till 14,31 millisekunder. Och samma plan dokumenterar var det inte hjälper: vid concurrency 4 till 16 blev körningarna oförändrade till svagt negativa, där concurrency-16-armen minskade med 0,54 % i genomströmning och 1,89 % i acceptanslängd.

Det mönstret är det man ska ta med sig. Shardad sampling lönar sig när samplingen är tung och batchen är bred – hög samtidighet, många spekulativa tokens, top-k och top-p som utför verkligt arbete – och den kostar lite när batchen är tillräckligt liten för att all-to-all ska vara ren overhead. En uppskattning på 1,5 % för en modell som väljer att aktivera det är förenlig med det, inte i konflikt med det: siffrorna 5,38 % och 8,33 % tillhör olika modeller med olika spekulativa budgetar, och modellen i den här PR:en har sin egen konfiguration, sin egen vokabulär på 248 320 tokens och sin egen väg för spekulativ avkodning.

Inget av det är granskat. Siffrorna i den överordnade PR:en är en bidragsgivares parvisa körningar på en nod; smoke-test-siffrorna här är en trace på hårdvara som författaren inte har, från en revision av patchen som han säger mättes vid endast 16 sessioner. En mätning från en enda bidragsgivare i en enda konfiguration är en användbar signal om riktningen och en dålig grund för en kapacitetsplan. Anledningen till att ämnet överhuvudtaget är värt att skriva om är riktningen, inte decimalen.

Vad det omgivande patchklustret säger om Qwen4Exp

En utkast-PR skulle inte vara en historia. Historien är att Qwen4Exp har blivit ett varaktigt serving-mål under veckan som detta landade, och den minsta patchen i det klustret är den som gör mönstret läsbart. Under de sju dagarna fram till 2026-10-10 innehöll vLLM, från samma bidragsgivare och andra: en FP8-huvud-KV-cache-väg för gles uppmärksamhet på Ampere, med KV-kapacitet upp 1,83× på åtta A100 och 1,87× på fyra RTX 3090 och ungefär 2,7× antalet förfrågningar vid samtidighet 16, till priset av cirka 6% högre single-stream decode TPOT; en fix för W4A4 MoE-padding vid tensor-parallell 1 och expert-parallellism; en AMD-väg som faller tillbaka från icke-stödda AITER FP8 MoE-operationer och serverar i fp16; en fix som bär PLE:s kortkonvolutionstillstånd genom align-läge; och en decode-kernel som packar upp e4m3-byte fyra åt gången per register på sm_80. En av dem, en omtrimning av H200 M=4 sammanslagna QSA LL-GEMM-plan, slogs samman med main den 2026-10-09.

Läs listan som helhet, och den säger något konkret. Arkitekturen Qwen4Exp – den som leverantören inte har släppt – finjusteras för Ampere, Hopper, ROCm och fp16-fallback samtidigt, i ett projekt som levererar stöd från dag ett för modeller som folk faktiskt kan ladda ner. Anledningen är inte mystisk: Qwen3.8-Flash-Next är en verklig, nedladdningsbar och flitigt använd modell, och den bygger på arkitekturen som Qwen 4 kommer att använda. Huruvida Qwen 4-vikterna någonsin dyker upp i det här utförandet är okänt, och leverantören har inte sagt något, men serveringsomfånget vidgas offentligt, och det är kontrollerbar information på ett sätt som ett ryktat fönster mellan oktober och november inte är.

En del av den arkitektoniska formen är också offentlig, för alla som läser konfigurationen snarare än tillkännagivandet. Qwen3.8-Flash-Nexts konfiguration listar en ordlista på 248 320 token över 48 lager, 512 experter med 10 routade plus en delad aktiv per token vid en expertmellumbredd på 640, en dold storlek på 2 560 och en inbyggd kontext på 262 144 token som beskrivs som utbyggbar till en miljon. Det är en hybrid: listan över lagertyper varvar tre linjära attention-block med ett full-attention-block, och full-attention-blocken använder sparse-attention-vägen med en indexerare med ett huvud som komprimerar nycklar med en faktor fyra och håller en budget på 2 048 positioner. Det finns en per-lager-inbäddningstabell vid lager 2, en n-gram-inbäddning med en ordlista på 20 miljoner poster — det är den 47,7 GiB stora tabellen som andra patchar i detta kluster är upptagna med att host-staga — och ett MTP-huvud med ett lager för spekulativ avkodning. Modellkortets egen sammanfattning är "125B med 6B aktiverade, plus 51B n-gram-inbäddning och 4B MTP." En ordlista på 248 320 poster är anledningen till att logits-projektionen överhuvudtaget är värd att sharda.

Vad detta inte ändrar för dig

Det är värt att vara exakt, eftersom ett patchkluster så här tätt kan läsas som en lansering. Inget av ovanstående är mergat, och en del av det – Ampere FP8 KV-cache-arbetet – är uttryckligen ovaliderat i CI eftersom vLLMs CI inte har någon A100. Det finns ingen släppt vLLM-version du kan installera idag som har opt-in för Qwen4Exp sharded sampling. Det finns ingen oberoende benchmark av Qwen3.8-Flash-Nexts servingbeteende under någon av dessa ändringar; varje siffra som citeras ovan kommer från PR-beskrivningarna, vilket gör dem rapporterade av bidragsgivare och ogranskade i den specifika bemärkelsen att ingen tredje part har återskapat körningen. Och huvudsiffran i PR:en som startade den här artikeln är 1,5 %, vilket är en verklig vinst i en servingstack och inte ett skäl att ändra ett modellval.

Det som skulle ändra ett beslut är en fullständig, granskad serveringskörning, och en sådan finns inte än. De taktmätningar som faktiskt finns för Qwen3.8-Flash-Next ligger helt utanför dessa patchar: modellen uppnår ett Intelligence Index på 40 hos Artificial Analysis, väl över medianen på 18 för modeller med öppna vikter av liknande storlek, och den siffran är oberoende av allt som diskuteras här.

Vad du kan ringa idag, och routing-vinkeln

OrcaRouter model page for qwen/qwen3.8-flash, listing one-million-token context, 131,072 max output, a $0.15 input and $0.47 output list price, and the api.orcarouter.ai base URL.

Det är här bilden blir praktisk för alla som har läst så här långt och vill använda en hostad modell i stället för att instrumentera en. Qwen3.8-Flash-Next finns inte i OrcaRouters katalog — det är inte en av de 205 modeller vi dirigerar, och det finns ingen hostad slutpunkt för den här. Men den produktionsvariant som den är en förhandsvisning av är: qwen/qwen3.8-flash, det officiella Qwen3.8-Flash-släppet som enligt leverantörens eget modellkort har fler funktioner än förhandsvisningen, inklusive en kontext på en miljon tokens som standard och inbyggda verktyg, finns tillgängligt för 0,15 USD per miljon indata-tokens och 0,47 USD per miljon utdata-tokens, förmedlat till leverantörens listpris utan påslag. För att visa skalan inom samma familj, qwen/qwen3.8-27b kostar 0,33 USD och 2,40 USD, och qwen/qwen3.8-max 2,00 USD och 6,00 USD — alla nåbara med en enda nyckel.

Det finns två skäl som betyder mer än vanligt för en artikel om en osläppt arkitektur. Det första är växlingskostnaden. Om du vill kalibrera hur en sparse-attention-modell känns på din trafik innan Qwen 4 finns, är jämförelsen du vill köra mot qwen/qwen3.8-flash till listpris — och att göra det via en router innebär att modellen du mäter och modellen du kan falla tillbaka till ligger bakom samma endpoint, samma SDK och samma nyckel, utan ett andra avtal att skriva på. Det andra är att varje serving-ändring i detta patchkluster riktar sig mot självhostad vLLM. Om du inte kör åtta A100:or är KV-kapaciteten på 1,83× och samplingsvinsten på 1,5 % sådant du läser om, inte sådant du får. En routad endpoint är versionen av detta som kommer utan ett byggsteg: automatisk failover om en leverantör försämras, och en routing-DSL som låter dig placera ett hostat anrop bredvid ett självhostat i en enda endpoint när du faktiskt har egen hårdvara att mäta på.

Det enda man inte ska göra är att läsa den här artikeln som ett skäl att vänta på Qwen 4. Det finns inget datum. Det finns inget pris. Det finns ingen viktmängd för det riktiga — siffrorna ovan beskriver förhandsversionen, inte produkten. Det som finns är en serving-stack som förbereds öppet för en arkitektur som för närvarande bara går att ladda ner i förhandsversion.

Den korta versionen

Two-column scoreboard comparing batch-sharded sampling without the flag and with it across path, rank memory, sampler work, reported gain and status, footnoted as the PR body estimate on Qwen3.8-Flash-Next-FP8, TP8 plus EP, eight A100-SXM4-40GB, not independently audited.

Tre rader som sluter en lucka mellan de textbaserade och visionsspråkliga vägarna i en enda modellfil är inte i sig en nyhet. Det är den typ av patch som skulle begravas i en merge-commit om någon hade tid att granska den, och den kan mycket väl införlivas i en större ändring eller stängas helt — vLLM-botens egna agentriktlinjer, citerade i PR:en, instruerar AI-assisterade bidragsgivare att stänga sitt arbete om det saknar betydande nytta, och 1,5 % är en siffra som inbjuder till den frågan. Det som gör den värd din uppmärksamhet är det den dokumenterar: en n-gram-tabell med 20 miljoner poster, en MoE med 512 experter där tio experter är aktiva per token, en hybrid av linjär attention och komprimerad sparse attention, ett spekulativt huvud — allt detta trimmas över NVIDIA och AMD, från Ampere till Hopper, innan produkten som bär det finns. Om du bryr dig om Qwen4:s serving envelope är PR-textarna där dess verkliga specifikationer för närvarande finns. Om du vill anropa en modell i dag är Qwen3.8-Flash den som faktiskt finns där.

Ett API för 200+ modeller, automatisk failover, routing-DSL. Utforska OrcaRouter-modellkatalogen

Jämförda i den här artikeln2

Identifierat från den här artikeln · Benchmarks: Artificial Analysis · uppdateras dagligen