Karta tytułowa dla PR #61018 w vLLM, oznaczona jako NIEWERYFIKOWANY — PR W WERSJI ROBOCZEJ, NIEZSCALONY, z nagłówkiem „3 linie, aby Qwen4Exp mógł próbkować z shardingiem”, z plakietkami dla repozytorium źródłowego, daty otwarcia 2026-10-10 i statusu otwartej wersji roboczej.
Guides & Insights

Qwen4Exp, próbkowanie z shardowaniem partii: wewnątrz vLLM PR #61018 i co mówi o Qwen 4

Autor

Gideon Frost

Data publikacji

Najnowsze modele · 20Zobacz wszystkie modele →
Benchmarki: Artificial Analysis · aktualizowane codziennie
Powrót do wszystkich wpisów

Najbardziej pouczającą liczbą w pull requeście vLLM #61018 jest strata: 1,5%. To górna granica, jaką autor stawia własnej zmianie — około 0,6 do 0,8 milisekundy zaoszczędzone z przeciętnego kroku trwającego 42 milisekundy, zmierzone na maszynie, której nie posiada, w łatce, której w ogóle nie może uruchomić. Pull request, zatytułowany „[Model] Qwen4Exp: support batch-sharded sampling (compute_logits_local)” i otwarty 2026-10-10 przez współtwórcę kimseunghyun-kr, dodaje trzy linie kodu modelu do dwóch plików, aby architektura Qwen4Exp mogła korzystać ze ścieżki próbkowania, którą vLLM udostępnił w sierpniu. To wersja robocza. To 14 linii kodu modelu plus 57 linii testów. I mimo to warto przeczytać go uważnie, ze względu na to, co te trzy linie łatają: Qwen4Exp to architektura wewnątrz Qwen3.8-Flash-Next, modelu o otwartych wagach i 125 miliardach parametrów, który dostawca opublikował 2026-08-24 jako „eksperymentalny podgląd architektury, która będzie stanowić podstawę dla Qwen4” — a błąd dwóch ścieżek w tekstowej połowie tej architektury to dokładnie ten rodzaj szczegółu, którego można się dowiedzieć wyłącznie, obserwując warstwę serwowania, a nie wpis ogłaszający premierę.

Żeby nie było wątpliwości co do sposobu przedstawienia sprawy, bo ma to tu znaczenie: sam Qwen 4 nie został jeszcze wydany. Dostawca wymienił cztery warianty Qwen 4 — Qwen 4 Max, Flash, Plus i 27B — na swojej konferencji Apsara w dniu 22 września 2026 r. i nie opublikował żadnych wag, żadnego identyfikatora, żadnej ceny, żadnej długości kontekstu ani żadnego benchmarku dla żadnego z nich. Nic poniżej nie jest wydaniem. To podsumowanie tego, co jak dotąd wiemy, na temat jednego pull requesta w wersji roboczej, a wszystko w nim, co zawiera liczbę, jest albo znacznikiem czasu, który możesz zweryfikować, albo liczbą, którą współtwórca wpisał do treści swojego PR-a, albo wartością odczytaną z publicznego pliku konfiguracji modelu.

Czym jest próbkowanie z podziałem na partie, w jednym akapicie

Równoległość tensorowa dzieli wagi modelu między GPU; projekcja słownika jest najszerszym pojedynczym tensorem w stosie, więc każda ranga normalnie oblicza tylko własny wycinek słownika — a następnie każda ranga wykonuje all-gather, tak że każda z nich ostatecznie przechowuje pełne logity dla każdego żądania w partii. Próbkowanie z podziałem odwraca tę wymianę. Zamiast replikować słownik między rangami, fragmentuje partię: każda ranga próbkuje jeden wycinek żądań, a rangi wymieniają się wycinkami słownika między sobą w operacji all-to-all. Dokumentacja CLI samego vLLM opisuje tę flagę wprost — „Każda ranga próbkuje wycinek partii, zamiast aby każda ranga próbkowała całość” — i podaje ograniczenia: --enable-batch-sharded-sampling domyślnie ma wartość False, wymaga tensor_parallel_size większego niż 1, co najmniej tensor_parallel_size maksymalnych sekwencji oraz nieujemnego max_logprobs. Ostatnia linia tej dokumentacji to haczyk, na którym wisi ten pull request: „Modele włączają tę opcję, implementując compute_logits_local”.

