Meng-host Qwen di Blackwell
Cara kami menyajikan Qwen3 235B pada rak NVIDIA GB200 NVL72, memangkas biaya inferensi sekaligus mempertahankan akurasi model.
Rak NVIDIA GB200 NVL72 dengan GPU NVIDIA Blackwell yang saling terhubung melalui NVLink 72 arah sangat cocok untuk menerapkan model mixture-of-experts (MoE) berukuran besar. Dalam postingan blog ini, kami menjelaskan penyiapan inferensi yang melayani model Qwen3 235B hasil pelatihan lanjutan yang mendukung sebagian lalu lintas Perplexity. Kami menunjukkan cara kami mengadaptasi mesin inferensi internal kami untuk memanfaatkan inti tensor canggih dan interkoneksi berkecepatan tinggi dari GPU NVIDIA Blackwell. Dengan perangkat keras ini, kami menangani lebih banyak lalu lintas dengan biaya lebih rendah tanpa mengorbankan akurasi model yang mendasarinya.
Menerapkan pada GB200 NVL72
Rak NVIDIA GB200 NVL72 terdiri dari 18 node dengan 2 CPU NVIDIA Grace berbasis ARM dan 4 GPU berbasis Blackwell, masing-masing dilengkapi dengan HBM 180GB. Ke-72 GPU saling terhubung melalui NVLink dan 18 ASIC Switch NVLink, memberikan bandwidth sebesar 1800 GB/s antara dua peer apa pun dan berbagi memori yang cukup untuk meng-host model dengan parameter triliunan. Selain itu, adapter ConnectX-7 InfiniBand memberikan tambahan bandwidth 400 Gb/s baik di dalam node rak maupun antar rak yang berdekatan.
Untuk menangani lalu lintas, kami memilih untuk melatih lanjutan dan melayani model Qwen. Dalam postingan blog ini, kami fokus pada Qwen3 235B, tetapi banyak teknik penyajian dan karakteristik performa yang dibahas mirip dengan model Qwen3.5 397B dan 122B yang lebih baru yang sedang kami migrasikan. Dalam hal paralelisme, attention linier mirip dengan self attention penuh dan implementasi layer MoE yang ada dapat dengan mudah disesuaikan untuk mengakomodasi term gate baru. Untuk mempertahankan tingkat decoding yang konsisten sekaligus memaksimalkan throughput, kami memilih untuk memisahkan prefill dari decode, dengan menerapkan strategi paralelisme yang berbeda untuk kedua jenis node tersebut. Komunikasi prefiller-ke-decoder ditangani melalui InfiniBand, sedangkan bandwidth NVLink dicadangkan untuk komunikasi di dalam prefiller dan decoder. Karakteristik performa perangkat Blackwell saat melakukan perkalian matriks dan komunikasi antar-perangkat, yang dibahas dalam postingan blog ini, menentukan strategi sharding yang digunakan. Dibandingkan dengan GPU NVIDIA Hopper, kami melihat peningkatan dari kernel ke kernel karena jumlah streaming multiprocessor yang lebih tinggi, bandwidth memori yang meningkat, dan latensi peer-to-peer yang lebih rendah.
TransferEngine kami, yang mengimplementasikan prefill terpisah, menangani sharding arbitrer dan yang mungkin tidak cocok di seluruh prefiller dan decoder. Cache KV ditata dalam memori dalam urutan HND, dengan head pada dimensi utama dan token dijaga agar tetap kontigu, untuk memungkinkan cache KV yang di-shard pada prefiller untuk dibagi lagi atau digabungkan selama transfer ke node decoder.
Prefiller
Node prefiller menerima token input dari suatu permintaan, mengisi cache KV dan mentransfernya ke decoder untuk melanjutkan pembuatan teks. Prefill secara komputasi sangat intensif, karena ribuan token yang termasuk dalam suatu urutan diproses secara bersamaan.
Akibatnya, kami menemukan bahwa penerapan paralel tensor sesuai, dengan model yang di-shard di 4 GPU dalam satu node GB200 dan proyeksi serta expert yang di-shard (TP=4, EP=4). Karena attention dan MLP sama-sama dibatasi komputasi (compute-bound), keduanya mendapat manfaat dari paralelisme, mendistribusikan expert dan head attention di berbagai rank terpisah. Paralelisme lebih lanjut akan menghasilkan pengembalian yang semakin berkurang (diminishing returns), karena peningkatan throughput dari meng-host lebih sedikit expert pada setiap rank (16 versus 32) tidak akan mengimbangi biaya tambahan dari all-reduce 8 arah dan overhead pemisahan kode di sisi host di dua node, yang memerlukan komunikasi melalui Ethernet.
Qwen3 235B hanya memiliki 4 head key-value, yang mengharuskan proyeksi k dan v direplikasi di pasang rank jika 8 perangkat digunakan. Kami dapat mempertimbangkan sharding yang lebih agresif untuk mengurangi jumlah ruang memori yang diperlukan untuk menyimpan bobot pada setiap rank, sehingga mengosongkan ruang untuk lebih banyak token di cache KV. Namun, kami menemukan bahwa penerapan yang lebih luas tidak sepadan.
Dengan asumsi panjang input sekitar 6000 token, masing-masing dari 128 expert memiliki sekitar 6000 * 8 / 128 = 375 token yang dirutekan ke expert tersebut, memastikan masalah padat untuk MoE GEMM. Karena ini sudah menjenuhkan throughput komputasi perangkat, paralelisme data tidak diperlukan untuk prefill.
Terlepas dari biaya attention yang meningkat secara kuadratik, prefiller menghasilkan throughput yang konsisten, memungkinkan perkiraan kasar untuk jumlah token input yang dapat diproses oleh sebuah node dalam satu detik. Mengandalkan metrik yang melacak jumlah total token input dari permintaan, jumlah node prefiller dapat ditingkatkan skalanya untuk memastikan bahwa throughput prefill secara keseluruhan disesuaikan dengan tepat. Untuk menghindari antrean, jumlah replika prefiller disesuaikan dengan total token input yang diterima.
Decoder
Node decoder menerima cache KV dari prefiller dan menghasilkan token satu per satu. Decode umumnya dibatasi memori (memory bound): dengan sedikit token input, perkalian matriks sepenuhnya dibatasi oleh biaya pemuatan bobot dari HBM ke dalam Tensor Core. Selain menggunakan strategi sharding yang berbeda, beberapa kernel harus diubah untuk memparalelkan komputasi dan akses memori secara lebih baik.
Tidak seperti prefill, sharding attention tidak lagi bermanfaat: membagi head attention di beberapa perangkat berarti akan ada lebih sedikit peluang untuk paralelisme dalam satu perangkat. Akibatnya, hanya paralelisme data dan paralelisme expert yang digunakan: expert di-shard di beberapa perangkat, tetapi setiap perangkat mengelola cache KV dan permintaannya sendiri. Tanpa paralelisme tensor, ukuran cache KV per token pada perangkat menjadi lebih besar. Namun, ruang dalam memori dikosongkan dengan menempatkan lebih sedikit expert pada satu node. Tidak seperti Hopper, tempat kami membatasi paralelisme tensor dalam satu domain NVLink di node 8-GPU, pada Blackwell kami menemukan bahwa memperluas ke beberapa node dalam domain, menggunakan hingga 16 perangkat, adalah hal yang bermanfaat.
Untuk memaksimalkan throughput, decoder memproses jumlah permintaan yang lebih besar secara bersamaan. Meskipun permintaan tambahan menimbulkan overhead minimal pada layer MoE dan proyeksi lainnya, permintaan tersebut secara tidak proporsional meningkatkan biaya attention. Untuk mempertahankan kecepatan decoding minimum yang wajar, jumlah node decoder ditingkatkan skalanya untuk menjaga ukuran batch per decoder di bawah ambang batas tertentu.
Demikian pula dengan penerapan Hopper sebelumnya, kami menggunakan speculative decoding dengan layer MTP yang dilatih secara internal untuk meningkatkan tingkat decoding. Untungnya, perangkat keras dan kerangka kerja pemrograman yang mendasarinya cukup mirip untuk membagikan implementasi sepenuhnya di antara kedua arsitektur tersebut.
Komunikasi Intra-node dan Inter-node
Perbedaan utama antara GB200 NVL72 dan node Hopper sebelumnya adalah domain NVLink yang besar, yang memungkinkan komunikasi peer-to-peer melampaui batas sebelumnya yaitu 8 perangkat. Meskipun perangkat Blackwell telah diterapkan di node 8-GPU, ada banyak nilai dalam melakukan penskalaan di beberapa node melalui NVLink dibandingkan dengan jaringan InfiniBand yang lebih lambat.
Pada node prefiller, kami mengandalkan komunikasi all-reduce di dalam layer attention dan pada reduksi paralel expert yang sangat mirip dengan all-reduce. Di 4 GPU, kami memanfaatkan NVLink dan NVIDIA SHARP (Scalable Hierarchical Aggregation and Reduction Protocol): selain bandwidth peer-to-peer, kami juga memanfaatkan reduksi di Switch NVLink untuk semakin mengurangi latensi dan mengimplementasikan siaran cepat. Pada node decoder, implementasi pengiriman dan penggabungan all-to-all kustom melalui NVLink digunakan. Kernel telah diimplementasikan secara internal menggunakan CuTeDSL dan pemetaan cuMem atau pemetaan multicast.
All-Reduce
Para prefiller melakukan operasi all-reduce dalam proyeksi output dari layer attention, menjumlahkan kontribusi dari head yang di-shard di seluruh rank yang berpartisipasi. Paralelisme tensor hanya efektif ketika biaya overhead all-reduce diimbangi oleh latensi yang dikurangi dari masalah perkalian matriks yang lebih kecil. Asumsi ini biasanya berlaku untuk prefill.
Pada sistem kelas pusat data NVIDIA HGX H200 dan GB200 NVL72, GPU biasanya terhubung melalui Switch NVLink. Selain perutean, switch dapat melakukan operasi reduksi di seluruh perangkat yang terhubung melalui SHARP. Setelah membuat pemetaan memori dan mendaftarkannya ke dalam grup multicast menggunakan API CUDA, kernel dapat menggunakan multicast.ld_reduce dan multicast.st untuk mengagregasi dan menyiarkan nilai melalui switch. Untuk membuat fondasi dan komponen yang dapat digunakan kembali yang dapat digabungkan ke dalam kernel lain, kami secara internal mempertahankan kernel all-reduce CuTeDSL menggunakan primitif ini.
Dalam sistem dengan N GPU yang mereduksi B byte, implementasi sederhana akan membuat peer memuat nilai dari semua peer lainnya, dengan total lalu lintas baca sebesar N * (N - 1) * B byte. Implementasi yang lebih efisien akan membagi data yang akan direduksi di antara para peer, dengan masing-masing mereduksi sebagian dari input, lalu menyiarkannya ke sisanya. Ini menghasilkan pembacaan (N - 1) * (B / N) byte ke dalam peer dan menyiarkannya ke sisanya, dengan total pembacaan dan penulisan sebesar (N - 1) * B * 2, sehingga mengurangi lalu lintas melalui switch.
Dengan SHARP, reduksi dan siaran dapat dilakukan secara lebih efisien: alih-alih membaca (N - 1) * (B / N) byte ke dalam perangkat untuk akumulasi lokal, hanya B / N yang dipindahkan dari switch, karena switch melakukan reduksi itu sendiri menggunakan data dari peer. Untuk siaran, ada peningkatan yang serupa, karena jumlah transaksi antara GPU dan switch melalui kanal NVLink sangat berkurang. Tanpa SHARP, perangkat akumulasi akan melakukan (N - 1) * (B / N) transaksi melalui NVLink dengan switch, dengan switch membaca jumlah data yang sama dari peer, dengan total 2 * (N - 1) * (B / N) transaksi. Dengan SHARP, B / N transaksi dilakukan antara GPU dan switch, dan (N - 1) * (B / N) lebih lanjut dengan peer, dengan total B transaksi.
Karena kesederhanaannya, SHARP adalah alat yang berharga, karena menyediakan implementasi perangkat keras yang mudah untuk suatu algoritma. Meskipun transfer dikurangi oleh pecahan teoretis N / (2 * (N - 1)) (yang bernilai 33% dengan 4 peer), dalam praktiknya kami mengamati peningkatan 10% dalam latensi prefill dan decode pada sistem H200 dan GB200 NVL72.
MoE Dispatch - Combine
Untuk model MoE, kernel dispatch dan combine memindahkan dan mengelompokkan token untuk masalah MoE GEMM berikutnya antar-peer, kemudian melakukan akumulasi tertimbang di combine. Kami telah mengadaptasi kernel Dispatch dan Combine kami yang ada ke Blackwell, dengan memportingnya ke CuTeDSL, mengubah alokasi blok, dan mengkhususkannya secara agresif antara prefill dan decode.
Expert Parallel
Kernel expert parallel (EP) digunakan pada prefiller. Karena inputnya direplikasi di semua rank, kernel dispatch hanya perlu memilih token yang dirutekan ke expert pada rank saat ini. Kernel ini mengagregasi informasi perutean dan menyiapkan token ke dalam buffer yang digunakan sebagai input untuk MoE GEMM. Kernel combine pertama-tama melakukan akumulasi lokal antara kontribusi token yang dirutekan ke expert pada rank saat ini, kemudian melakukan all-reduce di semua rank.
Untuk decode, seluruh kernel digabungkan menjadi satu. Kernel prefill dibagi menjadi beberapa kernel, karena perutean dan all-reduce memerlukan lebih sedikit blok daripada langkah combine lokal. Dengan CuTeDSL, kami dapat membangun pustaka generik untuk SHARP dan NVLink all-reduce serta sinkronisasi peer-to-peer, menggabungkannya ke dalam kernel all-reduce dan expert parallel.
Dari segi performa, kami mengamati bahwa Blackwell jauh lebih cepat daripada Hopper, karena peningkatan kecepatan transfer, bandwidth memori yang lebih tinggi, dan throughput komputasi yang lebih baik. Di-shard di 8 perangkat dan beberapa node pada GB200 (EP=8), kernel menjadi lebih cepat karena akumulasi lokal berjalan pada jauh lebih sedikit token pada setiap perangkat dan, dengan SHARP, biaya reduksi di lebih banyak rank berskala lebih baik. Namun, dalam praktiknya, kami membatasi paralelisme hingga 4 perangkat, karena peningkatan kecepatan ini tidak bersifat universal di semua kernel.
Data Parallel dan Expert Parallel
Kernel data parallel dan expert parallel (DP-EP) digunakan pada decoder data parallel. Kernel ini menyiarkan token yang berbeda dari semua rank ke expert, mentransfer hasilnya ke rank asal dan mengakumulasikannya. Karena mengimplementasikan masalah all-to-all yang jarang (sparse), kernel ini hanya mengandalkan NVLink.
Pada Hopper, kernel ini terbatas pada 8 perangkat dalam domain NVLink dari satu node. Namun, pada sistem GB200, kami dapat menskalakannya di seluruh rak. Sebagian besar kode digunakan kembali. Satu-satunya perbedaan adalah penggunaan handle fabric untuk bertukar informasi peer melalui IMEX untuk penyiapan awal.
Karena ukuran transfer yang terjadi selama decode kecil, transfer tersebut jauh dari menjenuhkan bandwidth NVLink dan malah dibatasi oleh latensi (latency-limited). Latensi berada dalam kisaran puluhan mikrodetik dan tetap relatif stabil saat jumlah peer meningkat, memungkinkan kami menyebarkan penerapan ke sejumlah perangkat yang lebih besar tanpa menimbulkan latensi tambahan yang signifikan.
MoE GEMM
Model MoE mendapat manfaat dari paralelisme expert, karena biaya mengalikan semua token dengan semua expert dapat diparalelkan dengan mudah di beberapa perangkat. Dengan paralelisme tensor pada prefiller, pada masalah padat manfaatnya cukup langsung, karena setiap rank sekarang harus melakukan lebih sedikit komputasi. Dalam kasus decode, paralelisme data memberikan manfaat tambahan di atas paralelisme expert, karena jumlah permintaan paralel yang lebih besar merutekan lebih banyak token ke setiap expert, sehingga memadatkan masalah.
Dalam implementasi kami, saat ini kami mengandalkan kernel CUTLASS CUDA/C++ untuk perkalian matriks. Kami menguji benchmark kernel tersebut pada input decode sparse dengan berbagai skema kuantisasi dan tingkat paralelisme untuk memutuskan strategi sharding yang optimal untuk decoder. Dalam benchmark di bawah ini, semua expert diaktifkan dengan satu token.
Kami menemukan bahwa menskalakan 128 expert di lebih dari 16 rank menghasilkan pengembalian yang semakin berkurang (diminishing returns) dengan CUTLASS, karena biaya mengalikan 2 expert tidak jauh lebih rendah daripada mengalikan 4. Terdapat peningkatan yang jelas pada Blackwell dibandingkan Hopper, bahkan pada strategi penskalaan blok yang kurang optimal. Karena peningkatan latensi sekitar 5 us antara EP=8 dan EP=16 dari dispatch/combine diimbangi oleh penurunan lebih dari 10 us pada biaya GEMM, pada sistem GB200, melakukan sharding decoder di 16 rank adalah hal yang dibenarkan, seperti yang dikonfirmasi oleh benchmark end-to-end juga.
Kuantisasi
Blackwell memperkenalkan dukungan perangkat keras untuk skema kuantisasi 8-bit dan 4-bit baru. Tidak seperti Hopper, yang mengandalkan faktor penskalaan per-tensor atau per-block, Blackwell memerlukan microscaling untuk mencapai throughput prefill dan decode terbaik. Meskipun skema penskalaan blok yang digunakan untuk model seperti DeepSeek atau Kimi tersedia, microscaling lebih efisien.
Kami telah menerapkan Qwen3 235B dengan skema kuantisasi MXFP8, mengonversi bobot secara statis setelah melakukan fine-tuning pada model. Dampak akurasi serupa dengan dampak penskalaan blok dengan kuantisasi stokastik, tetapi performa yang dihasilkan jauh lebih baik, seperti yang digambarkan oleh microbenchmark MoE GEMM. Kami juga telah mempertimbangkan skema kuantisasi MXFP4 dan NVFP4, meskipun dampak akurasi tanpa Quantization-Aware Training terlalu signifikan untuk transisi awal dari Hopper ke Blackwell. Kami berencana untuk menjelajahi format ini secara lebih mendalam dalam pekerjaan mendatang.
Performa End-to-End
Kami menguji benchmark decoder dari penerapan Blackwell Qwen3 235B dan membandingkannya dengan penerapan Hopper kami sebelumnya. Dalam penyiapan ini, kami mempertimbangkan penskalaan blok di kedua penerapan untuk berfokus pada dampak paralelisme. Prefiller TP=4 dipisahkan untuk kedua arsitektur guna mengisolasi performa decode. Angka di bawah ini mengilustrasikan throughput decoding dengan asumsi tingkat penerimaan draf realistis yang dihasilkan oleh layer MTP kami.
Pada Hopper, melakukan sharding penerapan di lebih dari 8 GPU tidak layak, karena latensi di InfiniBand, terutama pada adapter EFA, jauh lebih lambat. Namun, pada Blackwell, kami mencapai throughput yang jauh lebih tinggi, berkat domain NVLink yang lebih besar.
Kami mencapai implementasi awal Blackwell dengan menggeneralisasi kernel Hopper yang ada dan mendorong performa kernel berbasis NVLink. Kami akan terus mengurangi biaya penyajian Qwen dengan meningkatkan kuantisasi dan melakukan fine-tuning pada performa decode dan throughput prefill dari kernel lain di pipeline.
Referensi
Postingan blog Transfer Engine
Postingan blog Speculative Decoding
Kutipan
@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}
}