Хостване на Qwen на Blackwell

Как обслужваме Qwen3 235B на ракове NVIDIA GB200 NVL72, намалявайки разходите за инференс при запазване на точността на модела.

АвториPerplexity Research

Раковете NVIDIA GB200 NVL72 с графични процесори NVIDIA Blackwell, свързани помежду си чрез 72-потоков NVLink, са изключително подходящи за внедряване на големи модели от тип смес от експерти (MoE). В тази публикация в блога описваме конфигурацията за инференс, обслужваща дообучени модели Qwen3 235B, които поддържат част от трафика на Perplexity. Показваме как адаптирахме нашия собствен двигател за инференс, за да се възползваме от усъвършенстваните тензорни ядра и високоскоростната връзка между графичните процесори NVIDIA Blackwell. С този хардуер обработваме повече трафик на по-ниска цена, без да жертваме точността на базовите модели.

Внедряване на GB200 NVL72

Раковете GB200 NVL72 се състоят от 18 възли с 2 базирани на ARM процесора NVIDIA Grace и 4 базирани на Blackwell графични процесора, всеки от които е оборудван със 180 GB HBM. 72-те графични процесора са свързани помежду си чрез NVLink и 18 ASIC превключвателя NVLink, осигуряващи пропускателна способност от 1800 GB/s между всеки два партньора и споделящи достатъчно памет за хостване на модели с трилиони параметри. Освен това адаптерите ConnectX-7 InfiniBand осигуряват допълнителна пропускателна способност от 400 Gb/s както в рамките на възлите на един рак, така и между съседни ракове.

За да обработваме трафика, избрахме да дообучим и обслужваме модели Qwen. В тази публикация в блога се фокусираме върху Qwen3 235B, но много от обсъжданите техники за обслужване и характеристики на производителността са сходни с тези на по-новите модели Qwen3.5 397B и 122B, към които мигрираме. По отношение на паралелизма линейното внимание е сходно с пълното самовнимание и съществуващата реализация на MoE слоя може лесно да бъде адаптирана, за да поеме новите термини на гейтовете. За да поддържаме постоянна скорост на декодиране, като същевременно максимизираме пропускателната способност, избрахме да разделим предварителното запълване (prefill) от декодирането, като внедрим различни стратегии за паралелизъм за двата вида възли. Комуникацията между предварителното запълване и декодера се осъществява през InfiniBand, докато пропускателната способност на NVLink е запазена за комуникация в рамките на предварителното запълване и декодерите. Характеристиките на производителността на устройствата Blackwell при извършване на матрично умножение и комуникация между устройствата, разгледани в тази публикация в блога, определят използваните стратегии за шардиране. В сравнение с графичните процесори NVIDIA Hopper, наблюдаваме подобрения ядро по ядро поради по-големия брой стрийминг мултипроцесори, повишената пропускателна способност на паметта и по-ниските латентности от точка до точка.

Дезагрегирано prefill и decode, с InfiniBand между prefillers и decoders и NVLink във всяко разгръщане.

Нашият TransferEngine, който реализира разделено предварително запълване (disaggregated prefill), обработва произволно и евентуално несъвпаднато шардиране между устройствата за предварително запълване и декодерите. KV кешовете са подредени в паметта в ред HND, с глави в водещото измерение и токени, запазени съседни, за да се позволи шардиран KV кеш върху устройство за предварително запълване да бъде допълнително разделен или конкатениран в движение по време на трансфера към възела на декодера.

Устройства за предварително запълване

Възлите за предварително запълване получават входните токени на заявка, попълвайки KV кешовете и прехвърляйки ги към декодерите за продължаване на генерирането на текст. Предварителното запълване е изчислително интензивно, тъй като хиляди токени, принадлежащи към една последователност, се обработват едновременно.