Sama funkcja nie jest nowa. vLLM scalił ją jako PR #50465 — „[Model Runner V2] batch-sharded sample”, autorstwa Giancarlo Delfina — 2026-08-24, tego samego dnia, w którym pojawiły się wagi Qwen3.8-Flash-Next. Motywacją była tam pamięć i opóźnienia: materializacja pełnych logitów celu kosztuje rzędu rozmiar batcha × (tokeny spekulatywne + 1) × rozmiar słownika, a shardowanie zmniejsza tę alokację o czynnik równy stopniowi parallelizmu tensorowego, pozwalając jednocześnie na równoległe wykonywanie obliczeń top-k i top-p przez próbnik. To krok umożliwiający, a nie cel: sam tekst PR-a wskazuje shardowane logity draftu jako przyszłe zadanie.

Dlaczego trzy linijki to była cała robota

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.

Oto rzeczywisty defekt, i to niezły, ponieważ jest niewidoczny z zewnątrz kodu. Implementacja Qwen4Exp w vLLM występuje w postaci dwóch klas. Qwen4ExpForConditionalGeneration to wrapper językowo-wizyjny — wieża wizyjna Qwen3-VL przykręcona do modelu językowego — a Qwen4ExpForCausalLM to ścieżka wyłącznie tekstowa. Wrapper dziedziczy compute_logits_local po Qwen3_5ForConditionalGeneration, która przekazuje wywołanie dalej do language_model.compute_logits_local. Ale klasa modelu językowego, na którą wskazywał wrapper, nigdy nie zdefiniowała tej metody.

Zatem te dwie ścieżki znajdowały się w różnych stanach. Wdrożenie wizyjno-językowe Qwen3.8-Flash-Next mogło korzystać ze ścieżki z shardingiem; wdrożenie wyłącznie tekstowe już nie, ponieważ metoda, do której delegował wrapper, nie istniała. Poprawka to jedna metoda, identyczna w kopii pliku modelu dla NVIDIA i AMD:

• Metoda zwraca self.logits_processor(self.lm_head, hidden_states, skip_gather=True) — własny fragment słownika danego ranka, bez operacji gather i bez materializacji pełnego słownika na żadnym z ranków.

• Podąża to za tym, co PR nazywa „tym samym trzywierszowym wzorcem co Qwen3.5 i MiniMax M3”, nad czym warto się zatrzymać: dwie inne rodziny modeli w tym samym repozytorium już się na to zdecydowały. Qwen4Exp był po prostu tym, który tego nie zrobił.

Plik testowy to miejsce, w którym najłatwiej sprawdzić uczciwość patcha i najłatwiej dostrzec jego ograniczenia. Ma 57 linii, jest parametryzowany względem obu modułów — NVIDIA i AMD — i nie pobiera modelu. Funkcja pomocnicza buduje klasę za pomocą object.__new__, podstawia nn.Identity w miejsce głowicy modelu językowego i instaluje fałszywy procesor logitów, który zwraca swoje wejście plus jeden, rejestrując przy tym sposób wywołania. Pierwszy test sprawdza, że 4.0 na wejściu daje 5.0 na wyjściu oraz że zarejestrowane wywołanie niosło skip_gather=True. Drugi opakowuje model językowy w klasę generowania warunkowego i sprawdza, że delegacja trafia do celu. To prawdziwy test okablowania i test wyłącznie tego — żaden kernel nie jest uruchamiany, żadna granica rangi nie jest przekraczana, a liczba zaangażowanych GPU wynosi zero.

Oba te fakty są podane w PR, a nie zakopane gdzieś głębiej. Sam docstring pliku testowego nazywa Qwen4Exp „malutkim dublerem testowym działającym wyłącznie na CPU". W sekcji walidacji autor zauważa, że w swoim środowisku macOS nie był w stanie w ogóle zaimportować modelu, ponieważ transformersw wersji, którą miał, nie zawierał Qwen4ExpConfig. Uruchomienie na CUDA wciąż było w toku. Benchmark end-to-end — agentowy zbiór danych MLPerf, 20 równoczesnych sesji, trzy 60-minutowe ramiona — wciąż był w toku. Ścieżka logitów samego draftora MTP jest oznaczona jako niesprawdzona. LoRA jest już odrzucana przez flagę na wcześniejszym etapie, więc jest poza zakresem, a nie regresją. Jest też wiersz ujawniający, że szkic powstał z pomocą AI, a stopka commita wymienia Claude Opus 5.5 jako współautora — to rodzaj ujawnienia, który w stosie tej wielkości powinien być normą, a przeważnie nie jest.

