Muse Glimmer on a DGX Spark: 4 tok/s, or 23 with a flag

updated August 19, 2026 dgx-spark Muse-Glimmer-30B

Meta’s Muse Glimmer is a dense 30B model built for always-on local agents, and NVIDIA’s launch post names the DGX Spark as a recommended platform for it. So: how fast is it on one, and is it fast enough to sit inside an agent loop?

The short answer is 4.3 tokens per second, which is not fast enough for anything interactive — and then 23.3, which is, from a single flag that costs nothing in output quality. The gap between those two numbers is the whole post.

Setup

Machine Accelerator Model Serving
dgx-spark NVIDIA GB10 meta-models/Muse-Glimmer-30B bf16 · 32k ctx · vllm
dgx-spark NVIDIA GB10 meta-models/Muse-Glimmer-30B bf16 · dflash d4 spec · 32k ctx · vllm
dgx-spark NVIDIA GB10 meta-models/Muse-Glimmer-30B bf16 · dflash d15 spec · 32k ctx · vllm

All three rows are the same weights on the same machine. Only the speculative-decoding configuration differs — off, drafting four tokens ahead, and drafting fifteen — which is what makes the comparison clean.

Getting to the first row took most of a day. On the day of release no shipping vLLM contained the architecture at all — not NVIDIA’s NGC images, not the current stable release — and the checkpoint’s 47 GB shard could not be staged into memory on a 128 GB machine. The serving stack here is a pre-release image built from an unmerged pull request, running a locally re-sharded copy of the weights. The companion post covers all of that in detail, including a configuration that served fluent-looking gibberish at a perfectly normal speed.

Everything below was measured after the model demonstrably answered questions correctly. Given how easy it was to produce numbers from a broken model, that is not a formality.

Results

Updated 2026-08-19: the depth-15 figures below were re-measured. The original run’s serving configuration was never recorded — the container had been started by hand, so the record could not show which drafter depth produced the fastest row. The re-run is the same model, weights, image and flags, and it reproduces the result: the two runs differ by less than noise (chat_short 20.97 ± 1.22 vs 22.39 ± 2.21 tok/s over five repetitions, t = 1.26). The numbers shifted slightly because they are a different draw, not because the earlier ones were wrong.

chat_short

End-to-end throughput — chat_short 165 prompt tokens · median of 5 runs
Machine Model tok/s
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d15 spec · 32k ctx
23.3 ±2.2
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d4 spec · 32k ctx
13.1 ±0.7
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · no spec · 32k ctx
4.3 ±0.0
Higher is better. Values are medians across repetitions; ± is standard deviation.

A 128-token prompt and 256 out: almost pure decode, and the closest thing here to what typing at the model feels like. The baseline’s 4.3 tok/s is roughly reading speed for a slow reader — technically usable, unpleasant in practice. At 23.3 it stops being the thing you notice.

Prefill is not compared in this post. Speculative decoding emits several tokens per stream delta, so time-to-first-token stops meaning what it usually means and the harness records it as null rather than reporting a number it cannot stand behind. For reference, the baseline measured 297 ms here.

chat_long_context

End-to-end throughput — chat_long_context 5433 prompt tokens · median of 5 runs
Machine Model tok/s
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d15 spec · 32k ctx
13.5 ±0.5
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d4 spec · 32k ctx
9.3 ±0.4
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · no spec · 32k ctx
4.0 ±0.0
Higher is better. Values are medians across repetitions; ± is standard deviation.

8k in, 256 out — the RAG-shaped case, where a real prompt of retrieved context precedes a short answer. This is the smallest speedup of the three decode-heavy scenarios (3.37×) for a simple reason: a meaningful share of the wall clock is prefill, and speculation does nothing for prefill. The baseline spent 3.8 s before the first token.

code_generation

