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.

Nemotron 3.5 Bolt: Heterogenes LatentMoE und das 24-GB-Budget

Bolts Expert-Geometrie je Block, IQ2_XXS-Kodierung, Mixed-Precision-Checkpoint und hybriden Cache prüfen und Modellgröße von Laufzeitspeicher trennen.

8 Min. Lesezeitflozi00
aillmarchitecturenemotronmoemambaquantizationinference

KI-Hinweis: Dieser Artikel wurde mit Unterstützung generativer KI erstellt. Redaktionell verantwortlich: Florian Zimmermeister (flozi00). Impressum und Kontakt.

NVIDIA veröffentlichte Nemotron 3.5 Bolt 74B-A9B 24GB am 15. Oktober 2026, mit quantisierten Safetensors-, GGUF-, BF16- und separaten Drafter-Checkpoints. Das interessante Architekturdetail ist nicht einfach „ein 74B-Modell in zwei Bit“. Bolt kombiniert unterschiedliche Expert-Zahlen und -Breiten je Block, einen schmaleren Pfad für geroutete Experts, mehrere Gewichtsformate und einen hybriden Cache aus Attention- und Rekurrenzzuständen.12

Geprüft wurden die quantisierte Safetensors-Revision c6cc2e8ffa353403213d6b9b18aaf8eb684d705a und die GGUF-Model-Card-Revision e0fecb69cb3e5e4c5e8a056fa2aec98c78e91246, Stand 17. Oktober 2026. Hergeleitete Bytezahlen sind keine GPU-Allokationen oder Durchsatzmessungen. Der Quantisierungs-Guide erklärt den allgemeinen Präzisionskompromiss; der KV-Cache-Guide erklärt, warum Gewichte nur einen Teil des Serving-Budgets ausmachen.

Die gespeicherte Architektur ist heterogen, kein einheitlicher Expert-Stapel

Der Sprach-Backbone besteht aus 88 aufeinanderfolgenden Blöcken: 40 Mamba-2-, 40 MoE- und acht Attention-Blöcken. Das sind separate Residualblöcke, nicht 88 konventionelle Layer mit jeweils Attention plus FFN. Die nullbasierten Attention-Indizes lauten 7, 16, 25, 36, 47, 58, 69 und 78.23

Technische Tabellen und Formeln verwenden die internationale Zahlenschreibweise mit Dezimalpunkt und gegebenenfalls Komma als Tausendertrennzeichen.

Eigenschaft des Sprach-BackbonesVeröffentlichter Wert
Hidden-Breite / latente Breite gerouteter Experts4,096 / 1,024
Geroutete Experts je MoE-Block240, 304, 368, 432 oder 496
Geroutete Zwischenbreiten1,536, 2,048, 2,304 oder 2,560
Ausgewählte Experts je Token, jeder MoE-Block9
Shared Experts / gemeinsame Zwischenbreite1 / 5,376
Attention-Q-Heads / KV-Heads / Head-Breite32 / 2 / 128
Mamba-Heads / Head-Breite / SSM-Breite128 / 64 / 128
Mamba-B/C-Gruppen / Faltungsbreite8 / 4
Konfigurierte maximale Kontextlänge / Vokabular262,144 / 131,072
Eingebaute MTP-Layer0

Beispielsweise besitzt Block 3 insgesamt 240 geroutete Experts mit Breite 1.536, Block 48 dagegen 496 mit Breite 2.560 und Block 79 ebenfalls 496 mit Breite 2.560. Maßgeblich sind die Werte in block_configs. Die eigene Konfigurationsklasse erstellt für jeden Block eine separate Basiskonfiguration und entfernt blockweise Felder aus ihrer globalen Konfiguration. Verbliebene globale Angaben wie num_experts: 512 oder intermediate_size: 2688 als ausgeführte Geometrie zu interpretieren, wäre deshalb falsch.24

Laut NVIDIA entsteht dieses Layout durch budgetabhängige Architektursuche und Distillation aus Super 3.5 VL, gefolgt von Wiederherstellungstraining und quantisierungsbewusster Distillation. Das veröffentlichte Suchbudget berücksichtigt spätere Quantisierung und Laufzeitzustände bei Batchgröße eins und 128K Kontext. Das beschreibt die Konstruktion des festen Checkpoints; das eingesetzte Modell führt nicht für jede Anfrage erneut eine Architektursuche durch oder passt dabei Expert-Größen an.51