Szacunek 1,5% oraz pomiary, obok których się znajduje

Szacunek współtwórcy to zapis z nsys przy 16 równoczesnych sesjach na Qwen3.8-Flash-Next-FP8 z równoległością tensorową 8 i równoległością ekspertów na ośmiu kartach A100-SXM4-40GB: około 1,6 milisekundy z 42-milisekundowego kroku, co można przyciąć do mniej więcej jednej trzeciej tej wartości, dając końcowy zysk od 1,5 do 2%. Jego nagłówek to arytmetyka — od 0,6 do 0,8 ms na 42 ms. Zwróć uwagę, co się z tym wiąże: 42 ms to wartość opóźnienia między tokenami, więc cięcie o 1,7% to cięcie o 1,7% czasu generowania tokenów, a nie abstrakcyjne twierdzenie o przepustowości.

Uczciwe porównanie polega na odniesieniu się do własnych zmergowanych liczb funkcji nadrzędnej, ponieważ zostały one zmierzone od początku do końca przez kogoś dysponującego sprzętem. W przebiegach Speed-Bench 2K/2K opublikowanych w PR #50465 próbkowanie z shardowaniem partii podniosło DeepSeek V4 z DSpark przy 7 tokenach spekulatywnych i współbieżności 64 z 2,62 do 2,66 żądań na sekundę — wzrost przepustowości o 1,53% — przy czym mediana opóźnienia między tokenami spadła o 3,09%, a czas do pierwszego tokenu wzrósł o 1,45%. Na MiniMax M3 z DSpark przy 8 tokenach spekulatywnych przepustowość żądań wzrosła o 5,38%, a mediana TPOT spadła o 8,33% z 15,61 do 14,31 milisekundy. Ten sam plan dokumentuje też, gdzie to nie pomaga: przy współbieżności od 4 do 16 wyniki były płaskie lub nieznacznie negatywne, a wariant ze współbieżnością 16 miał o 0,54% niższą przepustowość i o 1,89% mniejszą długość akceptacji.

Ten wzorzec to rzecz, którą warto zapamiętać. Próbkowanie z podziałem na shardy opłaca się, gdy próbkowanie jest intensywne, a partia szeroka — duża współbieżność, wiele tokenów spekulatywnych, top-k i top-p wykonujące realną pracę — a kosztuje trochę, gdy partia jest na tyle mała, że all-to-all to czysty narzut. Szacunek 1,5% dla jednego modelu, który się na to decyduje, jest z tym spójny, a nie w sprzeczności z tym: wartości 5,38% i 8,33% dotyczą różnych modeli o różnych budżetach spekulatywnych, a model z tego PR-a ma własną konfigurację, własny słownik liczący 248 320 tokenów i własną ścieżkę dekodowania spekulatywnego.

Nic z tego nie jest audytowane. Liczby z nadrzędnego PR-a to wyniki przebiegów jednego współtwórcy na jednym węźle; liczby z testu dymnego tutaj to ślad na sprzęcie, którego autor nie ma, z wersji poprawki, która — jak mówi — została zmierzona tylko w 16 sesjach. Pomiar od jednego współtwórcy w jednej konfiguracji to użyteczny sygnał co do kierunku, ale zła podstawa do planu przepustowości. Powód, dla którego warto o tym pisać, to kierunek, a nie liczba po przecinku.

Co otaczający klaster łatek mówi o Qwen4Exp

Jeden PR w wersji roboczej nie byłby historią. Historia jest taka, że Qwen4Exp stał się trwałym celem serwowania w tygodniu, w którym to trafiło, a najmniejsza łatka w tym klastrze jest tą, która czyni wzorzec czytelnym. W ciągu siedmiu dni do 2026-10-10 vLLM przyjął — od tego samego współtwórcy i innych — ścieżkę głównej pamięci podręcznej KV FP8 dla rzadkiej uwagi na Ampere, ze wzrostem pojemności KV o 1,83× na ośmiu A100 i 1,87× na czterech RTX 3090 oraz około 2,7× więcej żądań przy współbieżności 16, kosztem około 6% wyższego TPOT dekodowania pojedynczego strumienia; poprawkę dopełniania W4A4 MoE przy tensor-parallel 1 i równoległości ekspertów; ścieżkę AMD, która w przypadku nieobsługiwanych operacji AITER FP8 MoE przechodzi na tryb zapasowy i obsługuje w fp16; poprawkę przeprowadzającą stan krótkiej konwolucji PLE przez tryb align; oraz jądro dekodowania, które rozpakowuje bajty e4m3 po cztery naraz na rejestr na sm_80. Jedna z nich — ponowne dostrojenie scalonego planu QSA LL-GEMM dla H200 M=4 — została scalona do gałęzi main 2026-10-09.