End-to-end throughput — code_generation 419 prompt tokens · median of 5 runs
Machine Model tok/s
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d15 spec · 32k ctx
25.9 ±3.9
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d4 spec · 32k ctx
13.8 ±0.6
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · no spec · 32k ctx
4.3 ±0.0
Higher is better. Values are medians across repetitions; ± is standard deviation.

512 in, 1024 out: the longest generation in the suite, and the best case for speculation at 6.06×. Long outputs are where drafting compounds — every accepted token is a full weight sweep the machine did not have to do, and across 1024 tokens that adds up.

Worth noting for agentic use specifically: this is the shape that matters, and it is the shape that gains most.

summarization

End-to-end throughput — summarization 10773 prompt tokens · median of 5 runs
Machine Model tok/s
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d15 spec · 32k ctx
9.6 ±0.1
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · dflash d4 spec · 32k ctx
7.2 ±0.1
NVIDIA DGX Spark (GB10)
NVIDIA GB10
meta-models/Muse-Glimmer-30B
bf16 · vllm · no spec · 32k ctx
3.4 ±0.0
Higher is better. Values are medians across repetitions; ± is standard deviation.

16k in, 128 out — the worst case for a bandwidth-limited machine, and the smallest speedup at 2.80×. With a 16,384-token prompt and only 128 tokens of output, prefill dominates the wall clock, and prefill is unaffected by drafting. The baseline waited 7.6 s before the first token.

If your workload looks like this — long documents in, short answers out — speculative decoding is worth much less to you than the headline figure suggests.

What the numbers say

End-to-end throughput, median of 5 repetitions. Both runs are the same weights, image and machine; only the speculative config differs.

Scenario BF16 + DFlash (depth 4) + DFlash (depth 15) Speedup
chat_short 4.30 13.12 23.31 5.42×
chat_long_context 4.02 9.34 13.54 3.37×
code_generation 4.28 13.76 25.93 6.06×
summarization 3.42 7.21 9.57 2.80×

The bottleneck is memory bandwidth, and the baseline was not missing it by much.

Decoding one token from a dense model requires reading every weight. At BF16 that is 59.6 GB, and 4.3 tokens per second works out to about 256 GB/s of weight traffic against roughly 273 GB/s of memory bandwidth on the GB10. The baseline was running at around 94% of what the machine can physically move. There was no configuration left to find.

The clearest evidence is that decode did not care about the prompt at all: it sat at 4.3 tok/s whether the input was 128 tokens or 16,384, with KV cache occupancy at 0.2% throughout. The weights dominate so completely that the attention cache is a rounding error. Once you have seen that flatness, the number stops looking like a tuning problem and starts looking like a division.

Which is why speculative decoding is the whole answer here. It does not raise the ceiling — the machine still moves 273 GB/s — it stops spending a full sweep of the weights on every single token. At a mean acceptance length of about 3.4, one pass over the weights yields three or four tokens instead of one, and the measured 2.8–6.1× falls out of that. The variation across scenarios is just how much of each one is decode: code_generation is nearly all decode and gains 6.06×, summarization is mostly prefill and gains 2.80×.

Acceptance is not constant either. On highly predictable output the drafter reached a mean acceptance length of 9.6 — nearly ten tokens verified per pass, which is only reachable at all because the draft depth is 15.

Two things did surprise me. The first is that the drafter is not an optional extra on hardware like this — it is the difference between a model you can put in an agent loop and one you cannot, and it ships in the same repository as the weights.

The second is how easily I misdiagnosed it. Meta’s recipe specifies num_speculative_tokens: 15; run that as published and the engine dies with a CUDA device-side assert, which reads exactly like a hardware incompatibility on a new chip. It is not. DFlash stages its draft inputs in the scheduler’s token budget and needs max_num_seqs × (1 + num_speculative_tokens) of it — 4096 here — while the scheduler defaults to 2048. The tensor overruns and the positions become garbage. Dropping the draft count shrinks the requirement until it fits, which is why depth 4 appeared to be the fix; raising --max-num-batched-tokens fixes the actual problem and keeps the throughput. The two remedies look equivalent from the error message and differ by up to 2× in speed.