Ein Token durch das LatentMoE verfolgen

Für den Hidden-Vektor x∈R4096x\in\mathbb{R}^{4096} liest das Routing die volle Eingabebreite. Der geroutete Zweig projiziert ihn separat auf z∈R1024z\in\mathbb{R}^{1024}. In Block ll besitzt Expert ee Matrizen Ul,e∈RIl×1024U_{l,e}\in\mathbb{R}^{I_l\times1024} und Vl,e∈R1024×IlV_{l,e}\in\mathbb{R}^{1024\times I_l}. Er berechnet quadriertes ReLU, kein SwiGLU-FFN mit drei Matrizen.3

z=P↓x,P↓∈R1024×4096,fl,e(z)=Vl,e [ReLU⁡(Ul,ez)]2,yl=P↑∑e∈Sl(x)αl,efl,e(z)+Vl,s[ReLU⁡(Ul,sx)]2,P↑∈R4096×1024.\begin{aligned} z&=P_{\downarrow}x, & P_{\downarrow}&\in\mathbb{R}^{1024\times4096},\\ f_{l,e}(z)&=V_{l,e}\,[\operatorname{ReLU}(U_{l,e}z)]^2,\\ y_l&=P_{\uparrow}\sum_{e\in S_l(x)}\alpha_{l,e}f_{l,e}(z) +V_{l,s}[\operatorname{ReLU}(U_{l,s}x)]^2, &P_{\uparrow}&\in\mathbb{R}^{4096\times1024}. \end{aligned}

Die Quadrierung erfolgt elementweise. Der Shared Expert arbeitet auf der originalen Eingabe mit Breite 4.096, mit Ul,s∈R5376×4096U_{l,s}\in\mathbb{R}^{5376\times4096} und Vl,s∈R4096×5376V_{l,s}\in\mathbb{R}^{4096\times5376}. Er gehört nicht zu den neun ausgewählten Experts und liegt nicht im latenten Zweig mit Breite 1.024. Die Gleichung beschreibt den MoE-Mixer; der umgebende Block addiert seinen Residualpfad separat.3

Der Router berechnet FP32-Logits und Sigmoid-Scores ses_e. Er wählt neun Experts anhand von se+bes_e+b_e aus, wobei beb_e ein Korrektur-Bias ist. Die Mischgewichte entstehen jedoch aus den originalen Scores ohne Bias. Normalisierung und Skalierung lauten:3

Sl(x)=TopK⁡9(s+b),αl,e=5 se∑j∈Sl(x)sj+10−20(e∈Sl(x)).S_l(x)=\operatorname{TopK}_{9}(s+b),\qquad \alpha_{l,e}=5\,\frac{s_e}{\sum_{j\in S_l(x)}s_j+10^{-20}} \quad(e\in S_l(x)).

n_group=1 bedeutet hier, dass Expert-Gruppierung den Kandidatenpool nicht einschränkt. Das ist nicht mit n_groups=8 zu verwechseln, das Mambas B/C-Gruppen steuert. Die latente Breite viertelt die Größe beider Matrizen jedes gerouteten Experts gegenüber einem hypothetischen, sonst identischen Expert mit Breite 4.096. Projektions- und Shared-Expert-Kosten bleiben bestehen; dieser Dimensionsvergleich ist kein gemessener vierfacher Modell-Speedup.

IQ2_XXS ist ein Codebook-Format, nicht vier unabhängige Stufen je Gewicht

Der Checkpoint spezifiziert 66 Bytes für 256 Gewichte, also 66×8/256=2.062566\times8/256=2.0625 Bit je Gewicht. Die gepinnte GGML-Struktur enthält eine zwei Byte große FP16-Blockskala und 64 gepackte Bytes. Ihr Decoder interpretiert jede Gruppe aus 32 Gewichten als vier Grid-Lookups für jeweils acht Gewichte, vier Vorzeichenselektoren und eine lokale Skala.267

IQ2_XXS-Speicher für 256 GewichteBit
Acht Gruppen × vier Grid-Indizes × 8 Bit256
Acht Gruppen × vier Vorzeichenselektoren × 7 Bit224
Acht lokale Skalenselektoren × 4 Bit32
Eine FP16-Blockskala16
Summe528 = 66 Bytes

