Dans un article publié le 27 octobre 2026, NVIDIA rapporte que les trois optimisations testées ont fait passer le débit de décodage de Ling-3.0-flash-fp4 sur NVIDIA DGX Spark de 37,81 à 53,89 jetons par seconde sur GSM8K, soit une hausse de 42,5 % pour 1 319 questions traitées avec une taille de lot de 1.
Cette mesure porte sur une évaluation avec un prompt à cinq exemples, une température de 0,6, un top-p de 0,95, un top-k de 29 et le raisonnement en chaîne activé. La limite de génération était fixée à 32 768 jetons. NVIDIA rapporte aussi une baisse du temps moyen par requête, de 15,21 à 11,49 secondes. Le temps moyen avant le premier jeton est passé de 0,207 à 0,214 seconde.
Trois optimisations ciblent le décodage
NVIDIA a combiné des noyaux MoE Humming en MXFP4, la quantification FP8 en ligne de la tête de sortie du modèle et la prédiction spéculative multi-jetons (MTP) avec NEXTN. Le modèle de référence utilisait la configuration W4A8, les noyaux MoE MXFP4 de FlashInfer, NVIDIA CUTLASS pour les opérations denses et l’option --enable-fp32-lm-head.
Humming remplace le backend MoE de FlashInfer par des noyaux spécialisés. NVIDIA indique qu’ils sont compilés à la volée avec NVRTC, le compilateur d’exécution CUDA, puis mis en cache dans ~/.humming/cache.
La quantification FP8 s’applique en ligne à la tête de sortie, dont les poids du modèle sont en BF16. Selon NVIDIA, le passage au FP8 réduit de moitié le volume de lecture des poids de cette couche par rapport au BF16. Le réglage indiqué est SGLANG_ENABLE_FP8_LM_HEAD=1, incompatible avec l’option de référence --enable-fp32-lm-head.
Avec MTP, la couche NEXTN propose plusieurs jetons provisoires que le modèle vérifie ensuite. La configuration mesurée par NVIDIA utilise trois étapes de brouillon et une fenêtre de vérification de quatre jetons.
Les deux débits ne décrivent pas la même charge
Le gain de 185,1 % concerne un test synthétique distinct, avec une taille de lot de 1, une entrée fixe de 32 000 jetons et une sortie de 2 000 jetons. NVIDIA y rapporte 36,09 jetons par seconde au départ et 102,88 avec les trois optimisations. Pour GSM8K, le gain rapporté est de 42,5 %. Ces résultats correspondent à des protocoles différents.
| Évaluation et conditions | Débit de référence | Avec les trois optimisations | Variation rapportée par NVIDIA | Jetons acceptés par tour MTP |
| GSM8K, 1 319 questions, taille de lot de 1, prompt à cinq exemples | 37,81 jetons/s | 53,89 jetons/s | +42,5 % | 2,68 |
| Test synthétique, taille de lot de 1, entrée de 32 000 jetons, sortie de 2 000 jetons, décodage glouton | 36,09 jetons/s | 102,88 jetons/s | +185,1 % | 3,90 |
NVIDIA précise que le test synthétique, avec ses sorties répétitives et son décodage glouton, surestime les bénéfices de la génération spéculative par rapport à d’autres charges. La longueur moyenne d’acceptation de MTP était de 3,90 jetons par tour dans ce test, contre 2,68 sur GSM8K.
Le débit de décodage mesure la génération des jetons après le traitement du prompt. Dans une vidéo en espagnol, Codigo gris explique que le traitement du prompt peut être limité par la puissance de calcul, tandis que la génération peut être limitée par la bande passante mémoire, car les poids du modèle doivent être relus. NVIDIA a également décrit le décodage de Ling-3.0-flash comme limité par les lectures de poids.
Le partage du LM head conditionne l’association FP8 et MTP
Pour combiner la quantification FP8 et MTP, NVIDIA indique que le modèle de brouillon doit partager le module complet de la tête de sortie avec le modèle cible. Partager seulement les poids peut conduire le brouillon à interpréter les poids FP8 comme du BF16. Dans ce cas, NVIDIA rapporte une longueur d’acceptation qui tombe à 1,00 jeton par tour et un débit inférieur à la configuration de référence.