Ternary Nemotron 30B-A3B — 368K Context on 12 GB GPU (GGUF)
A ternary (1.58-bit) 30B-A3B MoE model that runs on a 12 GB GPU with 368K context, 172 tok/s decode and 7 000+ tok/s prefill — in both stock llama.cpp and the PrismML fork. One file, both engines.
| File | Ternary-Nemotron-3.5-Lightning-30B-A3B-GGUF.gguf — 8.82 GB |
| Architecture | nemotron_h_moe: 52 blocks, hybrid Mamba-2 + MoE (128 routed experts, top-6 + shared) + 6 attention layers |
| Weight format | 162 linear tensors at Q2_0 (ternary, 2.25 bpw) — bit-exact repack; embeddings + lm_head at Q8_0 |
| Context | 262 144 native · verified working to 341K (3/3 needle) · usable to ~400K (2/3 at 410K) |
| VRAM | ~9.5 GB for weights → fits a 12 GB card fully on GPU at ≤368K context |
| Engines | ✅ stock llama.cpp (validated on b11555+, b11796) · ✅ PrismML fork / Bonsai (validated on b10793) |
What this is
Nota AI ternarized NVIDIA's Nemotron 3.5 Lightning 30B-A3B to 1.58-bit weights, but published it in MLX format only (Apple Silicon). This repo re-packages those same weights — bit for bit, zero numerical loss — into standard GGUF Q2_0, so the model runs in llama.cpp and compatible engines on Linux / Windows / NVIDIA GPUs.
This is an intermediate recovery checkpoint (~89 % of the BF16 teacher's quality): excellent at reading, retrieval, summarisation and long-context comprehension; not a frontier coding model. See Quality & Limitations.
How it was made
The Nota checkpoint stores every linear weight as a true ternary matrix ({−s, 0, +s} per group of 64 inputs) in MLX's 2-bit affine container. GGUF Q2_0 (block 64, fp16 delta, codes {0,1,2} → {−d, 0, +d}) is bit-compatible with that format:
| Tensors (count) | Source | In this GGUF | Loss |
|---|---|---|---|
| All linears (162) — attention q/k/v/o, Mamba in/out-proj, shared + 128 fused routed experts | MLX 2-bit affine, group 64 | Q2_0 — codes + scales copied verbatim |
zero |
token_embd (embeddings) |
MLX 4-bit affine | Q8_0 |
zero (8 ≥ 4 bits) |
output (lm_head) |
MLX 8-bit affine | Q8_0 |
negligible (round-trip) |
| Norms, conv1d, A_log/D/dt_bias, router (239) | bf16/f32 | F32 |
zero |
Verified: dequantizing the written Q2_0 blocks reproduces the MLX dequantization bit-identically across all 164 quantized tensors. Conversion was done with a custom offline tool (not distributed); the method above is everything needed to reproduce it.
Running
# stock llama.cpp (any 2026 build with nemotron_h_moe, validated on b11555+/b11796)
llama-server -m Ternary-Nemotron-3.5-Lightning-30B-A3B-GGUF.gguf \
-c 262144 -np 1 -ngl 99 -fa on -ub 2048 \
--cache-type-k q8_0 --cache-type-v q8_0 --port 8080
# PrismML fork (Bonsai engine, b10793) — same file, same flags
D:/Bonsai/bin/llama-server.exe -m Ternary-Nemotron-3.5-Lightning-30B-A3B-GGUF.gguf \
-c 262144 -np 1 -ngl 99 -fa on -ub 2048 \
--cache-type-k q8_0 --cache-type-v q8_0 --port 8080
Tuning guide (from extensive on-device validation)
| Context | -ub |
Prefill | Decode | Notes |
|---|---|---|---|---|
| ≤262K | 2048 |
~4 600 tok/s | 166–172 tok/s | full GPU, no special flags |
| 262–368K | 512 |
~7 200 tok/s | ~172 tok/s | still full GPU — VRAM budget is tight |
| 368K+ | — | — | — | model quality degrades (see benchmarks) |
Windows WDDM demotion warning: if total VRAM demand exceeds your card's dedicated memory, Windows silently moves ~1 GB to shared system memory → throughput drops ~20× (4 600 → 200 tok/s). Keep weights + KV + compute buffers under ~11.7 GB on a 12 GB card. Use -ngl 43 -ub 512 if you need extra headroom.
Do NOT use --kv-vram-cells (tiered KV, PrismML fork): it silently corrupts attention retrieval for nemotron_h_moe — verified: 0/3 needle with it, 3/3 without.
Reasoning model tip: pass chat_template_kwargs: {"reasoning_effort": "low"} (or use /completion instead of /v1/chat/completions) when you need short answers — otherwise the model may spend thousands of tokens thinking.
Benchmarks (RTX 4070 Ti 12 GB, all weights on GPU, q8_0 KV, flash-attn on)
Long-context needle retrieval (3 facts at 10/50/90 % depth, single pass)
| Corpus tokens | Score | Notes |
|---|---|---|
| 125K | 3/3 | |
| 259K | 3/3 | trained window |
| 341K | 3/3 | native extrapolation ~1.3× beyond trained window |
| 410K | 2/3 | the 90 % depth (oldest data) fails first |
| 492K | 0/3 | q4-KV, q8-KV, native and YaRN ×2 — all fail |
Practical window: ~350–400K usable, 262K guaranteed.
Coding
This ternary model produces correct algorithms (monotonic stack, LFU with frequency buckets) but with subtle implementation bugs (off-by-one in the final drain, wrong eviction tie-break). This is consistent with the 89 % recovery checkpoint.
Negative experiment: embedding graft (transparency)
We grafted the original BF16 embeddings from the NVIDIA base into this GGUF (replacing the 4-bit-quantized ones from the Nota checkpoint). Pre-check confirmed the embeddings are frozen (zero training drift, pure quant noise). Result: coding scores identical to baseline — the deficit is architectural, not noise. The graft file is not published.
Quality & Limitations
This is Nota AI's intermediate ternary recovery checkpoint (published 2026-10-12; their "further recovered model" is available from the authors on request). Reported scores vs the BF16 teacher: GSM8K 95.00→89.31, MATH500 97.60→81.60, HumanEval 96.34→90.85, IFEval 92.05→83.36, HRM8K 91.05→83.24 (average 83.82 vs 93.80).
Strengths: fast, cheap, long-context reading and retrieval (172 tok/s on a 12 GB card, 368K working context). Good for summarisation, RAG over large documents, document QA, knowledge extraction.
Weaknesses: complex coding (subtle bugs under clear specs), complex mathematical reasoning (MATH500 −16 points), instruction-following precision (IFEval −9 points).
Known quirks:
- Runaway reasoning on hard prompts beyond its ability — use
reasoning_effort: lowor/completion. - Tokenizer tagged
pre=pixtral(same as all current Nemotron GGUFs, see llama.cpp #30894). - The model has NO MTP (multi-token prediction) layer — the Nota checkpoint doesn't include one. Speculative decoding via
--spec-type ngram-*works but gives no speedup at 172 tok/s baseline.
Engine compatibility matrix
| Engine | Status | Validated on |
|---|---|---|
stock llama.cpp (any 2026 build with nemotron_h_moe, PR #18058+) |
✅ loads + generates | b11555, b11796 |
| PrismML-Eng/llama.cpp fork (Bonsai) | ✅ loads + generates | b10793 (0.2.0-dev) |
| LM Studio (bundled llama.cpp ≥ 2026) | ✅ expected (same format) | not directly tested |
| Ollama (bundled llama.cpp ≥ 2026) | ✅ expected (same format) | not directly tested |
| MLX (mlx-lm on Apple Silicon) | use the original Nota checkpoint instead | — |
Lineage
| Step | Artifact | License |
|---|---|---|
| Base model | nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16 | OpenMDW-1.1 (NVIDIA) |
| Ternarization (1.58-bit, MLX container) | nota-ai/Nemotron-3.5-Lightning-30B-A3B-Nota-Ternary-MLX-1014 | OpenMDW-1.1 |
| This GGUF (lossless format conversion) | this repo | OpenMDW-1.1 |
License
OpenMDW-1.1 (same as base and source checkpoint; see LICENSE). Commercial use is permitted. Derivatives must retain a copy of the agreement and the notices of origin. Attribution: base model © NVIDIA CORPORATION & AFFILIATES; ternary checkpoint by Nota AI; this GGUF is a lossless re-containerization produced by boro64.