Für eine Gruppe aus 32 Gewichten liefert der Vier-Bit-Selektor a∈{0,…,15}a\in\{0,\ldots,15\} den Multiplikator d(a+0.5)/4d(a+0.5)/4 mit FP16-Blockskala dd. Jeder Teilvektor aus acht Gewichten übernimmt anschließend acht Beträge aus einem Grid mit 256 Einträgen und ein Vorzeichenmuster aus einer Tabelle mit 128 Einträgen. Das sind gekoppelte Vektorrepräsentationen, keine 256 unabhängigen skalaren Zwei-Bit-Codes. Die Zwei-Bit-Bezeichnung beschreibt die mittlere Speicherung; sie belegt keine native INT2-Arithmetik auf der GPU.7

Die Matrixmultiplikation verarbeitet weiterhin Aktivierungen in einer anderen Präzision. Der geprüfte vLLM-Pfad für blockquantisierte MoE verlangt ausdrücklich BF16-Aktivierungen. Das Umpacken oder Dequantisieren von Kacheln für einen Kernel bedeutet nicht, dass das gesamte Modell als dichte BF16-Kopie vorliegen muss. Es verursacht aber kernelspezifische Anforderungen an Vorbereitung, temporären Speicher und Kompatibilität.8

Der tatsächliche Checkpoint verwendet gemischte Präzision

Die Quantisierungskonfiguration listet unterschiedliche Zielmodule auf. Insbesondere verwenden die Matrizen gerouteter und gemeinsamer Experts IQ2_XXS, während die latenten Projektionen höherpräzise bleiben. Q8_0 benötigt selbst 34 Bytes je 32 Gewichte = 8,5 Bit/Gewicht, einschließlich seiner FP16-Skala.26

Safetensors-KomponenteBefund der gepinnten Revision
Up-/Down-Matrizen gerouteter und gemeinsamer ExpertsIQ2_XXS, 2.0625 effektive Bit
Mamba-Eingabe-/AusgabeprojektionenNVFP4-Mixed-Precision-Ziele, Gewichtsgruppen mit 16 Elementen
Attention-Projektionen, latente Projektionen, LM-HeadQ8_0, 8.5 effektive Bit
Eingabe-Embedding-TensorBF16, Form [131072,4096][131072,4096], 1 GiB

Die Embedding-Zeile präzisiert die pauschale Präzisionsbeschreibung im NVIDIA-Blog: Der gepinnte Safetensors-Export enthält keinen Embedding-Eintrag in quantized_layers. Der tatsächliche Header des ersten Shards deklariert language_model.backbone.embeddings.weight als BF16, mit 1.073.741.824 Datenbytes. Für diese Prüfung wurde nur der Shard-Header gelesen, nicht die Gewichtsnutzlast. Präzisionsangaben dürfen nicht ohne Tensorprüfung zwischen Safetensors- und GGUF-Export übertragen werden.29

Für diese Experts mit zwei Matrizen ist die Parameterrechnung direkt möglich. Summiert wird über die 40 Blockkonfigurationen mit latenter Breite L=1024L=1024, gerouteter Anzahl ElE_l und Zwischenbreite IlI_l:23

Prouted=∑l2LElIl=66,144,174,080,Pshared=40×2×4096×5376=1,761,607,680,Mexperts=(Prouted+Pshared)66256=17,506,959,360 bytes≈16.305 GiB.\begin{aligned} P_{\rm routed}&=\sum_l2LE_lI_l=66,144,174,080,\\ P_{\rm shared}&=40\times2\times4096\times5376=1,761,607,680,\\ M_{\rm experts}&=(P_{\rm routed}+P_{\rm shared})\frac{66}{256} =17,506,959,360\text{ bytes}\approx16.305\text{ GiB}. \end{aligned}

Das ist die logische gepackte Nutzlast dieser Expert-Matrizen, ohne Padding des Laufzeitlayouts und ohne andere Tensoren. Die Auswahl von neun Experts reduziert die Arbeit je Token; sie entfernt keine ungewählten Expert-Gewichte aus einem residenten Modell. Der veröffentlichte Safetensors-Index nennt für das gesamte exportierte Modell 24.079.678.824 Tensorbytes, ungefähr 24,08 dezimale GB beziehungsweise 22,426 GiB. Keine dieser Zahlen beschreibt maximal belegten Gerätespeicher: Laden, vorbereitete Layouts, Rekurrenzzustände, KV, Vision-Verarbeitung, Drafter, Arbeitsbereiche und Allocator-Overhead können weiteren Speicher benötigen.10