Przeczytaj tę listę jako całość, a mówi ona coś konkretnego. Architektura Qwen4Exp — ta, której dostawca nie wydał — jest dostrajana jednocześnie pod Ampere, Hopper, ROCm i fp16 fallback, w projekcie, który zapewnia wsparcie od dnia zero dla modeli, które ludzie mogą faktycznie pobrać. Powód nie jest tajemniczy: Qwen3.8-Flash-Next to prawdziwy, możliwy do pobrania, intensywnie używany model, a zbudowano go na architekturze, której użyje Qwen 4. Nie wiadomo, czy wagi Qwen 4 kiedykolwiek pojawią się w takiej postaci, a dostawca nic nie powiedział, ale zakres obsługi jest poszerzany publicznie, a to informacja możliwa do sprawdzenia w sposób, w jaki pogłoska o oknie od października do listopada nie jest.

Część kształtu architektury jest również publiczna — dla każdego, kto czyta konfigurację, a nie ogłoszenie. Konfiguracja Qwen3.8-Flash-Next wymienia słownik 248 320 tokenów w 48 warstwach, 512 ekspertów, z których 10 jest routowanych, plus jeden wspólny aktywny na token, przy pośredniej szerokości eksperta wynoszącej 640, rozmiarze ukrytym 2560 i natywnym kontekście 262 144 tokenów opisywanym jako rozszerzalny do miliona. To model hybrydowy: lista typów warstw przeplata trzy bloki uwagi liniowej z jednym blokiem pełnej uwagi, a bloki pełnej uwagi korzystają ze ścieżki uwagi rzadkiej z indekserem z jedną głowicą, który kompresuje klucze czterokrotnie i utrzymuje budżet 2048 pozycji. Na warstwie 2 znajduje się tabela embeddingów dla poszczególnych warstw, embedding n-gramowy ze słownikiem liczącym 20 milionów pozycji — to ta tabela o rozmiarze 47,7 GiB, którą inne poprawki w tym klastrze zajmują się przygotowywaniem na hoście — oraz jednowarstwowa głowica MTP do dekodowania spekulatywnego. Podsumowanie z samej karty modelu brzmi: „125B z 6B aktywowanych, plus 51B embeddingu n-gramowego i 4B MTP”. Słownik liczący 248 320 pozycji jest powodem, dla którego projekcję logitów w ogóle warto shardować.

Co to dla ciebie nie zmienia

Warto być precyzyjnym, ponieważ tak gęsty klaster patchy może wyglądać jak premiera. Nic z powyższego nie zostało scalone, a jeden element — prace nad pamięcią podręczną KV FP8 dla Ampere — jest wyraźnie niezweryfikowany w CI, ponieważ CI vLLM nie ma A100. Nie ma wydanej wersji vLLM, którą można by dziś zainstalować, a która zawierałaby opcjonalne włączenie sharded samplingu Qwen4Exp. Nie istnieje niezależny benchmark działania serwingu Qwen3.8-Flash-Next w ramach którejkolwiek z tych zmian; każda liczba przytoczona powyżej pochodzi z treści PR-ów, co czyni je raportowanymi przez współtwórców i niesprawdzonymi w tym konkretnym sensie, że żadna strona trzecia nie odtworzyła tego przebiegu. A liczba z nagłówka w PR, który zapoczątkował ten tekst, to 1,5%, co jest realnym zyskiem w stosie serwującym i nie jest powodem do zmiany wyboru modelu.

Co zmieniłoby decyzję, to pełny, poddany audytowi przebieg serwowania, a taki jeszcze nie istnieje. Pomiary tempa, które istnieją dla Qwen3.8-Flash-Next, są całkowicie poza tymi łatkami: model uzyskuje Intelligence Index na poziomie 40 w Artificial Analysis, znacznie powyżej mediany 18 dla modeli open-weight o podobnej wielkości, a ta liczba jest niezależna od wszystkiego, co tu omówiono.

Co możesz dziś wywołać, i aspekt routingu

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.