В резултат на това установихме, че внедряването с тензорен паралелизъм е подходящо, като моделът е шардиран между 4 графични процесора в рамките на един възел GB200, а проекциите и експертите са шардирани (TP=4, EP=4). Тъй и вниманието, и MLP са обвързани с изчисленията, и двете се възползват от паралелизма, разпределяйки експертите и главите за внимание в отделни рангове. Допълнителният паралелизъм би довел до намаляваща възвращаемост, тъй като подобрението на пропускателната способност от хостването на по-малко експерти във всеки ранг (16 спрямо 32) нямаше да компенсира допълнителната цена на 8-потоков all-reduce и овърхеда от разделянето на кода от страната на хоста между два възли, изискващ комуникация през Ethernet.

Qwen3 235B има само 4 глави за ключ-стойност, което изисква проекциите k и v да бъдат репликирани в двойки рангове, ако се използват 8 устройства. Можеше да обмислим по-агресивно шардиране, за да намалим количеството памет, необходимо за съхраняване на теглата във всеки ранг, освобождавайки пространство за повече токени в KV кеша. Въпреки това установихме, че по-широкото внедряване не си заслужава.

Приемайки входна дължина от около 6000 токена, всеки от 128-те експерти има около 6000 * 8 / 128 = 375 токена, насочени към него, което гарантира плътна задача за MoE GEMM. Тъй като това вече насища изчислителната пропускателна способност на устройството, паралелизмът на данните не е необходим за предварителното запълване.

Въпреки квадратично нарастващата цена на вниманието, устройствата за предварително запълване осигуряват постоянна пропускателна способност, което позволява груба оценка на броя входни токени, които могат да бъдат обработени от един възел за една секунда. Разчитайки на метрики, проследяващи общия брой входни токени от заявките, броят на възлите за предварително запълване може да бъде мащабиран нагоре, за да се гарантира, че общата пропускателна способност за предварително запълване е оразмерена съответно. За да се избегне опашването, броят на репликите за предварително запълване се съгласува с общия брой получени входни токени.

Декодери

Възлите на декодера получават KV кешовете от устройствата за предварително запълване и генерират токени един по един. Декодирането обикновено е обвързано с паметта: с малко входни токени матричното умножение е изцяло обвързано от разходите за зареждане на тегла от HBM в тензорните ядра. Освен използването на различна стратегия за шардиране, няколко ядра трябва да бъдат фино настроени, за да се паралелизират по-добре изчисленията и достъпите до паметта.

За разлика от предварителното запълване, шардирането на вниманието вече не е полезно: разделянето на главите за внимание между множество устройства би означавало, че има по-малко възможности за паралелизъм в рамките на едно устройство. Следователно се използват само паралелизъм на данните и експертен паралелизъм: експертите се шардират между множество устройства, но всяко устройство управлява собствените си KV кешове и заявки. Без тензорен паралелизъм размерът на KV кеша на токен на устройство е по-голям. Въпреки това се освобождава пространство в паметта чрез разполагане на по-малко експерти на един възел. За разлика от Hopper, където ограничихме тензорния паралелизъм в рамките на един NVLink домейн в 8-GPU възел, при Blackwell установихме, че разширяването в множество възли в рамките на един домейн, използвайки до 16 устройства, е полезно.

За да масимизират пропускателната способност, декодерите обработват по-голям брой заявки едновременно. Въпреки че допълнителните заявки водят до минимален овърхед в MoE слоевете и другите проекции, те непропорционално увеличават цената на вниманието. За да се поддържа разумна минимална скорост на декодиране, броят на възлите на декодера се мащабира, за да се поддържат размерите на партидите на декодер под определен праг.

По подобен начин на предишните внедрявания на Hopper, използваме спекулативно декодиране с MTP слоеве, обучени вътрешно, за да увеличим скоростите на декодиране. За щастие, базовият хардуер и програмните рамки са достатъчно сходни, за да споделят напълно реализацията между двете архитектури.

Комуникация в рамките на възела и между възлите

Основната разлика между GB200 NVL72 и предишните възли Hopper е големият NVLink домейн, който позволява комуникация от точка до точка извън предишното ограничение от 8 устройства. Въпреки че устройствата Blackwell са внедрени във възли с 8 графични процесора, има голяма стойност в мащабирането през множество възли през NVLink в сравнение с по-бавната мрежа InfiniBand.

