Hébergement de Qwen sur Blackwell
Comment nous servons Qwen3 235B sur des bahuts NVIDIA GB200 NVL72, réduisant les coûts d'inférence tout en préservant la précision du modèle.
Les bahuts NVIDIA GB200 NVL72 munis de processeurs graphiques NVIDIA Blackwell reliés entre eux par NVLink à 72 voies se prêtent tout particulièrement au déploiement de grands modèles de type mélange d'experts (MoE). Dans cet article de blogue, nous décrivons la configuration d'inférence assurant le service des modèles Qwen3 235B post-entraînés qui prennent en charge une part du trafic de Perplexity. Nous montrons comment nous avons adapté notre moteur d'inférence maison afin de tirer parti des cœurs Tensor de pointe et de l'interconnexion haut débit des processeurs graphiques NVIDIA Blackwell. Grâce à ce matériel, nous traitons davantage de trafic à moindre coût sans sacrifier la précision des modèles sous-jacents.
Déploiement sur GB200 NVL72
Les bahuts GB200 NVL72 se composent de 18 nœuds dotés de 2 processeurs NVIDIA Grace à base d'ARM et de 4 processeurs graphiques à base de Blackwell, chacun étant équipé d'une mémoire HBM de 180 Go. Les 72 processeurs graphiques sont interconnectés via NVLink et 18 circuits intégrés propres à une application (ASIC) de commutation NVLink, ce qui offre une bande passante de 1 800 Go/s entre deux pairs quelconques et met en commun une mémoire suffisante pour héberger des modèles comptant des billions de paramètres. De plus, les adaptateurs InfiniBand ConnectX-7 procurent une bande passante supplémentaire de 400 Gb/s, tant à l'intérieur des nœuds d'un bahut qu'entre les bahuts voisins.
Pour gérer le trafic, nous avons choisi de post-entraîner et de servir les modèles Qwen. Dans cet article de blogue, nous nous concentrons sur Qwen3 235B, mais bon nombre des techniques de service et des caractéristiques de performance abordées s'apparentent à celles des modèles plus récents Qwen3.5 397B et 122B vers lesquels nous effectuons la migration. En matière de parallélisme, l'attention linéaire s'apparente à l'auto-attention complète et l'implémentation actuelle de la couche MoE peut facilement être adaptée pour tenir compte des nouveaux termes de porte. Afin de maintenir un taux de décodage constant tout en maximisant le débit, nous avons choisi de désagréger le préremplissage du décodage, en déployant différentes stratégies de parallélisme pour les deux types de nœuds. La communication entre le préremplisseur et le décodeur est gérée par InfiniBand, tandis que la bande passante NVLink est réservée aux communications au sein des préremplisseurs et des décodeurs. Les caractéristiques de performance des appareils Blackwell lors de l'exécution de la multiplication matricielle et de la communication inter-appareil, explorées dans cet article de blogue, déterminent les stratégies de répartition utilisées. Par rapport aux processeurs graphiques NVIDIA Hopper, nous constatons des améliorations noyau par noyau en raison du plus grand nombre de multiprocesseurs de streaming, d'une bande passante de mémoire accrue et de latences pair à pair réduites.
Notre TransferEngine, qui met en œuvre un préremplissage désagrégé, prend en charge une répartition arbitraire et potentiellement non concordante entre les préremplisseurs et les décodeurs. Les caches KV sont disposés en mémoire dans l'ordre HND, avec les têtes dans la dimension principale et les jetons maintenus contigus, afin de permettre à un cache KV réparti sur un préremplisseur d'être subdivisé ou concaténé à la volée pendant le transfert vers le nœud décodeur.
Préremplisseurs
Les nœuds de préremplissage reçoivent les jetons d'entrée d'une requête, peuplent les caches KV et les transfèrent aux décodeurs pour poursuivre la génération de texte. Le préremplissage exige de grandes ressources informatiques, car des milliers de jetons appartenant à une séquence sont traités en même temps.
Par conséquent, nous avons constaté qu'un déploiement parallèle de tenseurs convient, le modèle étant réparti sur 4 processeurs graphiques au sein d'un même nœud GB200, et les projections et les experts étant répartis (TP=4, EP=4). Étant donné que l'attention et les perceptrons multicouches (MLP) sont tous deux limités par la puissance de calcul, ils bénéficient l'un et l'autre du parallélisme, qui répartit les experts et les têtes d'attention entre des rangs distincts. Un parallélisme accru aurait produit des rendements décroissants, car l'amélioration du débit découlant de l'hébergement d'un plus petit nombre d'experts sur chaque rang (16 par rapport à 32) n'aurait pas compensé le coût supplémentaire d'une réduction globale octuple (8-way all-reduce) et le surdébit lié à la division du code côté hôte entre deux nœuds, ce qui nécessite une communication par Ethernet.
Qwen3 235B n’a que 4 têtes clé-valeur, ce qui exige que les projections k et v soient répliquées sur des paires de rangs si 8 appareils sont utilisés. Nous aurions pu envisager une répartition plus agressive pour réduire la quantité de mémoire requise pour stocker les poids sur chaque rang, libérant ainsi de l’espace pour davantage de jetons dans le cache KV. Cependant, nous avons constaté qu’un déploiement plus large n’en valait pas la peine.
En supposant une longueur d'entrée d'environ 6 000 jetons, chacun des 128 experts se voit acheminer environ 6000 * 8 / 128 = 375 jetons, ce qui garantit un problème dense pour la multiplication de matrices générales (GEMM) MoE. Comme cela sature déjà le débit de calcul de l'appareil, le parallélisme des données n'est pas nécessaire pour le préremplissage.
Malgré l'augmentation quadratique du coût de l'attention, les préremplisseurs offrent un débit constant, ce qui permet d'estimer grossièrement le nombre de jetons d'entrée pouvant être traités par un nœud en une seconde. En s'appuyant sur les mesures de suivi du nombre total de jetons d'entrée provenant des requêtes, le nombre de nœuds de préremplissage peut être revu à la hausse pour s'assurer que le débit global de préremplissage est dimensionné en conséquence. Afin d'éviter la mise en file d'attente, le nombre de réplicas de préremplisseurs correspond au nombre total de jetons d'entrée reçus.
Décodeurs
Les nœuds décodeurs reçoivent les caches KV des préremplisseurs et génèrent les jetons un par un. Le décodage est généralement limité par la mémoire : avec peu de jetons d'entrée, la multiplication matricielle est entièrement limitée par le coût du chargement des pondérations de la mémoire HBM dans les cœurs Tensor. Outre l'utilisation d'une stratégie de répartition différente, plusieurs noyaux doivent être modifiés pour mieux paralléliser les calculs et les accès à la mémoire.
Contrairement au préremplissage, la répartition de l’attention n’est plus avantageuse : répartir les têtes d’attention sur plusieurs appareils signifierait qu’il y a moins d’occasions de parallélisme au sein d’un seul appareil. Par conséquent, seul le parallélisme des données et le parallélisme des experts sont utilisés : les experts sont répartis sur plusieurs appareils, mais chaque appareil gère ses propres caches KV et ses propres requêtes. Sans parallélisme tensoriel, la taille du cache KV par jeton sur un appareil est plus grande. Cependant, de l’espace est libéré en mémoire en plaçant moins d’experts sur un seul nœud. Contrairement à Hopper, où nous avons limité le parallélisme tensoriel à l’intérieur d’un seul domaine NVLink dans un nœud à 8 GPU, sur Blackwell, nous avons constaté qu’un déploiement sur plusieurs nœuds au sein d’un domaine, en utilisant jusqu’à 16 appareils, est avantageux.
Afin de maximiser le débit, les décodeurs traitent un plus grand nombre de requêtes simultanément. Même si les requêtes supplémentaires entraînent un surdébit minime dans les couches MoE et d'autres projections, elles augmentent de façon disproportionnée le coût de l'attention. Pour maintenir une vitesse de décodage minimale raisonnable, le nombre de nœuds décodeurs est mis à l'échelle de manière à maintenir la taille des lots par décodeur sous un certain seuil.
À l'instar des déploiements Hopper précédents, nous utilisons le décodage spéculatif avec des couches MTP formées en interne pour accroître les taux de décodage. Heureusement, le matériel sous-jacent et les frameworks de programmation sont suffisamment similaires pour permettre le partage complet de l'implémentation entre les deux architectures.
Communication intra-nœud et inter-nœud
La principale différence entre GB200 NVL72 et les nœuds Hopper précédents réside dans le grand domaine NVLink, qui permet une communication pair à pair au-delà de la limite précédente de 8 appareils. Même si les appareils Blackwell ont été déployés dans des nœuds à 8 processeurs graphiques, il est très utile de mettre à l'échelle sur plusieurs nœuds via NVLink par rapport au réseau InfiniBand, qui est plus lent.
Sur les nœuds de préremplissage, nous comptons sur la communication de réduction globale (all-reduce) au sein des couches d'attention et sur une réduction parallèle d'experts qui ressemble beaucoup à une réduction globale. Sur 4 processeurs graphiques, nous tirons parti à la fois de NVLink et de NVIDIA SHARP (Scalable Hierarchical Aggregation and Reduction Protocol) : en plus de la bande passante pair à pair, nous exploitons également les réductions dans les commutateurs NVLink pour réduire encore davantage les latences et mettre en œuvre des diffusions rapides. Sur les nœuds décodeurs, une implémentation personnalisée d'envoi et de combinaison de tous à tous (all-to-all) sur NVLink est utilisée. Les noyaux ont été mis en œuvre à l'interne à l'aide de CuTeDSL et de mappages cuMem ou de mappages de multidiffusion.
Réduction globale (All-Reduce)
Les préremplisseurs effectuent une opération de réduction globale dans la projection de sortie de la couche d'attention, en additionnant les contributions des têtes réparties entre les rangs participants. Le parallélisme des tenseurs n'est efficace que lorsque le coût du surdébit de réduction globale est compensé par la réduction de la latence des problèmes de multiplication matricielle de plus petite taille. Cette hypothèse s'avère généralement vraie pour le préremplissage.
Sur les systèmes NVIDIA HGX H200 et GB200 NVL72 de catégorie centre de données, les processeurs graphiques sont habituellement reliés par l'intermédiaire de commutateurs NVLink. Outre le routage, les commutateurs peuvent effectuer des opérations de réduction sur les appareils connectés par l'intermédiaire de SHARP. Après avoir créé des mappages de mémoire et les avoir enregistrés dans un groupe de multidiffusion à l'aide des interfaces de programmation d'applications (API) CUDA, les noyaux peuvent utiliser multicast.ld_reduce et multicast.st pour agréger et diffuser des valeurs par l'intermédiaire des commutateurs. Afin de créer une base et des composants réutilisables qui peuvent être fusionnés dans d'autres noyaux, nous maintenons à l'interne un noyau de réduction globale CuTeDSL utilisant ces primitives.
Dans un système doté de N processeurs graphiques réduisant B octets, une implémentation rudimentaire amènerait un pair à charger des valeurs provenant de tous les autres pairs, pour un total de N * (N - 1) * B octets de trafic de lecture. Une implémentation plus efficace diviserait les données à réduire entre les pairs, chacun réduisant une tranche de l'entrée, puis les diffusant au reste. Il en résulte (N - 1) * (B / N) octets lus dans un pair et diffusés au reste, pour un total de (N - 1) * B * 2 lectures et écritures, ce qui réduit le trafic sur les commutateurs.
Grâce à SHARP, la réduction et la diffusion peuvent être exécutées plus efficacement : au lieu de lire (N - 1) * (B / N) octets dans un appareil pour l'accumulation locale, seuls B / N octets sont déplacés à partir du commutateur, car ce dernier effectue la réduction lui-même à l'aide des données provenant des pairs. Pour la diffusion, on observe une amélioration similaire, car le nombre de transactions entre un processeur graphique et le commutateur sur les canaux NVLink est considérablement réduit. Sans SHARP, l'appareil d'accumulation effectuerait (N - 1) * (B / N) transactions sur NVLink avec le commutateur, ce dernier lisant la même quantité de données auprès des pairs, pour un total de 2 * (N - 1) * (B / N) transactions. Avec SHARP, B / N transactions sont effectuées entre le processeur graphique et le commutateur, et (N - 1) * (B / N) transactions supplémentaires sont effectuées avec les pairs, pour un total de B transactions.
En raison de sa simplicité, SHARP constitue un outil précieux, car il offre une implémentation matérielle simple pour un algorithme. Même si les transferts sont réduits d'une fraction théorique N / (2 * (N - 1)) (ce qui équivaut à 33 % avec 4 pairs), nous observons en pratique une amélioration de 10 % des latences de préremplissage et de décodage sur les systèmes H200 et GB200 NVL72.
Envoi et combinaison MoE (MoE Dispatch - Combine)
Pour les modèles MoE, les noyaux d'envoi et de combinaison déplacent et regroupent les jetons pour les problèmes de multiplication de matrices générales (GEMM) MoE subséquents entre pairs, puis effectuent une accumulation pondérée dans la combinaison. Nous avons adapté nos noyaux d'envoi et de combinaison existants à Blackwell en les portant sur CuTeDSL, en ajustant les allocations de blocs et en les spécialisant de manière agressive entre le préremplissage et le décodage.
Parallèle des experts
Le noyau parallèle des experts (EP) est utilisé dans les préremplisseurs. Étant donné que ses entrées sont répliquées sur tous les rangs, le noyau d'envoi doit simplement sélectionner les jetons acheminés vers les experts sur le rang actuel. Il agrège l'information de routage et prépare les jetons dans des tampons utilisés comme entrées pour la multiplication de matrices générales (GEMM) MoE. Le noyau de combinaison effectue d'abord une accumulation locale entre les contributions des jetons acheminés vers les experts sur le rang actuel, puis il effectue une réduction globale sur tous les rangs.
Pour le décodage, l'ensemble du noyau est fusionné en un seul. Le noyau de préremplissage est divisé en plusieurs noyaux, car le routage et la réduction globale nécessitent moins de blocs que l'étape de combinaison locale. Grâce à CuTeDSL, nous avons pu bâtir une bibliothèque générique pour la réduction globale SHARP et NVLink ainsi que pour la synchronisation pair à pair, en l'intégrant à la fois dans les noyaux de réduction globale et dans les noyaux parallèles des experts.
Sur le plan des performances, nous constatons que Blackwell est nettement plus rapide que Hopper, en raison de vitesses de transfert améliorées, d'une bande passante de mémoire accrue et d'un meilleur débit de calcul. Répartis sur 8 appareils et de multiples nœuds sur les architectures GB200 (EP=8), les noyaux deviennent plus rapides puisque l'accumulation locale s'exécute sur un nombre beaucoup plus restreint de jetons sur chaque appareil et que, grâce à SHARP, le coût de la réduction sur un plus grand nombre de rangs s'échelonne mieux. Toutefois, en pratique, nous limitons le parallélisme à 4 appareils, car ces accélérations ne sont pas universelles pour tous les noyaux.
Parallèle de données et parallèle des experts
Le noyau parallèle de données et parallèle des experts (DP-EP) est utilisé dans les décodeurs parallèles de données. Il diffuse différents jetons provenant de tous les rangs vers les experts, transfère les résultats vers les rangs d'origine et les accumule. Comme il met en œuvre un problème clairsemé de type tous à tous (sparse all-to-all), il s'appuie exclusivement sur NVLink.
Sur Hopper, ce noyau est limité à 8 appareils au sein du domaine NVLink d'un seul nœud. Cependant, sur les systèmes GB200, nous pouvons le mettre à l'échelle à l'échelle d'un bahut entier. La majeure partie du code est réutilisée. La seule différence réside dans l'utilisation de poignées fabric pour échanger des informations sur les pairs par l'intermédiaire d'IMEX lors de la configuration initiale.
Étant donné que les tailles de transfert générées lors du décodage sont petites, elles sont loin de saturer la bande passante NVLink et sont plutôt limitées par la latence. Les latences se situent dans l'ordre de la dizaine de microsecondes et demeurent relativement stables à mesure que le nombre de pairs augmente, ce qui nous permet de répartir un déploiement sur un plus grand nombre d'appareils sans encourir de latence supplémentaire significative.
Multiplication de matrices générales (GEMM) MoE
Les modèles MoE bénéficient du parallélisme des experts, car le coût de la multiplication de tous les jetons avec tous les experts peut facilement être parallélisé sur plusieurs appareils. Avec le parallélisme des tenseurs sur les préremplisseurs, l'avantage est tout à fait direct sur les problèmes denses, car chaque rang doit désormais effectuer moins de calculs. Dans le cas du décodage, le parallélisme des données procure un avantage supplémentaire en plus du parallélisme des experts, car le plus grand nombre de requêtes parallèles achemine un plus grand nombre de jetons vers chaque expert, ce qui densifie les problèmes.
Dans notre implémentation, nous nous appuyons actuellement sur des noyaux CUTLASS CUDA/C++ pour la multiplication matricielle. Nous les avons évalués au moyen de repères (benchmarks) sur des entrées de décodage clairsemées avec divers schémas de quantification et niveaux de parallélisme afin de déterminer la stratégie de répartition optimale pour les décodeurs. Dans les repères ci-dessous, tous les experts sont activés avec un seul jeton.
Nous avons constaté que la mise à l'échelle de 128 experts sur plus de 16 rangs produit des rendements décroissants avec CUTLASS, car le coût de la multiplication de 2 experts n'est pas sensiblement inférieur à celui de la multiplication de 4. On observe une nette amélioration sur Blackwell par rapport à Hopper, même sur la stratégie de mise à l'échelle par blocs sous-optimale. Puisque l'augmentation de la latence d'environ 5 µs entre EP=8 et EP=16 de l'envoi/combinaison est compensée par une diminution de plus de 10 µs du coût de la multiplication de matrices générales (GEMM), sur les systèmes GB200, la répartition des décodeurs sur 16 rangs se justifie, comme le confirment également les repères de bout en bout.
Quantification
Blackwell introduit la prise en charge matérielle de nouveaux schémas de quantification à 8 bits et 4 bits. Contrairement à Hopper, qui s'appuyait sur des facteurs de mise à l'échelle par tenseur ou par bloc, Blackwell requiert une mise à l'échelle microscopique pour atteindre un débit de préremplissage et de décodage optimal. Bien que le schéma de mise à l'échelle par blocs utilisé pour des modèles tels que DeepSeek ou Kimi soit disponible, la mise à l'échelle microscopique s'avère plus efficace.
Nous avons déployé Qwen3 235B avec le schéma de quantification MXFP8, en convertissant les pondérations de manière statique après le réglage fin du modèle. L'impact sur la précision était comparable à celui de la mise à l'échelle par blocs avec quantification stochastique, mais les performances obtenues ont été grandement améliorées, comme l'illustrent les micro-repères de multiplication de matrices générales (GEMM) MoE. Nous avons également examiné les schémas de quantification MXFP4 et NVFP4, bien que l'impact sur la précision sans formation consciente de la quantification (Quantization-Aware Training) ait été trop important pour la transition initiale de Hopper vers Blackwell. Nous prévoyons d'explorer ces formats de manière plus approfondie dans le cadre de travaux futurs.
Performance de bout en bout
Nous avons évalué les décodeurs des déploiements Blackwell Qwen3 235B et les avons comparés à nos déploiements Hopper précédents. Dans cette configuration, nous avons examiné la mise à l'échelle par blocs dans les deux déploiements afin de cibler l'impact du parallélisme. Les préremplisseurs TP=4 ont été séparés pour les deux architectures afin d'isoler la performance de décodage. L'illustration ci-dessous montre le débit de décodage en supposant un taux d'acceptation de brouillon réaliste fourni par nos couches MTP.
Sur Hopper, la répartition du déploiement sur plus de 8 processeurs graphiques n'est pas viable, car les latences sur InfiniBand, en particulier sur les adaptateurs EFA, sont nettement plus lentes. Cependant, sur Blackwell, nous atteignons des débits considérablement plus élevés, grâce aux domaines NVLink plus vastes.
Nous avons réalisé une implémentation initiale de Blackwell en généralisant les noyaux Hopper existants et en poussant les performances des noyaux fondés sur NVLink. Nous continuerons à réduire le coût du service de Qwen en améliorant la quantification et en effectuant le réglage fin de la performance de décodage et du débit de préremplissage des autres noyaux du pipeline.
Références
Article de blogue sur le moteur de transfert (Transfer Engine)
Article de blogue sur le préremplissage désagrégé (Prefill-Disagg)
Article de blogue sur le décodage spéculatif
Citation
@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}
}