But is it any good?

Speed is worth nothing on its own, and this post would be misleading if it stopped at throughput. MMLU-Pro, 200 questions in each of fourteen subjects — 2,800 in total, 5-shot chain-of-thought, greedy — the same harness, questions and answer-extraction rules used for the other three models on this box. How the grading works is written up separately.

Muse Glimmer scores 74.9%, statistically tied with gpt-oss-120b for third.

Model MMLU-Pro vs Muse Glimmer
Qwen3.6-27B 82.5% +7.6 pts, significant
Qwen3.6-35B-A3B 80.8% +5.9 pts, significant
gpt-oss-120b 74.2% −0.7 pts, not significant
Muse-Glimmer-30B 74.9%

So it is comfortably behind both Qwens and indistinguishable from a model four times its size. The aggregate still hides the more useful story, which is that it is not uniformly weaker — it is competitive in most subjects and falls off badly in a few:

Subject 27B 35B-A3B gpt-oss Muse Glimmer vs best vs worst
Overall 82.5 80.8 74.2 74.9 −7.6 +0.7
biology 91.0 90.0 83.5 89.0 −2.0 +5.5
business 86.0 86.0 81.5 83.0 −3.0 +1.5
chemistry 81.5 82.0 80.5 78.0 −4.0 −2.5
computer science 87.5 88.0 82.5 78.0 −10.0 −4.5
economics 91.0 88.5 83.5 80.5 −10.5 −3.0
engineering 60.0 52.0 63.5 62.0 −1.5 +10.0
health 76.5 79.0 71.5 75.0 −4.0 +3.5
history 79.5 76.5 60.0 66.5 −13.0 +6.5
law 75.5 69.5 52.5 49.0 −26.5 −3.5
math 90.5 87.5 89.5 87.5 −3.0 +0.0
other 78.0 79.0 64.5 67.5 −11.5 +3.0
philosophy 85.5 82.0 67.0 75.0 −10.5 +8.0
physics 88.5 87.5 82.0 80.0 −8.5 −2.0
psychology 84.5 83.5 77.5 78.0 −6.5 +0.5

The vs worst column is the one that reframes it. Muse Glimmer is below all three of the others in five of fourteen subjects — chemistry, computer science, economics, law and physics — and it beats the weakest of them in eight. Engineering is its standout: ten points clear of the worst model and within 1.5 of the best, in the one subject where the 27B gets displaced at all.

Law is the real weakness, and it is severe. 49.0% against the 27B’s 75.5% — a 26.5-point gap, the widest single-subject deficit between any two models on this machine, on a ten-option format where chance is 10%. Nothing about the sample size explains that away.

Correction, 16 August 2026. This section originally reported these subjects at 20 questions each, and three of its four headline findings did not survive being re-measured at 200. History was published at 35% and a 40-point deficit; it is 66.5% and 13. Physics was published at 70% and −30; it is 80.0% and −8.5. Economics was published at −25; it is −10.5. The overall score moved from 70.0% to 74.9%, which changes it from “lowest of the four” to tied for third. Law is the one weakness that held, and it got worse relative to the field. The original numbers were not wrong to report — they were what the harness measured — but at ±11 points of sampling error they could not carry the conclusions I drew from them. The old run is kept in the repository.

The correction is worth dwelling on, because the original post named the number it distrusted and that instinct was right. It said of physics: “the number I trust least and would want to re-run. A model that ties the field on math and then drops to 70% on physics is a strange shape, and at n=20 that is six wrong answers. It may be real. It may be six unlucky draws.”

It was six unlucky draws. At 200 questions physics came back at 80.0% — an ordinary result for this model, in line with chemistry and psychology. History did the same thing, moving 31 points. Both were noise wearing the shape of a finding, and the way to tell was not judgement but a larger sample.

Per-subject figures are now 200 questions each, which is about ±3 points at one standard error rather than ±11. Single-point differences within a row are still nothing; the ten- and twenty-point gaps are now real.