На възлите за предварително запълване разчитаме на all-reduce комуникация в рамките на слоевете за внимание и на експертно паралелно редуциране, което силно напомня на all-reduce. В 4 графични процесора се възползваме както от NVLink, така и от NVIDIA SHARP (Scalable Hierarchical Aggregation and Reduction Protocol): в допълнение към пропускателната способност от точка до точка, ние също експлоатираме редуцирания в NVLink превключвателите за допълнително намаляване на латентностите и внедряване на бързи излъчвания (broadcasts). На възлите на декодера се използва персонализирана реализация на all-to-all изпращане и комбиниране през NVLink. Ядрата са реализирани вътрешно с помощта на CuTeDSL и cuMem мапинги или мапинги с размножаване (multicast).

All-Reduce

Устройствата за предварително запълване извършват all-reduce операция в изходната проекция на слоя за внимание, сумирайки приносите на главите, шардирани между участващите рангове. Тензорният паралелизъм е ефективен само когато цената на all-reduce овърхеда се компенсира от намалената латентност на по-малките задачи за матрично умножение. Това предположение обикновено е в сила за предварителното запълване.

В системи от клас на центрове за данни NVIDIA HGX H200 и GB200 NVL72 графичните процесори обикновено са свързани чрез NVLink превключватели. Освен маршрутизирането, превключвателите могат да извършват операции по редуциране между свързаните устройства чрез SHARP. След създаване на мапинги на паметта и регистрирането им в група за мултикаст с помощта на CUDA API, ядрата могат да използват multicast.ld_reduce и multicast.st за агрегиране и излъчване на стойности през превключвателите. За да създадем основа и занемарими компоненти, които могат да бъдат слети в други ядра, поддържаме вътрешно all-reduce ядро CuTeDSL, използващо тези примитиви.

В система с N графични процесора, редуциращи B байта, тривиалната реализация би имала партньор, зареждащ стойности от всички останали партньори, за общо N * (N - 1) * B байта трафик за четене. По-ефективната реализация би разделяла данните за редуциране между партньорите, като всеки редуцира отрязък от входните данни, след което ги излъчва към останалите. Това води до (N - 1) * (B / N) байта, прочетени в партньор и излъчени към останалите, за общо (N - 1) * B * 2 четения и записи, намалявайки трафика през превключвателите.

NVSwitch трафик на all-reduce с GPU-странично натрупване и редукция, подпомагана от суича.

Със SHARP редуцирането и излъчването могат да се извършват по-ефективно: вместо да се четат (N - 1) * (B / N) байта в устройство за локално акумулиране, само B / N се преместват от превключвателя, тъй като той сам извършва редуцирането, използвайки данни от партньорите. За излъчването има подобно подобрение, тъй като броят на транзакциите между графичния процесор и превключвателя по NVLink каналите е силно намален. Без SHARP акумулиращото устройство би извършило (N - 1) * (B / N) транзакции по NVLink с превключвателя, като превключвателят чете същото количество данни от партньорите, за общо 2 * (N - 1) * (B / N) транзакции. Със SHARP се извършват B / N транзакции между графичния процесор и превключвателя и още (N - 1) * (B / N) с партньорите, за общо B транзакции.

Поради своята опростеност SHARP е ценен инструмент, тъй като предоставя ясна хардуерна реализация за даден алгоритъм. Въпреки че трансферите са намалени с теоретична фракция N / (2 * (N - 1)) (което се равнява на 33% с 4 партньора), на практика наблюдаваме 10% подобрение както в латентностите на предварителното запълване, така и на декодирането както на H200, така и на GB200 NVL72 системи.

NVLink и NVLS латентност на dispatch на H200 и GB200 при TP=4 с 16K токена.

MoE Dispatch - Combine