Warum Distillation helfen kann, ohne zwei Bit verlustfrei zu machen

Eine allgemeine Identität erklärt, warum Rundungsfehler allein nicht ausreichen. Es seien W^=W+ΔW\widehat W=W+\Delta W und Σx=E[xxT]\Sigma_x=\mathbb{E}[xx^{\mathsf T}] die Matrix der zweiten Eingangsmomente. Dann gilt für den erwarteten quadrierten Fehler der linearen Ausgabe:

E∥W^x−Wx∥22=tr⁡(ΔWΣxΔWT).\mathbb{E}\|\widehat Wx-Wx\|_2^2 =\operatorname{tr}(\Delta W\Sigma_x\Delta W^{\mathsf T}).

Derselbe Gewichtsfehler wirkt entlang unterschiedlich stark angeregter Eingaberichtungen unterschiedlich. Über nichtlineare Layer, Routing und Rekurrenz können lokale Ausgabefehler auch spätere Berechnungen verändern. Quantisierungsbewusste Distillation setzt den Student während des Trainings Quantisierungseffekten aus und trainiert ihn darauf, das Verhalten eines Teachers wiederherzustellen. Sie kann Gewichte anpassen, statt ein eingefrorenes Netz lediglich zu runden. NVIDIA berichtet den Einsatz von QAD für Bolt; diese Identität ist aber eine erklärende Herleitung, keine Spezifikation seiner Trainings-Loss und kein Beweis erhaltener Genauigkeit.5

Ein größeres Modell mit weniger Bit kann unter festem Speicherbudget nützliche Kapazität bewahren. Das bleibt jedoch ein empirischer, workloadabhängiger Kompromiss. Daraus folgt nicht, dass jeder 74B-Zwei-Bit-Checkpoint jedes kleinere Vier-Bit-Modell übertrifft. Für diesen Artikel wurde kein unabhängiger Qualitäts- oder Latenzvergleich durchgeführt.

Auch die hybriden Laufzeitzustände benötigen ein Budget

Jeder der acht Attention-Blöcke speichert getrennte K und V mit den logischen Formen [B,2,T,128][B,2,T,128]. Zusammen ergibt das in BF16 8 KiB je Token und Sequenz: 1 GiB bei 131.072 Tokens und 2 GiB bei 262.144. Reine FP8-Elemente halbieren diese Nutzlast vor Skalen, Paging und enginespezifischem Overhead. GGUF-q8_0 ist nicht identisch mit FP8-Speicherung in einem Byte.23

Jeder Mamba-Block hält stattdessen einen SSM-Zustand [B,128,64,128][B,128,64,128] und einen Faltungszustand [B,10240,4][B,10240,4], mit 10240=128×64+2×8×12810240=128\times64+2\times8\times128. Für Batchgröße eins ergeben einmalig vorhandene BF16-Zustände über 40 Blöcke 80 MiB SSM- und 3,125 MiB Faltungszustand. Das ist unabhängig von der Sequenzlänge, nicht aber von der Parallelität oder der Zahl durch die Engine vorgehaltener Snapshots.3

Das gespeicherte Feld mamba_ssm_cache_dtype lautet float32; das veröffentlichte vLLM-Rezept fordert ausdrücklich BF16 für SSM- und Faltungs-Caches an. Mit FP32 wären allein für den SSM-Teil 160 MiB nötig. Zu prüfen ist der tatsächlich ausgeführte Datentyp, nicht nur die Gewichtspräzision oder ein einzelnes Konfigurationsfeld. Diese Untergrenzen schließen Rollback-/Alignment-Zustände für spekulative Ausführung, Prefix-Cache-Kopien, Padding und Allocator-Reservierungen aus.25

Veröffentlichte Serving-Pfade haben unterschiedliche Grenzen