Total run time

Arm What ran Machine time
Muse-Glimmer-30B 4 scenarios · 5 repetitions each 40 min
Muse-Glimmer-30B 4 scenarios · 5 repetitions each 14 min
Muse-Glimmer-30B 4 scenarios · 5 repetitions each 8 min
Total 1.0 h
Machine time for the runs cited here, from data/runs/. Each run is the full scenario set at five repetitions per scenario, and the figure excludes model loading.

About an hour across three configurations, and the distribution is the point: the no-drafter run took 40 minutes and the depth-15 run 8.

The benchmark’s own duration is the finding. A five-fold difference in wall clock for identical work is the same 2.8-6.1x speedup the table reports, arriving before any number is computed.

What to run

There is no buying decision in this post — it is one model on one machine, in two configurations — so the recommendation is about how to run it.

Turn the drafter on. It is 2.1–3.2× faster and the output is unchanged, because the full model verifies every drafted token before it is emitted. This is not a speed-versus-quality trade; there is no cost to weigh. The only reason not to enable it is the small amount of extra memory the draft model occupies, which on a 128 GB machine is not a consideration.

--speculative-config '{"method":"dflash","model":"meta-models/Muse-Glimmer-30B-assistant","num_speculative_tokens":4}'
--max-num-batched-tokens 8192

Give the drafter room, then use the recipe’s depth of 15. Set --max-num-batched-tokens above max_num_seqs × (1 + num_speculative_tokens) — 8192 covers the default 256 sequences at depth 15 comfortably. Without it you get an assert that looks like a hardware problem; with it, depth 15 is 1.3–2.0× faster than depth 4 at a higher acceptance length (3.4 against 3.0), so the lower depth costs throughput for nothing.

Judge the model on the DFlash row, not the baseline. 4.3 tok/s is what this machine does with 59.6 GB of dense BF16 weights and no drafting; it says more about bandwidth arithmetic than about Muse Glimmer. 23.3 tok/s is what the model delivers configured as its authors intended — faster than the dense 27B on this box.

But do not read that as “better than the 27B”. It is faster and it is the only model here that can read an image; it is also 7.6 points behind on MMLU-Pro, and that gap is statistically significant where the 27B-vs-35B gap in the four-model comparison was not. This is a speed-and-modality choice, not a quality one.

Where the deficit nearly vanishes: engineering (−1.5 and second of four), biology (−2.0), business (−3.0) and math (−3.0). Where it does not: law (−26.5), and to a lesser degree history, other, philosophy, economics and computer science, all −10 or worse.

Two of those deserve flagging because they cut against the obvious reading. “STEM-shaped work is fine” is only half true — engineering and math are fine, but computer science is one of its five worst subjects at −10.0, so this is not a model to reach for on coding-adjacent reasoning just because it does well on engineering. And if your work touches law, pick the 27B and accept the slower tokens; that is the one subject where the gap is large enough that no amount of speed compensates.

If your workload is long-in, short-out, temper expectations. The 2.80× on summarization is the honest figure for document processing, against 6.06× on code generation. Speculation helps decode, and that workload barely decodes. Note also that code_generation was the noisiest scenario at depth 15 — repetitions ranged 24.3 to 31.9 tok/s — because deeper drafting makes throughput more sensitive to how predictable the output is.

Revision history

Correction, 14 August 2026. This post originally reported 13.1 tok/s as the speculative-decoding result, using num_speculative_tokens: 4, because I believed the recipe’s value of 15 crashed the engine on this hardware. It does not: the assert is a draft-input buffer overflow that –max-num-batched-tokens 8192 resolves, and my depth-4 run had already set that flag — so I fixed the problem and credited the wrong change. Re-measured at depth 15, the model is 1.3–2.0× faster again. Figures throughout are the corrected ones; both original runs are kept in the repository and cited in the frontmatter.

Source data: d994a07defc0d4fa66cd5bd9e6223a2d9555