За MoE моделите ядрата за разпределение (dispatch) и комбиниране (combine) преместват и групират токени за последващите задачи за MoE GEMM между партньорите, извършвайки претеглено акумулиране след това в combine. Адаптирахме съществуващите си ядра Dispatch и Combine за Blackwell, портвайки ги към CuTeDSL, фино настройвайки алокациите на блокове и агресивно специализирайки ги между предварително запълване и декодиране.

Експертен паралелизъм

Експертното паралелно (EP) ядро се използва в устройствата за предварително запълване. Тъй като неговите входове са репликирани във всички рангове, ядрото за разпределение трябва просто да избере токените, насочени към експертите на текущия ранг. То агрегира информацията за маршрутизиране и подготвя токените в буфери, използвани като входове за MoE GEMM. Ядрото combine първо извършва локално акумулиране между приносите на токените, насочени към експертите на текущия ранг, след което извършва all-reduce във всички рангове.

За декодиране цялото ядро е слето в едно. Ядрото за предварително запълване е разделено на множество ядра, тъй като маршрутизирането и all-reduce изискват по-малко блокове от стъпката на локално комбиниране. С CuTeDSL бихме могли да изградим обща библиотека както за SHARP, така и за NVLink all-reduce и синхронизация от точка до точка, композирайки я както в all-reduce, така и в експертните паралелни ядра.

Латентност на dispatch и combine при expert-parallel prefill на H200 и GB200 през expert-parallel конфигурации.

По отношение на производителността наблюдаваме, че Blackwell е съществено по-бърз от Hopper поради подобрените скорости на трансфер, по-високата пропускателна способност на паметта и по-добрия изчислителен капацитет. Шардирани в 8 устройства и множество възли на GB200 (EP=8), ядрата стават по-бързи, тъй като локалното акумулиране работи с много по-малко токени на всяко устройство и, със SHARP, цената на редуцирането в повече рангове се мащабира по-добре. Въпреки това на практика ограничаваме паралелизма до 4 устройства, тъй като тези ускорения не са универсални за всички ядра.

Паралелизъм на данните и експертен паралелизъм

Ядрото за паралелизъм на данните и експертен паралелизъм (DP-EP) се използва в декодерите с паралелизъм на данните. То излъчва различни токени от всички рангове към експертите, прехвърляйки резултатите към изходните рангове и акумулирайки ги. Тъй като реализира рядка (sparse) all-to-all задача, то разчита единствено на NVLink.

На Hopper това ядро е ограничено до 8 устройства в рамките на NVLink домейна на един възел. Въпреки това на GB200 системи можем да го мащабираме в рамките на цял рак. Повечето от кода се преизползва. Единствената разлика е използването на fabric хендли за обмен на информация за партньорите през IMEX за първоначалната настройка.

Латентност на dispatch и combine на GB200 през data-parallel и expert-parallel конфигурации.

Тъй като размерите на трансферите по време на декодиране са малки, те са далеч от насищане на пропускателната способност на NVLink и вместо това са ограничени от латентността. Латентностите са в порядъка на десетки микросекунди и остават относително стабилни с увеличаването на броя на партньорите, което ни позволява да разпръснем внедряването в по-голям брой устройства, без да понасяме значителна допълнителна латентност.

MoE GEMM

Моделите MoE се възползват от експертния паралелизъм, тъй като цената на умножаването на всички токени с всички експерти може лесно да бъде паралелизирана между множество устройства. С тензорен паралелизъм при устройствата за предварително запълване при плътни задачи ползата е доста директна, тъй като всеки ранг сега трябва да извършва по-малко изчисления. В случая на декодиране паралелизмът на данните осигурява допълнителна полза в допълнение към експертния паралелизъм, тъй като по-големият брой паралелни заявки насочва повече токени към всеки експерт, сгъстявайки задачите.

В нашата реализация понастоящем разчитаме на CUTLASS CUDA/C++ ядра за матрично умножение. Направихме бенчмаркове на тези ядра с входни данни за разредено декодиране с различни схеми за квантуване и нива на паралелизъм, за да определим оптималната стратегия за шардиране за декодерите. В бенчмарковете по-долу всички експерти са активирани с един единствен токен.

