wanted to believe! #5090

#34
by darkmatter2222 - opened

Getting Muse Glimmer 30B + DFlash working on RTX 5090 (Windows) — need help reaching advertised speed

Hi all,

I've been trying to reproduce the 233 tok/s DFlash benchmark for Muse Glimmer 30B K-Quant on an RTX 5090 (32 GB GDDR7). I'm seeing DFlash activate but getting inconsistent results and would love input from anyone who's hit the advertised numbers.


Hardware / Software

GPU NVIDIA GeForce RTX 5090 32 GB
OS Windows 11 (native, not WSL)
Runtime llama-server build b10354 (Clang 20.1.8, x86_64)
Model meta-models/Muse-Glimmer-30B-GGUFmuse-glimmer-30B-kquant-17gb.gguf (~16.8 GB)
DFlash drafter dflash-kquant.gguf (~1.63 GB)
Vision mmproj-kquant.gguf (~1.40 GB, loaded but not used in these tests)

Launch command

llama-server.exe `
  --model  "C:\models\Muse-Glimmer-30B\muse-glimmer-30B-kquant-17gb.gguf" `
  --model-draft "C:\models\Muse-Glimmer-30B\dflash-kquant.gguf" `
  --mmproj "C:\models\Muse-Glimmer-30B\mmproj-kquant.gguf" `
  -ngl 99 -ngld 99 `
  --np 1 `
  --ctx-size 131072 `
  --spec-type draft-dflash `
  --spec-draft-n-max 15 `
  --flash-attn on `
  --reasoning-preserve `
  --host 0.0.0.0 --port 8000

Startup log confirms DFlash is loading:

I common_speculative_impl_draft_dflash: adding speculative implementation 'draft-dflash'
I common_speculative_impl_draft_dflash: - n_max=15, n_min=0, p_min=0.00
I common_speculative_impl_draft_dflash: - block_size=16, mask_token_id=201818, n_extract=5
I srv    load_model: initializing, n_slots = 1, n_ctx_slot = 131072, kv_unified = 'false'
I srv  llama_server: model loaded

Results

I sent the same coding task (BST implementation, ~80K-token context) multiple times and watched the draft acceptance line in the server logs.

Run Context tokens Output tokens Acceptance rate Mean accepted len tok/s
1 79,762 821 30.5% (673/2205) 5.58 168
2 ~82K (follow-up) 1,268 9.5% (744/7860) 2.42 76
3 ~82K (follow-up) 93 14.0% (63/450) 3.10 98
  • Prefill rate is very healthy: ~2,800–4,400 tok/s depending on context length.
  • Baseline (no draft model): ~74–77 tok/s — consistent with Meta's published 74.9 tok/s baseline.
  • Peak decode so far: 168 tok/s (run 1 above) — roughly 2.2× speedup, DFlash is clearly activating.
  • Target: 233 tok/s from the model card. Some community posts are quoting 300 tok/s — I don't know the source of that number.

What I've tried

  • --spec-type draft-dflash (was silently defaulting to draft-simple before — this was the key missing flag)
  • --flash-attn on (required for DFlash block-parallel attention)
  • --spec-draft-n-max 15 (block_size=16, trained max = 15)
  • ✅ Single slot (--np 1) to avoid splitting KV cache budget
  • kv_unified = 'false' shown in logs — should this be true for DFlash?
  • ❓ Is kv_cache_type relevant? (q8_0 / q4_0 for KV compression)
  • ❓ Temperature / sampling parameters affecting acceptance rate?
  • ❓ Does this need a Linux build to work properly, or is the Windows Clang binary sufficient for DFlash's CUDA kernels?

Questions for the community

  1. What acceptance rate should I expect? My run 1 got 5.58 mean accepted tokens per block. Is there a warm-up or context-length dependency? The acceptance drops sharply on follow-up turns.

  2. Is kv_unified important for DFlash? The log shows kv_unified = 'false'. DFlash shares KV state between main and draft models — does this flag need to be true?

  3. Is there a minimum context length for DFlash to engage properly? Run 1 had an 80K-token prefill; runs 2–3 were shorter continuation turns and acceptance cratered.

  4. Are there temperature / sampling settings that improve acceptance? Lower temperature → more predictable outputs → higher draft acceptance?

  5. Windows vs. Linux? Are there known issues with the DFlash CUDA kernels in the Windows pre-built binaries? Would a native Linux (WSL2) build be meaningfully faster?

  6. Has anyone consistently hit 200+ tok/s on a 5090? If so, please share your full startup command and llama.cpp build.


Thanks in advance — this model is clearly capable, just trying to squeeze every token out of it.

Same on my 5090:
Avg prefill: ~2300 tok/s .
Avg decode: ~65 tok/s.
Avg acceptance rate: 25%

Tested with configs using llama cpp (b10358):

[muse_glimmer]
model =./models/muse-glimmer-30B-kquant-dynamic.gguf
md=./models/dflash-kquant.gguf
ctx-size=131072
temp=1.0
top-p=0.95
top-k=64
device=CUDA0
spec-type=draft-dflash
spec-draft-device=CUDA0
spec-draft-n-max=15
spec-draft-n-min=2 
reasoning-preserve=1
Meta Inc. org

Hey folks, pls check https://huggingface.co/meta-models/Muse-Glimmer-30B/discussions/21. This might help?

Muse Glimmer 30B + DFlash Performance Report — RTX 5090 (Windows)

Date: 2026-08-12
Prepared for NVIDIA review


1. System Configuration

Component Value
GPU NVIDIA GeForce RTX 5090
VRAM 32 GB GDDR7
GPU Driver 591.86
CUDA (WSL) 13.1
OS Windows 11 (native, x86_64)
llama-server build b10354 (d2f83055d)
Compiler Clang 20.1.8 for Windows x86_64

2. Models

File Repo Size
muse-glimmer-30B-kquant-17gb.gguf meta-models/Muse-Glimmer-30B-GGUF ~16.8 GB
dflash-kquant.gguf meta-models/Muse-Glimmer-30B-GGUF ~1.63 GB
mmproj-kquant.gguf meta-models/Muse-Glimmer-30B-GGUF ~1.40 GB

3. Configurations Tested

Config A — Baseline, no DFlash, no flash attention

llama-server.exe
  --model  muse-glimmer-30B-kquant-17gb.gguf
  -ngl 99 -np 1 -c 8192
  --host 0.0.0.0 --port 8000

Config B — Baseline, no DFlash, flash attention ON

llama-server.exe
  --model  muse-glimmer-30B-kquant-17gb.gguf
  -ngl 99 -np 1 -c 8192
  --flash-attn on
  --host 0.0.0.0 --port 8000

Config C — DFlash ON, small context (Meta benchmark config)

llama-server.exe
  --model       muse-glimmer-30B-kquant-17gb.gguf
  --model-draft dflash-kquant.gguf
  -ngl 99 -ngld 99 -np 1 -c 8192
  --spec-type draft-dflash
  --spec-draft-n-max 15
  --flash-attn on
  --temp 0 --top-k 1 --jinja
  --host 0.0.0.0 --port 8000

Config D — DFlash ON, large context (agentic/Claude Code use)

llama-server.exe
  --model       muse-glimmer-30B-kquant-17gb.gguf
  --model-draft dflash-kquant.gguf
  --mmproj      mmproj-kquant.gguf
  -ngl 99 -ngld 99 -np 1 -c 131072
  --spec-type draft-dflash
  --spec-draft-n-max 15
  --flash-attn on
  --reasoning-preserve
  --host 0.0.0.0 --port 8000

4. Startup Log — DFlash Initialization

Observed on every DFlash run (confirms DFlash loaded correctly):

E llama_init_from_model: failed to initialize the context: dflash requires ctx_other
  to be set (this warning is normal during memory fitting)
W srv    load_model: [spec] failed to measure draft model memory: failed to create
  llama_context from model

I common_speculative_init_result: loading draft model 'dflash-kquant.gguf'
I srv    load_model: initializing, n_slots = 1, n_ctx_slot = 131072, kv_unified = 'false'
I common_speculative_impl_draft_dflash: adding speculative implementation 'draft-dflash'
I common_speculative_impl_draft_dflash: - n_max=15, n_min=0, p_min=0.00
I common_speculative_impl_draft_dflash: - block_size=16, mask_token_id=201818, n_extract=5
I common_speculative_impl_draft_dflash: requested draft size (n_max=16, n_min=0) exceeds
  the trained block size 16 -- clamping to 15
I srv  llama_server: model loaded
I srv  llama_server: listening on http://0.0.0.0:8000

Note: The ctx_other error on line 1 is expected during memory fitting — it does NOT prevent DFlash from loading.


5. Measured Results

All generation numbers are measured via the OpenAI-compatible /v1/chat/completions API.
Test prompt: "Write a complete Python implementation of a binary search tree with insert, delete, search, and in-order traversal. Include type hints and docstrings."

5.1 Baseline decode speed

Config Context Sampling Runs Avg tok/s Max tok/s
A — no DFlash, no FA 8192 greedy 5 77 78
B — no DFlash, FA ON 8192 greedy 5 55.5 55.9

Finding: --flash-attn on reduces baseline throughput by ~28% on this hardware/build.
Flash attention is required for DFlash block-parallel; without it, DFlash cannot be enabled.

5.2 DFlash — small context benchmark (Meta's published config)

Config C: c=8192, greedy, draft-dflash

Runs Avg tok/s Max tok/s Avg acceptance Mean accepted len
8 78 79 14.3% 3.09

Finding: DFlash IS active (confirmed by draft acceptance lines in server log),
but 14% acceptance at mean length 3.09 provides minimal speedup over the FA baseline of 55.5 tok/s.
Net effect: 55.5 → 78 = 1.4× speedup.

Server log confirmation:

I slot print_timing: draft acceptance = 0.14262 (347 accepted / 2433 generated), mean len = 3.12
I slot print_timing: draft acceptance = 0.14250 (345 accepted / 2421 generated), mean len = 3.09

5.3 DFlash — large context, real sampling (agentic use case)

Config D: c=131072, temp=1.0, draft-dflash, with ~80K token prefill (Claude Code session)

Run Context tokens Output tokens Acceptance rate Mean accepted len tok/s
1 79,762 821 30.5% (673/2205) 5.58 168
2 ~82K follow-up 1,268 9.5% (744/7860) 2.42 76
3 ~82K follow-up 93 14.0% (63/450) 3.10 98

Finding: Run 1 (fresh 80K-token context) achieves 168 tok/s — 3.0× over FA baseline.
This matches Meta's published 3.1× speedup claim.
Follow-up turns (runs 2–3) have lower acceptance, producing ~76–98 tok/s.

5.4 Prefill (prompt processing) rate

Observed across all configs:

Context range Prefill tok/s
1–10K tokens ~4,200
10–30K tokens ~4,000
30–65K tokens ~3,700
65–80K tokens ~2,800

6. Summary

Scenario tok/s vs. baseline
Raw baseline (no FA, no DFlash) 77
Flash attention ON, no DFlash 55.5 −28%
DFlash ON, small context, greedy (bench config) 78 +42% over FA baseline
DFlash ON, large context, fresh turn (agentic) 168 +3.0× over FA baseline
Meta published target (233 tok/s) ~4.2× over FA baseline

7. Key Observations

  1. DFlash is working. Block-parallel acceptance is confirmed via server logs. 3.0× speedup observed in the right conditions.

  2. Acceptance rate drives everything. DFlash at 30% acceptance (mean_len 5.58) gives 168 tok/s. At 14% acceptance (mean_len 3.09) it gives only 78 tok/s.

  3. Large context boosts acceptance. Fresh turns with ~80K token context achieve 30% acceptance. Short prompts or follow-up turns drop to 9–14%. DFlash appears to be optimized for long-context continuation — consistent with Meta's statement that "the DFlash head has been mostly optimized for agentic and coding flows."

  4. Flash attention hurts raw throughput. Without DFlash, --flash-attn on costs ~22 tok/s (77→55). This is likely a Windows Clang build issue — Linux builds typically see FA as neutral or faster.

  5. The gap to 233 tok/s. To close the gap from 168 to 233 tok/s, we need either higher acceptance rates (>30%) or the build optimizations in PR #26842 (referenced by Meta engineer ruanslv as unmerged but important). Another community user confirmed 238 tok/s after cherry-picking that PR.

  6. kv_unified = 'false' — the server log shows this value on every startup. It is unclear whether setting this to true would improve DFlash KV-sharing and boost acceptance rate. No llama-server flag to control it was found.


8. Open Questions for NVIDIA / Meta

  1. What kv_unified value does the internal benchmark use? The community build shows false; is true required for peak DFlash performance?

  2. What is the expected DFlash acceptance rate for the benchmark prompt at c=8192? We see 14%; the benchmark appears to need >30%.

  3. Is PR #26842 the primary path to closing the ~65 tok/s gap? If so, an official build with that patch would help the community reproduce the published numbers.

  4. Are there Windows-specific issues with the DFlash CUDA kernels in the Clang build? Flash attention overhead on Windows is significantly higher than Linux reports suggest.

Sign up or log in to comment