Warum mehr Entwurfstokens nicht schneller sein müssen
Verfolge MTP-Akzeptanz und den getrennten Kommunikationspfad zwischen GPUs.
KI-gestützte Lernvisualisierung · schematische Erklärung zum Artikel
MTP schlägt zukünftige Tokens vor. Das Zielmodell prüft sie; wird ein früher Vorschlag abgelehnt, können spätere Entwurfspositionen nicht übernommen werden.
Multi-Token-Prediction (MTP) hängt von Akzeptanzraten und Kosten ab. Dieser Artikel nutzt ein GLM-5.3-Setup auf acht B300-GPUs (Blackwell Ultra, sm_103)1 als Konfigurationsbeispiel. Die Raten in der Tabelle sind illustrative Eingaben, keine Messwerte. Außerdem beschreibt er das dokumentierte NVLink-SHARP-(NVLS-)Verhalten verschiedener NCCL-Versionen.
Das Setup
Der MTP-Head von GLM liegt im Checkpoint – eine zusätzliche Prädiktions-
Schicht, kein separater Draft-Modell-Download. Die veröffentlichte Konfiguration
von GLM-5.3 deklariert ein Sparse-Attention-MoE (GlmMoeDsaForCausalLM),
ein Kontextlimit von 1.048.576 Tokens und eine MTP-Prädiktionsschicht2. vLLM
(speculative_config={"method": "mtp", "num_speculative_tokens": k})3
und SGLang (--speculative-algorithm NEXTN)4 können ihn nutzen.
Das vLLM-Rezept für GLM-5.3 zeigt ein FP8-Setup mit acht GPUs, TP=8,
MTP k=5 und --kv-cache-dtype fp8_e4m3. Eine separate NVFP4-Variante
quantisiert die gerouteten Experten; Attention, Shared Experts und Dense-
Layer bleiben BF165. Das sind dokumentierte Konfigurationen, keine
Benchmark-Ergebnisse aus diesem Repository.
Akzeptanzmathematik: Tokens pro Schritt, nicht Durchsatz
Akzeptanzwahrscheinlichkeiten bestimmen die erwartete Tokenzahl pro Verifikationsschritt; Draft- und Verifikationskosten bestimmen zusätzlich den Durchsatz. Wenn die Akzeptanzwahrscheinlichkeit an Position unter der Bedingung ist, dass alle vorigen Positionen akzeptiert wurden, ist die Wahrscheinlichkeit, bis Position zu akzeptieren. Das Verfahren wurde von Leviathan, Kalman und Matias beschrieben; der Verifikator bewahrt die Zielverteilung6:
vLLM kann in log_stats die Mean acceptance length, akzeptierte und
gedraftete Tokens sowie die Per-position acceptance rate ausgeben7. Die
folgenden gemeinsamen Wahrscheinlichkeiten sind hypothetisch.
Sie zeigen nur die Rechnung und belegen keine GLM-5.3-Leistung:
| k | gemeinsame Beispielwahrscheinlichkeiten | E[akzeptiert] | Tokens/Schritt | Anteil von k=5 |
|---|---|---|---|---|
| 1 | 0,72 | 0,72 | 1,72 | 48 % |
| 2 | 0,72, 0,58 | 1,30 | 2,30 | 64 % |
| 3 | 0,72, 0,58, 0,48 | 1,78 | 2,78 | 77 % |
| 4 | 0,72, 0,58, 0,48, 0,44 | 2,22 | 3,22 | 89 % |
| 5 | 0,72, 0,58, 0,48, 0,44, 0,40 | 2,62 | 3,62 | 100 % |
In diesem Beispiel liefert k=2 rund 64 % der Tokens pro Schritt von k=5,
k=3 rund 77 %. Diese Anteile sind keine gemessenen Speedups. Sie hängen
von den tatsächlichen Akzeptanzraten des Workloads ab. Öffentliche Messungen
zeigen Unterschiede zwischen Datensätzen und Positionen bei GLM-MTP-Modellen;
das vLLM-Rezept für das kleinere GLM-4.5 empfiehlt auf jenem Modell
weiterhin num_speculative_tokens 1 für optimalen Durchsatz8,
das GLM-5.3-Rezept führt k=5 als Konfigurationsbeispiel5.
Tiefere Spekulation liefert zusätzliche Tokens, während jede Draft-Position Kosten verursacht:
- Verlorene Verify-Arbeit: ein abgelehnter Draft belegte trotzdem einen Verify-Slot.
- Verworfene spätere Drafts: Wird eine Position abgelehnt, können spätere Positionen desselben Drafts nicht akzeptiert werden. Ihre Generierung und Verifikation kann Arbeit kosten, ohne Ausgabetokens hinzuzufügen.
- KV-Cache-Druck:
num_speculative_tokensreserviert KV-Einträge pro Anfrage für Draft-Positionen; die vLLM-Doku empfiehlt, klein zu starten3.
Die Tiefe ist eine per-Workload-Entscheidung, getrieben von gemessenen
Akzeptanzraten - öffentliche Benchmarks finden, dass Akzeptanz über
Datensätze, Anfragen und Positionen hinweg stark variiert8.
Erst messen, dann k setzen – die oben genannten log_stats-Werte dienen dazu.
NVLS-Fehlerverhalten hängt von der NCCL-Version ab
NVLS-Initialisierungsfehler hatten nicht in jeder NCCL-Version dieselbe Folge: Manche Versionen weichen auf ein anderes Kollektiv aus, andere geben einen Fehler zurück. Das Verhalten muss für die installierte Version geprüft werden.
Der Mechanismus, aus der Dokumentation:
- NVLS ist NVLink SHARP: In-Network-Reduction, ausgelagert in die NVSwitch-Domäne; NCCL unterstützt es seit 2.17 auf NVSwitch der dritten Generation mit Hopper oder neuer9.
- Fallback in NCCL 2.27.3:
NCCL_NVLS_ENABLEsteht standardmäßig auf 2 (automatische Erkennung). Diese Version führte einen Fallback bei fehlgeschlagener NVLS-Initialisierung ein; mitNCCL_NVLS_ENABLE=1blieb ein Fehler die Folge10. - Dokumentierter harter Fehler in NCCL 2.29.7: Issue #2077 beschreibt
erschöpfte Multicast-Slots auf einem Acht-H200-System. Der Melder beobachtete
einen fatalen
ncclUnhandledCudaErrormit NVLS und einen erfolgreichen Lauf mitNCCL_NVLS_ENABLE=0. Der Bericht nennt eine Hardwaregrenze von 128 Slots; daraus folgt kein allgemeines Verhalten für alle NVLS-Fehler oder NCCL-Versionen11. - Der Stack unter NCCL ist version-gebunden: Der Fabric Manager prüft
beim Start den geladenen Kernel-Driver-Stack und bricht bei Fehlanpassung
ab; HGX-B200/B300-Knoten (NVSwitch der vierten Generation) benötigen
zusätzlich den NVLSM-Service aus den driver-branch-gematchten
nvidia-open- undnvlink5-Paketen12. Der Fabric-Stack bewegt sich als Set - so will es NVIDIAs eigene Paketierung.
Die Arbeitsregeln, die aus der Dokumentation folgen:
- Driver + Fabric-Manager + NCCL als Set pinnen - FM ist per Design an die Driver-Version gebunden12.
- Mit einem Mini-All-Reduce-Benchmark pruefen, bevor man dem Serving-Stack die Schuld gibt.
- NCCL-INFO-Logs einschließlich der passenden Debug-Subsysteme für Kollektive und NVLS zur Prüfung der Algorithmuswahl nutzen, soweit verfügbar13; den Pfad mit einem gemessenen Probelauf bestätigen.
Die übertragbare Regel: Schnellen Pfad und Fehlerverhalten mit der installierten NCCL-Version prüfen.
Anmerkungen zur Ausgabequalität
Exaktes Speculative Decoding mit passendem Verifikator und Rejection Sampling erhält die Ausgabeverteilung des Zielmodells6. Es garantiert bei stochastischem Sampling nicht dieselbe Tokenfolge wie ein separater Durchlauf des Zielmodells. Bei einer Serving-Implementierung müssen die Voraussetzungen für dieses Exaktheitsresultat geprüft werden.
Footnotes
-
NVIDIA CUDA-GPU-Compute-Capability-Tabelle - B300 (Blackwell Ultra) ist Compute Capability 10.3 (sm_103); SM120 ist die separate Consumer-/Workstation-Blackwell-Familie (RTX-50-Serie, 12.0): https://developer.nvidia.com/cuda/gpus ↩
-
Z-AI, GLM-5.3-Model-Card und veröffentlichte
config.json:GlmMoeDsaForCausalLM,max_position_embeddings=1048576,num_nextn_predict_layers=1. https://huggingface.co/zai-org/GLM-5.3 ; https://huggingface.co/zai-org/GLM-5.3/blob/main/config.json ↩ -
vLLM-MTP-Dokumentation (speculative_config, num_speculative_tokens): https://docs.vllm.ai/en/latest/features/speculative_decoding/mtp/ ↩ ↩2
-
SGLang-Spekulationsparameter-Referenz - --speculative-algorithm NEXTN (ein Alias von EAGLE): https://docs.sglang.io/docs/advanced_features/speculative_decoding ↩
-
vLLM Recipes, zai-org/GLM-5.3 - Flaggschiff-FP8-B200-Rezept: TP=8, MTP k=5, fp8_e4m3-KV; NVFP4-Blackwell-Variante (nur Experten NVFP4): https://recipes.vllm.ai/zai-org/GLM-5.3 ↩ ↩2
-
Yaniv Leviathan, Matan Kalman, Yossi Matias, "Fast Inference from Transformers via Speculative Decoding" (arXiv:2211.17192, ICML 2023) - Speculative-Decoding-Framework; Verifikation lässt die Ausgabeverteilung unverändert: https://arxiv.org/abs/2211.17192 ↩ ↩2
-
vLLM-Implementierung der Speculative-Decoding-Metriken: Der Zähler pro Position geteilt durch die Draft-Zahl ist eine unbedingte Akzeptanzrate für die gesamte Präfixkette; die mittlere Akzeptanzlänge enthält das zusätzliche Token: https://github.com/vllm-project/vllm/blob/main/vllm/v1/spec_decode/metrics.py ↩
-
Xiaoxuan Liu, Jiaxiang Yu, Jongseok Park, Ion Stoica, Alvin Cheung, "Speculative Decoding: Performance or Illusion?" (arXiv:2601.11580) - MTP auf GLM-4.5-Air-106B: k=3-Speedup 1,3-1,8x auf H100; Akzeptanz variiert stark über Positionen, Anfragen und Datensätze; vLLM-Rezept für zai-org/GLM-4.5 - num_speculative_tokens 1 für optimalen Durchsatz auf GLM-4.5: https://specdecode-bench.github.io/ https://recipes.vllm.ai/zai-org/GLM-4.5 ↩ ↩2
-
NVIDIA-NCCL-User-Guide - NCCL_NVLS_ENABLE (Default 2, Auto-Detection): https://docs.nvidia.com/deeplearning/nccl/archives/nccl_2283/user-guide/docs/env.html ↩
-
NCCL-2.27.3-Release-Notes - graziler NVLS-Fallback: https://docs.nvidia.com/deeplearning/nccl/release-notes/rel_2-27-3.html ↩
-
NCCL-Issue #2077 (NVIDIA/nccl-Tracker) – Reproduktion des Melders mit H200/NCCL 2.29.7: 128 NVSwitch-Multicast-Slots erschöpft, fataler Fehler;
NCCL_NVLS_ENABLE=0umging diesen Fall: https://github.com/NVIDIA/nccl/issues/2077 ↩ -
NVIDIA Fabric Manager User Guide - FM prüft beim Start den geladenen Kernel-Driver-Stack und bricht bei Inkompatibilität ab; HGX B200/B300 (NVSwitch der vierten Generation) benötigt den NVLSM-Service aus nvidia-open/nvlink5-Paketen: https://docs.nvidia.com/datacenter/tesla/fabric-manager-user-guide/index.html ↩ ↩2
-
NVIDIA-NCCL-Logging-Dokumentation einschließlich der Subsysteme für Kollektive und NVLS: https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/troubleshooting/logging.html ↩