Латентност на Grouped MoE GEMM през expert-parallel конфигурации и схеми за квантизация на H200 и GB200.

Установихме, че мащабирането на 128 експерти в повече от 16 ранга води до намаляваща възвращаемост с CUTLASS, тъй като цената на умножаването на 2 експерти не е съществено по-ниска от тази на умножаването на 4. Налице е ясно подобрение на Blackwell спрямо Hopper, дори при суб-оптималната стратегия за мащабиране на блокове. Тъй като увеличаването на латентността с около 5 us между EP=8 и EP=16 на dispatch/combine се компенсира от намаление от повече от 10 us в цената на GEMM, на GB200 системи шардирането на декодери в 16 ранга е оправдано, което се потвърждава и от енд-ту-енд бенчмаркове.

Квантуване

Blackwell въвежда хардуерна поддръжка за нови 8-битови и 4-битови схеми за квантуване. За разлика от Hopper, който разчиташе на фактори за мащабиране на тензор или блок, Blackwell изисква микромащабиране (microscaling) за постигане на най-добра пропускателна способност за предварително запълване и декодиране. Макар че схемата за мащабиране на блокове, използвана за модели като DeepSeek или Kimi, е налична, микромащабирането е по-ефективно.

Внедрихме Qwen3 235B със схемата за квантуване MXFP8, конвертирайки теглата статично след финото настройване на модела. Въздействието върху точността беше сходно с това на мащабирането на блокове със стохастично квантуване, но предоставената производителност беше много по-добра, както е илюстрирано от микробенчмарковете за MoE GEMM. Обмислихме също схемите за квантуване MXFP4 и NVFP4, макар че въздействието върху точността без обучение с осъзнаване на квантуването (Quantization-Aware Training) беше твърде съществено за първоначалния преход от Hopper към Blackwell. Планираме да изследваме тези формати по-задълбочено в бъдеща работа.

Енд-ту-енд производителност

Направихме бенчмаркове на декодерите на внедряванията на Blackwell Qwen3 235B и ги сравнихме с предишните ни внедрявания на Hopper. В тази конфигурация разгледахме мащабирането на блокове и за двете внедрявания, за да се фокусираме върху въздействието на паралелизма. Устройствата за предварително запълване TP=4 бяха разделени за двете архитектури, за да се изолира производителността на декодиране. Фигурата по-долу илюстрира пропускателната способност на декодиране при предположение за реалистичен процент на приемане на черновата, предоставен от нашите MTP слоеве.

Скорост и пропускателна способност на декодиране за Qwen3 235B FP8 на GPU при H200 и GB200 expert-parallel конфигурации, при допускане за дължина на draft acceptance 0.8.

На Hopper шардирането на внедряването в повече от 8 графични процесора не е жизнеспособно, тъй като латентностите през InfiniBand, особено на EFA адаптерите, са съществено по-бавни. Въпреки това на Blackwell постигаме съществено по-висока пропускателна способност благодарение на по-големите NVLink домейни.

Постигнахме първоначална реализация за Blackwell чрез обобщаване на съществуващи ядра за Hopper и повишаване на производителността на базираните на NVLink ядра. Ще продължим да намаляваме цената на обслужване на Qwen чрез подобряване на квантуването и фино настройване на производителността на декодиране и пропускателната способност за предварително запълване на останалите ядра в пайплайна.

Референции

Публикация в блога за Transfer Engine

Публикация в блога за CuTeDSL

Публикация в блога за Prefill-Disagg

Публикация в блога за спекулативно декодиране

CUTLASS

NVLink

Цитат

BibTeX
@online{perplexity2026HostingQwenOnBlackwell,
  author = {{Perplexity} and Nandor Licker and Kevin Hu and Bex Brooker and Erin McKnight},
  title = {{Hosting Qwen on Blackwell}},
  date = {2026-05-12},
  url = {https://www.perplexity.ai/hub/blog/hosting-qwen-on-blackwell}
}