Zum Inhalt springen
Kurzer Hinweis: flozi00 TechHub ist ein Solo-Nebenprojekt neben einem Vollzeitjob — persönliche Lernnotizen, keine offiziellen Aussagen. Kritische Schritte selbst prüfen.

GLM-5.3-MTP auf B300: Akzeptanzmathematik und NCCL NVLS

Ein Rechenbeispiel für MTP-Akzeptanzraten beim GLM-5.3-Serving und dokumentierte Änderungen im NVLS-Fehlerverhalten verschiedener NCCL-Versionen.

5 Min. Lesezeitflozi00
llm-inferenzspeculative-decodingmtpb300nccl
Direkt zum Fachartikel
Sehen · ausprobieren · verstehen

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

Schritt 1 / 4Vorschlagen und prüfen

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.

SystemAktueller SchrittBaustein anklicken, um ihn zu erklären
MTP-Entwurf
Mehrere mögliche nächste Tokens vorschlagen.
Prüfung durch Zielmodell
Nur den akzeptierten Anfang des Entwurfs behalten.
Nutzbare Ausgabe
Erwartete Tokens hängen von der Akzeptanz jeder Position ab.
  1. MTP-Entwurf Prüfung durch Zielmodell
    Vorschläge
  2. Prüfung durch Zielmodell Nutzbare Ausgabe
    akzeptierter Anfang
Das solltest du mitnehmen

Tokens pro Prüfschritt und Tokens pro Sekunde beantworten unterschiedliche Fragen.

Die Akzeptanztabelle nutzt Beispielwerte. Das NVLS-Fehlerverhalten hängt von der Version ab; ein Fallback ist nicht immer garantiert.

Begriffe und vollständiger Ablauf
MTP
Multi-Token Prediction: mehrere zukünftige Tokens vorschlagen.
Bedingte Akzeptanz
Akzeptanz unter der Voraussetzung, dass alle früheren Vorschläge akzeptiert wurden.
NVLS
Ein NCCL-Kommunikationspfad mit NVLink-SHARP-Reduktionen.
  1. Vorschlagen und prüfen

    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.

  2. Bedingte Akzeptanz zählen

    Ein späteres Entwurfstoken wird nur erreicht, wenn alle vorherigen akzeptiert wurden. Mehr Vorschläge liefern deshalb nicht ebenso viele zusätzliche Ausgabetokens.

  3. GPU-Verbindung einbeziehen

    NCCL koordiniert GPU-Kommunikation; NVLS ist ein möglicher Reduktionspfad. Prüfe installierte Version und einen kleinen Kommunikationstest, bevor du diesen Pfad voraussetzt.

  4. Verstrichene Zeit optimieren

    Teile die nutzbare Ausgabe durch die gemessene Dauer des gesamten Schritts. Ein längerer Entwurf hilft nur, wenn die zusätzlichen akzeptierten Tokens den Mehraufwand rechtfertigen.

Alle Verbindungen

  • MTP-Entwurf → Prüfung durch Zielmodell: Vorschläge
  • Prüfung durch Zielmodell → Nutzbare Ausgabe: akzeptierter Anfang
  • MTP-Entwurf → Gesamten Schritt messen: Entwurfskosten
  • NCCL und NVLS → Gesamten Schritt messen: Kommunikationskosten
  • Prüfung durch Zielmodell → Gesamten Schritt messen: Prüfkosten
  • Nutzbare Ausgabe → Entwurfslänge wählen: nutzbare Arbeit
  • Gesamten Schritt messen → Entwurfslänge wählen: verstrichene Zeit
Du bestimmst das Tempo. Pausiere jederzeit oder wähle einen Schritt aus.

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 aja_j die Akzeptanzwahrscheinlichkeit an Position jj unter der Bedingung ist, dass alle vorigen Positionen akzeptiert wurden, ist pi=∏j=1iajp_i=\prod_{j=1}^{i}a_j die Wahrscheinlichkeit, bis Position ii zu akzeptieren. Das Verfahren wurde von Leviathan, Kalman und Matias beschrieben; der Verifikator bewahrt die Zielverteilung6:

E[Tokens pro Schritt]=1+∑i=1k∏j=1iaj  =  1+∑i=1kpi\mathbb{E}[\text{Tokens pro Schritt}] = 1 + \sum_{i=1}^{k} \prod_{j=1}^{i} a_j \;=\;1+\sum_{i=1}^{k}p_i

vLLM kann in log_stats die Mean acceptance length, akzeptierte und gedraftete Tokens sowie die Per-position acceptance rate ausgeben7. Die folgenden gemeinsamen Wahrscheinlichkeiten pip_i sind hypothetisch. Sie zeigen nur die Rechnung und belegen keine GLM-5.3-Leistung:

kgemeinsame BeispielwahrscheinlichkeitenE[akzeptiert]Tokens/SchrittAnteil von k=5
10,720,721,7248 %
20,72, 0,581,302,3064 %
30,72, 0,58, 0,481,782,7877 %
40,72, 0,58, 0,48, 0,442,223,2289 %
50,72, 0,58, 0,48, 0,44, 0,402,623,62100 %

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_tokens reserviert 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_ENABLE steht standardmäßig auf 2 (automatische Erkennung). Diese Version führte einen Fallback bei fehlgeschlagener NVLS-Initialisierung ein; mit NCCL_NVLS_ENABLE=1 blieb 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 ncclUnhandledCudaError mit NVLS und einen erfolgreichen Lauf mit NCCL_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- und nvlink5-Paketen12. Der Fabric-Stack bewegt sich als Set - so will es NVIDIAs eigene Paketierung.

Die Arbeitsregeln, die aus der Dokumentation folgen:

  1. Driver + Fabric-Manager + NCCL als Set pinnen - FM ist per Design an die Driver-Version gebunden12.
  2. Mit einem Mini-All-Reduce-Benchmark pruefen, bevor man dem Serving-Stack die Schuld gibt.
  3. 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

  1. 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 ↩

  2. 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 ↩

  3. vLLM-MTP-Dokumentation (speculative_config, num_speculative_tokens): https://docs.vllm.ai/en/latest/features/speculative_decoding/mtp/ ↩ ↩2

  4. SGLang-Spekulationsparameter-Referenz - --speculative-algorithm NEXTN (ein Alias von EAGLE): https://docs.sglang.io/docs/advanced_features/speculative_decoding ↩

  5. 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

  6. 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

  7. 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 ↩

  8. 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

  9. 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 ↩

  10. NCCL-2.27.3-Release-Notes - graziler NVLS-Fallback: https://docs.nvidia.com/deeplearning/nccl/release-notes/rel_2-27-3.html ↩

  11. 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=0 umging diesen Fall: https://github.com/NVIDIA/nccl/issues/2077 ↩

  12. 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

  13. 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 ↩