Tu obraz staje się praktyczny dla każdego, kto doczytał do tego miejsca i chce korzystać z hostowanego modelu, a nie go instrumentować. Qwen3.8-Flash-Next nie znajduje się w katalogu OrcaRouter — nie jest jednym z 205 modeli, które routujemy, i nie ma dla niego tutaj hostowanego punktu końcowego. Ale produkcyjny odpowiednik, który zapowiada, jest: qwen/qwen3.8-flash, oficjalne wydanie Qwen3.8-Flash, które karta modelu samego dostawcy opisuje jako mające więcej funkcji niż wersja zapoznawcza, w tym domyślnie kontekst miliona tokenów i wbudowane narzędzia, jest dostępne w cenie 0,15 USD za milion tokenów wejściowych i 0,47 USD za milion tokenów wyjściowych, przekazywanej po cenie katalogowej dostawcy bez doliczania marży. Dla porównania skali w ramach tej samej rodziny qwen/qwen3.8-27b kosztuje 0,33 USD i 2,40 USD, a qwen/qwen3.8-max 2,00 USD i 6,00 USD — wszystkie dostępne na jednym kluczu.

Istnieją dwa powody, które w przypadku tekstu o niewydanej architekturze mają większe znaczenie niż zwykle. Pierwszym jest koszt przejścia. Jeśli chcesz skalibrować, jak model z rzadką uwagą (sparse-attention) sprawdza się na Twoim ruchu, zanim Qwen 4 będzie istnieć, porównaniem, które chcesz przeprowadzić, jest qwen/qwen3.8-flash w cenie katalogowej — a zrobienie tego przez router oznacza, że model, który mierzysz, i model, do którego możesz się wycofać, są za tym samym endpointem, tym samym SDK i tym samym kluczem, bez konieczności podpisywania drugiej umowy. Drugim jest to, że każda zmiana w serwowaniu w tym zestawie poprawek dotyczy samodzielnie hostowanego vLLM. Jeśli nie uruchamiasz ośmiu A100, pojemność KV 1,83× i zysk 1,5% w próbkowaniu to rzeczy, o których czytasz, a nie takie, które dostajesz. Endpoint z routingiem to wersja tego, która przychodzi bez etapu budowania: automatyczne przełączanie awaryjne, jeśli dostawca ulegnie degradacji, oraz DSL routingu, który pozwala umieścić wywołanie hostowane obok samodzielnie hostowanego w jednym endpointcie, gdy rzeczywiście masz własny sprzęt do pomiarów.

Jedyne, czego nie należy robić, to czytać tego artykułu jako powodu, by czekać na Qwen 4. Nie ma daty. Nie ma ceny. Nie ma liczby wag dla prawdziwej wersji — liczby powyżej opisują kompilację preview, a nie produkt. To, co istnieje, to stos serwujący przygotowywany publicznie dla architektury, którą na razie można pobrać wyłącznie w formie preview.

Krótka wersja

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.

Trzy linijki zamykające lukę między ścieżką tylko tekstową a ścieżką wizyjno-językową jednego pliku modelu to same w sobie nie nowina. To tego rodzaju łatka, która zostałaby pogrzebana w commicie scalającym, gdyby ktokolwiek miał czas ją przejrzeć, i równie dobrze może zostać włączona do większej zmiany albo po prostu zamknięta — własne wytyczne dla agentów bota vLLM, cytowane w PR, nakazują współtwórcom wspieranym przez AI zamykać swoją pracę, jeśli brakuje jej istotnych korzyści, a 1,5% to liczba, która nasuwa to pytanie. To, co sprawia, że warto zwrócić na to uwagę, to rzecz, którą to dokumentuje: tablica n-gramów z 20 milionami wpisów, MoE z 512 ekspertami, z których dziesięciu jest aktywnych na token, hybryda liniowego attention i skompresowanego sparse attention, głowica spekulacyjna — a wszystko to jest dostrajane na sprzęcie NVIDIA i AMD, od Ampere po Hopper, zanim produkt, który ma to nieść, w ogóle istnieje. Jeśli interesuje cię zakres obsługi Qwen4, to treści PR są miejscem, w którym obecnie żyją jego prawdziwe specyfikacje. Jeśli chcesz dziś wywołać model, Qwen3.8-Flash jest tym, który faktycznie jest dostępny.

Jedno API dla ponad 200 modeli, automatyczne przełączanie awaryjne, DSL routingu. Poznaj katalog modeli OrcaRouter

Porównane w tym artykule2

Wykryto na podstawie tego artykułu · Benchmarki: Artificial Analysis · aktualizowane codziennie