Die gepinnte GGUF-Model-Card unterscheidet ein 28GB-Rezept mit 65.536 Kontext, q8_0-KV und bis zu sechs Draft-Tokens von einem 32GB-Rezept mit 262.144 Kontext und bis zu sieben Draft-Tokens. Als Hardware empfiehlt sie dafür RTX Spark mit 64GB oder diskrete GPUs mit 32GB+ beziehungsweise RTX Spark mit 128GB oder diskrete GPUs mit 48GB+. Ihr kürzeres Quick-Start-Beispiel fordert dagegen 98.304 Kontext an. Das sind verschiedene Rezepte, kein Nachweis pauschaler 24GB-Residenz bei voller Kontextlänge.11

Das vLLM-Rezept nennt das Image nightly-77154ca6116ae34cbfe314beef1016bde9b63989 und fordert b12x für Linear-/MoE-Backends, FP8-KV und BF16-Rekurrenz-Caches an. In diesem Quellstand lehnt der native blockquantisierte Expert-Loader Nicht-SM12x-Geräte, andere Aktivierungen als BF16 und Expert-Parallel-/EPLB-Layouts ab. Er unterstützt Tensorparallelismus ohne EP/EPLB. Allgemeine A100-/H100-Angaben in der Model-Card-Zusammenfassung belegen deshalb keine Unterstützung dieses konkreten gepackten Pfads.58

Das eigenständige b12x-Repository ist inzwischen archiviert. Seine gepinnte README verweist für die Weiterentwicklung auf flashinfer/experimental/b12x und nennt den Migrations-Commit. Historische Anweisungen mit pip install b12x und das neuere FlashInfer-Paket dürfen nicht ohne Integrationstest vermischt werden. Das Kernel-Subsystem zielt auf SM120/SM121; einzelne Operationen können enger begrenzt sein. Das ist eine versionsabhängige Betriebsgrenze, keine Empfehlung, einen funktionierenden Serving-Stack ungeprüft zu ersetzen.12

Bolts Backbone enthält keinen eingebauten MTP-Layer. Der veröffentlichte LiLiCorr-Drafter ist ein separates, über DFlash verwendetes Modell; er benötigt zusätzlichen Speicher und muss neben dem Zielmodell geladen werden. Die GGUF-Model-Card lädt außerdem einen separaten multimodalen Projektor. Zielmodell, Projektor, Drafter, Caches und Arbeitsbereiche sind als getrennte Budgetposten zu behandeln. Ihre Revisionen und der getestete Runtime-Build sind vor dem Betrieb festzuschreiben.211

Das praktische Ergebnis ist ein Budget, kein Werbespruch: Bolt spart Gewichtsbytes durch heterogene latente Experts und Codebook-Quantisierung, während andere Teile höherpräzise bleiben. Sein hybrider Backbone begrenzt, welche Blöcke tokenweise KV ansammeln; lange Kontexte und spekulatives Decoding verursachen dennoch Kosten. Die Veröffentlichung bietet nutzbare Software mit herunterladbaren Gewichten. Angemessene Kontextlänge, Parallelität und Hardware müssen trotzdem workloadbezogen validiert werden. Wir haben das Modell nicht ausgeführt und seine GPU-Kernels nicht vermessen.

Primärquellen

Footnotes

  1. NVIDIA technical release, October 15, 2026. ↩ ↩2

  2. Released per-block architecture and quantization configuration. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  3. Released model implementation: LatentMoE, routing, attention and recurrent-cache allocation. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  4. Per-block configuration construction and global-field removal. ↩

  5. Bolt Safetensors model card, pinned revision. ↩ ↩2 ↩3 ↩4

  6. GGML IQ2_XXS and Q8_0 storage structures at f74e2fa6a31cc33ab4ee4ae516641cfe62df3924. ↩ ↩2

  7. GGML IQ2_XXS reference decoder at the same revision. ↩ ↩2

  8. vLLM native block-quantized loader and kernel constraints at 77154ca6116ae34cbfe314beef1016bde9b63989. ↩ ↩2

  9. First Safetensors shard: BF16 embedding header and data offsets. ↩

  10. Released Safetensors index and total_size metadata. ↩

  11. GGUF model card: separate projector/drafter and detailed 28GB/32GB recipes. ↩ ↩2

  12. b12x migration, packaging and hardware scope at 2cc7f66aaef76a9c7cbb660a1efb865cf3f26c88. ↩