kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF

Model

> ### πŸ”§ Runtime: build the ROCmFPX fork below

4

32 commits

4 linked in READMEs

updated Aug 28, 2026

See the code
amd-strix-halo
conversational
dflash
endpoints_compatible
gfx1151
gguf
image-text-to-text
llama.cpp
multimodal
quantized
radeon-8060s
reasoning
rocm
rocmfp4
rocmfpx
ryzen-ai-max
ryzen-ai-max-395
speculative-decoding
strix-halo
tool-calling
vision

README

πŸ”§ Runtime: build the ROCmFPX fork below

Stock llama.cpp will not load this file. You need both the muse-glimmer architecture and the ROCmFP4 tensor types in one tree. Upstream charlie12345/ROCmFPX has the ROCmFP4 types but not muse-glimmer. Our fork has both:

kingjones30/ROCmFPX β€” a fork of charlie12345/ROCmFPX, branch main.

git clone https://github.com/kingjones30/ROCmFPX.git
cd ROCmFPX
cmake -B build -DGGML_HIP=ON -DGPU_TARGETS=gfx1151 -DGGML_NATIVE=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --target llama-server llama-quantize -j$(nproc)

Verified 2026-08-27 on gfx1151: clean clone β†’ 0 build errors β†’ llama-server loads a muse-glimmer ROCmFP4 GGUF from this family and generates coherent text.

Muse-Glimmer-30B β€” ROCmFP4 for AMD Strix Halo (gfx1151)

βœ… the complete muse-glimmer port β€” text graph, vision projector and chat parser β€” ships as a single applyable patch in this repo, alongside 4 ROCmFP4 ftypes, the DFlash drafter and the vision projector

muse-glimmer is not an upstream llama.cpp architecture. Running it end-to-end takes three independent pieces of work; all three are in patches/muse-glimmer-complete.patch (20 files, 81,968 bytes, git apply --check clean). Variant count verified against Hugging Face repository metadata for the public ROCmFP4 builds of this base model β€” file facts only, no third-party build was benchmarked here.

Six quantisations of Muse-Glimmer-30B β€” four ROCmFP4 and two 8-bit ROCmFPX β€” built for AMD Ryzen AI Max+ 395 / Radeon 8060S / gfx1151, bundled with the DFlash speculative drafter and vision projector. ROCmFP4 is a runtime tensor format that exists only in the ROCmFPX fork of llama.cpp; Muse Glimmer support exists only in current upstream β€” this build ports the model forward into the ROCmFPX base so the two can meet.

MetricResult
QuantizationROCmFP4 / ROCmFPX (ggml types 100–115), 6 variants
Model size13.80 – 27.23 GiB (6 quants)
Effective BPW4.25 – 8.39 (see table)
Tested hardwareAMD Ryzen AI Max+ 395 (Strix Halo), 128 GB unified
GPURadeon 8060S, gfx1151
ROCm version7.2.4
32K decode (FAST, real-world)~17-45 tok/s depending on workload; ~30 typical
Prompt processingnot separately instrumented β€” see Not yet measured
DFlash decode4.13 tokens accepted per target pass, n_max=15
Peak memory19.99 GiB resident (model + drafter + projector + 32K KV)
Context validated32768 only β€” see Not yet measured
Tool calling6/7 on a 7-case suite (parity with upstream)
Reasoningyes β€” reasoning_content / content split
Visionyes β€” verified on spatial ground truth, requires -fa off

Why this build?

  • 20.31 tok/s on the FAST variant vs 16.65 tok/s for Meta's fastest official GGUF (kquant-17gb) β€” same box, same flags, same drafter: 1.22Γ—
  • 13.80 GiB vs Meta's 15.61 GiB β€” 1.8 GiB smaller and faster
  • Four ftypes published so you can pick the size/speed/verbosity point you want
  • Text, vision and DFlash speculative decoding all work from one download
  • Chat-format parser ported, so no to=self<|message|> control tokens leak into output
  • Every published file validated before upload; nothing shipped unverified

Which file should I use?

Ryzen AI Max+ 395, ROCm 7.2.4, DFlash drafter at --spec-draft-n-max 15, -fa on, ctx 32768, batch 1, temperature 0. Warm medians of 9 generations; the first call after load is discarded.

BuildftypeSizeBPWTG 32KQuality
ROCmFP4-FAST10313.80 GiB4.2520.313/3
ROCmFP4-STRIX_LEAN10614.00 GiB4.3818.723/3
ROCmFP4-STRIX10514.17 GiB4.3617.243/3
ROCmFP4-BASE10016.87 GiB4.5015.903/3
Meta kquant-17gb (reference)β€”15.61 GiBβ€”16.653/3
Meta kquant-17gb on Vulkanβ€”15.61 GiBβ€”6.103/3

Why two different speed figures? The comparison table above is a controlled A/B: every build ran the same fixed prompt set, so the numbers are directly comparable to each other and to Meta's reference (that is where the 1.22x comes from). Real-world decode on the FAST build varies with workload by about 2.6x - measured on the live deployment at ~45 tok/s on code-transform/edit work, ~17 tok/s on freeform prose, and ~30 tok/s in typical mixed use. Quote the range, not a single number.

Start with FAST. BASE is both the slowest and the largest β€” it is published for completeness, not because anyone should choose it.

⚠ The faster files write shorter answers

Some of the speed comes from terser output, not only from faster decode. Median words per answer on identical prompts:

BuildMedian words
STRIX (105)377
STRIX_LEAN (106)306
BASE (100)301
FAST (103)259

The quality check is substring-based and cannot distinguish "more concise" from "less thorough." If answer depth matters more than throughput, prefer STRIX. This is a real trade, not a free win.

Across the whole family β€” all six model quants

⚠️ Decode on this model is workload-dominated, not variant-dominated. DFlash proposes long runs on repetitive and code-like text and very little on freeform prose, so a single tok/s figure is misleading β€” mean accepted length moves 2.5 β†’ 7.1 on the same binary and the same weights. Quote a range for this model, not a point.

Measured on one Ryzen AI MAX+ 395, median of 3, with the DFlash head (--spec-type draft-dflash --model-draft dflash-ROCmFP4-STRIX.gguf --spec-draft-ngl 99):

VariantftypeSizeprosecode-transformaccept len (code)
4-bit FAST10313.80 GiB15.0739.357.12
4-bit STRIX_LEAN10614.00 GiBβ€”β€”β€”
4-bit STRIX10514.17 GiB14.9637.556.80
4-bit BASE10016.87 GiBβ€”β€”β€”
8-bit plain11126.85 GiB11.31β€”2.65
8-bit AGENT11527.23 GiB11.27β€”2.51

Without a drafter the 8-bit builds measure 7.48 (111) and 7.22 (115) tok/s β€” medians of 3, raw runs 7.54 / 7.48 / 7.35 and 7.22 / 7.21 / 7.26.

β›” Serve it with the draft head. Without --model-draft the 8-bit build drops 11.62 β†’ 7.65 (βˆ’34%). The two 8-bit builds are within noise of each other: AGENT routing lifts draft acceptance on MTP models, and this model uses DFlash, so there is nothing for it to win here.

Quick start

hf download kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF --local-dir muse
llama-server \
  -m muse/muse-glimmer-30B-ROCmFP4-FAST.gguf \
  --mmproj muse/mmproj-kquant.gguf \
  --spec-type draft-dflash \
  --model-draft muse/dflash-kquant.gguf \
  --spec-draft-n-max 15 \
  --chat-template-kwargs '{"reasoning_strength":"medium"}' \
  -ngl 999 -fa off -dio --jinja \
  -c 32768 --host 127.0.0.1 --port 8080

Requires a llama.cpp built with ROCmFP4 support (ggml types 100–106). Stock llama.cpp rejects these tensor types.

Three flags that matter more than which file you pick

FlagWhy
--chat-template-kwargs '{"reasoning_strength":"..."}'Template defaults to high. At high this model spent an entire 1200-token budget deliberating on a real refactor task and returned no visible answer at all. medium answered in 38.1s, low in 32.6s.
-fa on (text) / -fa off (vision)-fa off costs +21% at ctx 32768 but is mandatory for images. Run separate endpoints if you serve both.
--spec-draft-n-max 15DFlash block size is 16; one slot holds the previously accepted token.

β›” --reasoning-budget does not work on this model. Values 256 and -1 produced byte-identical runs at temperature 0 β€” the flag is not enforced on peg-native format. Use reasoning_strength instead.

Verified hardware

HardwareGPUROCmStatusTG 32KNotes
Ryzen AI Max+ 395 (Strix Halo)Radeon 8060S / gfx11517.2.4βœ… Tested by KingJones~30 (17-45)128 GB unified
Any Vulkan backendβ€”β€”βŒ Known incompatibleβ€”rejects ggml type 101 at parse time
gfx1201 / RDNA4——❓ Untestedβ€”
NVIDIA / CUDAβ€”β€”βŒ Known incompatibleβ€”ROCmFP4 is a ROCm-only tensor format

Vulkan is impossible, not merely slow. The backend rejects these files at parse time:

gguf_init_from_reader: tensor 'output.weight' has invalid ggml type 101. should be in [0, 43)

Vulkan's type table ends at 43; ROCmFP4 types are 100–106. No flag changes this. For reference, Meta's k-quant does run on Vulkan and measured 6.10 tok/s versus 16.65 on ROCm on this box, so Vulkan is not a useful path for this model in any case.

Speculative decoding (DFlash)

Muse Glimmer has no MTP tensors β€” zero in both the base checkpoint and the quants. It speculates using DFlash against a separate 5-layer drafter, which is what Meta's own recipe prescribes.

MetricValue
Setting--spec-type draft-dflash --spec-draft-n-max 15
Tokens accepted per target pass4.13 (median, range 2.85–6.65)
Per-token acceptance~21%
Drafter memory1.52 GiB

⚠️ Per-token acceptance is a misleading statistic for a block drafter. DFlash proposes 15 tokens in one forward pass; ~21% acceptance means ~4.13 tokens land per target pass, which is healthy. Judge block drafters on tokens-per-pass.

n-gram speculation is not a substitute here. Measured on the same build: ngram-map-k reached 42.9% acceptance β€” double DFlash's β€” yet ran 45% slower on code-transform work (15.20 vs 27.49 tok/s), because it proposes far fewer tokens per pass.

A ROCmFP4 drafter is included but is not the default. It measured 1.008Γ— against Meta's k-quant drafter on a quiet box β€” inside noise, acceptance unchanged. The drafter is ~1.5 GiB of a ~17 GiB working set, so shrinking it 8.5% moves total memory traffic by well under 1%. Shipped because it is valid, not because it is faster.

Tool calling

7-case suite, run against this build and against Meta's k-quant on the upstream binary as a reference:

CaseThis buildUpstream reference
multi-arg (string/int/bool)βœ…βœ…
nested object argumentβœ…βœ…
enum constraintβœ…βœ…
correctly declines (no spurious call)βœ…βœ…
multi-turn tool-result follow-upβœ…βœ…
streaming tool callβœ…βœ…
two parallel calls in one turn❌❌
Total6/76/7

The parallel-call failure is the model's, not the quantisation's β€” Meta's own weights on upstream's own parser fail identically. Sequential agent loops are unaffected.

Raw example:

{"name": "book_flight",
 "arguments": {"passenger": {"name": "Alice Smith", "age": 34},
               "route": "LHR-JFK", "cabin": "business"}}

Agentic loop

A multi-step loop (list β†’ move β†’ observe β†’ finish) over a directory of loose files, 3 runs at temperature 0.7: 3/3 completed the task correctly, 0 cases of claiming an action without emitting a tool call.

Vision

The vision path needs stage 2 of the port below β€” it registers PROJECTOR_TYPE_MUSE_GLIMMER in clip/mtmd. A build carrying only the 9-file text-graph patch reports unknown projector type: muse-glimmer when a projector is passed.

⚠️ Minimum useful image size is 28Γ—28 px. The preprocessor snaps to patch 14 Γ— merge 2, so anything smaller collapses to a single merge token and carries no spatial signal. Feed 256Γ—256 or larger; llama-mtmd-cli behaves identically β€” this is preprocessing geometry, not the projector.

Works, and is verified for spatial correctness rather than plausible-sounding output: a four-quadrant colour image is scored on whether each colour lands in the right corner. A misapplied attention mask names colours confidently but places them wrongly, so this test distinguishes a working port from a fluent-but-broken one. 3/3.

Requires -fa off β€” ggml_flash_attn_ext aborts on Muse's per-layer sparse-window masks.

Quantization methodology

# 1. convert BF16 safetensors -> GGUF (upstream tree; only it has the muse-glimmer converter)
python convert_hf_to_gguf.py <MODEL_DIR> --outtype bf16 --outfile muse-glimmer-30B-BF16.gguf

# 2. quantize with the ROCmFPX build (only it has ggml types 100-106)
llama-quantize muse-glimmer-30B-BF16.gguf muse-glimmer-30B-ROCmFP4-FAST.gguf 103

Source: meta-models/Muse-Glimmer-30B BF16 safetensors, 1436 tensors β†’ 55.7 GB BF16 GGUF (731 text tensors) β†’ ROCmFP4.

The model was ported forward into the ROCmFPX base in three stages:

  1. Text graph, arch registration and converter. Three API gaps bridged: is_swa_impl β†’ swa_layers, n_layer() from method to field, and the NVFP4-only output-scale argument (null on the ROCmFP4 path).
  2. Vision tower β€” required teaching the older base's build_vit to accept per-layer attention masks at all; it previously took no mask parameter. Added as an overload so the ~32 other vision models calling it are untouched.
  3. Chat-format parser, so harmony-style channel output is parsed rather than leaking to=self<|message|> into content.

Files

Ten files, three distinct networks. llama.cpp loads them via --model, --model-draft and --mmproj β€” there is no merged single-file format.

Model weights β€” all six quants live in this repo

FileftypeSizeBytesBPW
muse-glimmer-30B-ROCmFP4-FAST.gguf10313.80 GiB14,815,844,9284.25
muse-glimmer-30B-ROCmFP4-STRIX_LEAN.gguf10614.00 GiB15,031,512,6404.38
muse-glimmer-30B-ROCmFP4-STRIX.gguf10514.17 GiB15,210,123,0084.36
muse-glimmer-30B-ROCmFP4-BASE.gguf10016.87 GiB18,117,264,1924.50
muse-glimmer-30B-Q8_0_ROCMFPX.gguf11126.85 GiB28,826,594,6888.28
muse-glimmer-30B-Q8_0_ROCMFPX_AGENT.gguf11527.23 GiB29,235,965,3128.39

Drafter, projector and patches

FileSizeRole
dflash-kquant.gguf1.52 GiBDFlash drafter (Muse's, unmodified) β€” use this
dflash-ROCmFP4-STRIX.gguf1.39 GiBROCmFP4 drafter β€” works, 1.008Γ— (a wash)
mmproj-kquant.gguf1.30 GiBvision projector
patches/muse-glimmer-complete.patch81,968 B20-file port β€” text graph + vision + chat parser
patches/rocmfpx-3edc3d3-add-muse-glimmer.patch44,062 B9-file text-graph-only port

Total 117.12 GiB. Download a single quant rather than the whole repo:

hf download kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF \
  --include "muse-glimmer-30B-ROCmFP4-FAST.gguf" --local-dir muse

⚠️ hf download silently ignores --include when given more than one pattern β€” issue one call per file.

Not yet measured

Listed explicitly so nobody mistakes absence for a pass. These are genuine gaps, not claims:

TestStatus
Context scaling (2K / 8K / 16K / 64K / 128K)❓ only 32768 measured
Prompt-processing tok/s, isolated❓ not separately instrumented
Sustained generation (1K / 4K tokens)❓ not measured
Perplexity / KL divergence vs BF16❓ not measured
MMLU-Pro, GPQA, GSM8K, HumanEval+, MBPP+❓ not run
Long-context needle retrieval❓ not run
DFlash n-max sweep (2 / 4 / 8 / 24)❓ only n=15 measured
5-run statistics with std dev⚠️ 9 samples per arm, median reported; std dev not published
Independent reproduction❓ none yet

Measurement conditions: the tok/s figures were taken on a machine that also served other traffic during the run. The ordering across builds is wide enough to be reliable; the exact ratios are not trustworthy to three significant figures. A re-run on a quiesced box is planned.

Quality caveat: the 3/3 figure is a smoke check over factual recall, arithmetic and instruction-following, scored by substring match. It is a regression guard against a broken quantisation, not a benchmark suite, and it does not measure answer depth. No claim of "no quality loss" is made β€” that would require the perplexity and standardized evaluations listed above.

Independent results

None yet. If you run this build, please open a discussion with: hardware, GPU, OS, ROCm version, runtime commit, exact command, context, prompt-processing tok/s, generation tok/s and peak RAM. Independent reproductions will be listed separately from author benchmarks and carry more weight.

Known issues

  1. Vulkan/CUDA/CPU cannot load these files β€” ROCmFP4 is a ROCm-only tensor format.
  2. Vision requires -fa off, costing ~21% on text at 32K context.
  3. Parallel tool calls fail β€” model-level, reproduced identically on Meta's own weights.
  4. Small max_tokens returns empty content β€” the budget goes to reasoning_content. Allow several hundred tokens.
  5. --reasoning-budget is not enforced on this model; use reasoning_strength.

License and attribution

Base model, DFlash drafter and vision projector are Meta's, under the base model's licence. ROCmFP4 quantisation types are from the ROCmFPX fork of llama.cpp. This repository contains the quantised weights and the measurements above.

Other public builds of this model

Compiled from Hugging Face repository metadata β€” file sizes, shipped files, quant variant as named by each repo. No third-party build was run or benchmarked here, so this table makes no speed or quality claim about any of them. It is here so you can see the size and format options at a glance and pick what fits your hardware.

RepositoryLargest model fileVariantShipsDownloadsLikes
RadixArk/Muse-Glimmer-NVFP44.00 GiBNVFP4safetensors405
kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF (this repo)16.87 GiBSTRIX4 model files, drafter, vision01
Preyazz/Muse-Glimmer-30B-NVFP417.37 GiBNVFP4safetensors05
cloudnathan5/Muse-Glimmer-30B-NVFP418.63 GiBNVFP4safetensors02
RedHatAI/Muse-Glimmer-30B-NVFP418.63 GiBNVFP4safetensors07
vmlinux/Muse-Glimmer-30B-ROCmFPX-GGUF26.77 GiBROCmFPX3 model files, drafter, vision013

Base model: meta-models/Muse-Glimmer-30B. Generated from Hub metadata; download counts move over time.

Acknowledgements

This build would not exist without the work below. Please star and follow these projects β€” the quantisation format used here is their engineering, not mine.

ROCmFPX β€” maintained by charlie12345 / caf The ROCmFP4 / ROCmFPX tensor formats (ggml types 100–106) exist only in this fork. Every ROCmFP4 file in this repository was produced with its llama-quantize, and runs on its runtime. The fork also credits collaborators ciru-ai, Tom Turney, PlunderStruck and Aydan S., and acknowledges AMD for hardware support. Licensed MIT, based on upstream llama.cpp.

llama.cpp β€” ggml-org and contributors The inference engine, GGUF format and conversion tooling everything here is built on.

AMD ROCm The compute platform these builds target β€” ROCm 7.2.4 on gfx1151 / Radeon 8060S.

Base model authors β€” see base_model in the metadata above; all model weights, licences and capabilities are theirs. This repository contributes quantisation and measurement only.

If you use these files, please credit ROCmFPX alongside this repository.

🩹 The muse-glimmer architecture port β€” complete, three stages

patches/muse-glimmer-complete.patch β€” 81,968 bytes, 20 files, git apply --check clean against charlie12345/ROCmFPX.

git clone https://github.com/charlie12345/ROCmFPX.git && cd ROCmFPX
git apply --check ../patches/muse-glimmer-complete.patch && \
git apply           ../patches/muse-glimmer-complete.patch
cmake -S . -B build-muse -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1151 \
      -DLLAMA_BUILD_WEBUI=OFF -DCMAKE_BUILD_TYPE=Release
cmake --build build-muse --target llama-server --target llama-quantize \
      --target llama-mtmd-cli -j 6

muse-glimmer is not an upstream architecture. Running it end-to-end takes three independent pieces of work, and all three are in this patch.

Stage 1 β€” text graph and conversion

FileRole
src/llama-arch.{h,cpp}LLM_ARCH_MUSE_GLIMMER + tensor-name table
src/llama-model.cppmodel factory case
src/models/muse-glimmer.cppthe graph itself
src/models/models.hdeclaration
gguf-py/gguf/{constants,tensor_mapping}.pyGGUF constants + tensor map
conversion/{__init__,muse_glimmer}.pysafetensors β†’ GGUF converter

⚠️ convert_hf_to_gguf.py does not know MuseGlimmer. The converter is conversion/muse_glimmer.py, driven through conversion.get_model_class.

Stage 2 β€” vision projector (clip / mtmd)

FileRole
tools/mtmd/models/muse-glimmer.cppprojector graph
tools/mtmd/clip-impl.hPROJECTOR_TYPE_MUSE_GLIMMER
tools/mtmd/clip-model.hhparams + LANCZOS enum
tools/mtmd/clip-graph.hbuild_vit_opts + 7-arg overload
tools/mtmd/clip.cpp, models/models.h, CMakeLists.txtwiring
tools/mtmd/mtmd-image.{cpp,h}preprocessor; LANCZOS β†’ bicubic_pillow fallback
tools/mtmd/mtmd.cpp<|image_start|> / <|image_end|> markers
gguf-py/gguf/tensor_mapping.pymodel.vision_tower.layers.{bid}.attn.{q,k,v,proj}, norm1/2, mlp.fc1/2, ln_post
gguf-py/gguf/constants.pyVisionProjectorType.MUSE_GLIMMER

This stage is what makes --mmproj work. This repo ships mmproj-kquant.gguf (1.30 GiB); a BF16 projector built through this stage β€” mmproj-muse-glimmer-30B-BF16.gguf, 3,849,174,048 bytes, 809 tensors, clip.projector_type = muse-glimmer, merge 2, patch 14, image_size 896 β€” is published alongside the 8-bit builds in Muse-Glimmer-30B-ROCmFPX-Q8_0-GGUF.

Stage 3 β€” chat parser

common/chat.cpp β€” common_chat_params_init_muse_glimmer, PEG_NATIVE.

Without it the model's to=self<|message|> control sequence is emitted into content. With it, content is clean: "The capital of Japan is Tokyo."

Build note

cmake's source GLOB is configure-time. After the patch adds src/models/muse-glimmer.cpp you must re-run the cmake -S . -B build-muse configure step, not just --build. -DLLAMA_BUILD_WEBUI=OFF avoids a node/npm requirement.

Applying to a different base commit

The patch header names commit 3edc3d3, and it applies cleanly to later revisions (verified on b41ce12). On trees where cohere2moe and bailing_hybrid model sources are absent, their factory cases in llama-model.cpp reference symbols that do not exist in that tree β€” build those two out, or apply on 3edc3d3 where their .cpp files are present. The muse-glimmer factory case and graph are independent of both.

Contributors

kingjones777

32 commits

kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF

Model

> ### πŸ”§ Runtime: build the ROCmFPX fork below

4

32 commits

4 linked in READMEs

updated Aug 28, 2026

See the code
amd-strix-halo
conversational
dflash
endpoints_compatible
gfx1151
gguf
image-text-to-text
llama.cpp
multimodal
quantized
radeon-8060s
reasoning
rocm
rocmfp4
rocmfpx
ryzen-ai-max
ryzen-ai-max-395
speculative-decoding
strix-halo
tool-calling
vision

README

πŸ”§ Runtime: build the ROCmFPX fork below

Stock llama.cpp will not load this file. You need both the muse-glimmer architecture and the ROCmFP4 tensor types in one tree. Upstream charlie12345/ROCmFPX has the ROCmFP4 types but not muse-glimmer. Our fork has both:

kingjones30/ROCmFPX β€” a fork of charlie12345/ROCmFPX, branch main.

git clone https://github.com/kingjones30/ROCmFPX.git
cd ROCmFPX
cmake -B build -DGGML_HIP=ON -DGPU_TARGETS=gfx1151 -DGGML_NATIVE=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --target llama-server llama-quantize -j$(nproc)

Verified 2026-08-27 on gfx1151: clean clone β†’ 0 build errors β†’ llama-server loads a muse-glimmer ROCmFP4 GGUF from this family and generates coherent text.

Muse-Glimmer-30B β€” ROCmFP4 for AMD Strix Halo (gfx1151)

βœ… the complete muse-glimmer port β€” text graph, vision projector and chat parser β€” ships as a single applyable patch in this repo, alongside 4 ROCmFP4 ftypes, the DFlash drafter and the vision projector

muse-glimmer is not an upstream llama.cpp architecture. Running it end-to-end takes three independent pieces of work; all three are in patches/muse-glimmer-complete.patch (20 files, 81,968 bytes, git apply --check clean). Variant count verified against Hugging Face repository metadata for the public ROCmFP4 builds of this base model β€” file facts only, no third-party build was benchmarked here.

Six quantisations of Muse-Glimmer-30B β€” four ROCmFP4 and two 8-bit ROCmFPX β€” built for AMD Ryzen AI Max+ 395 / Radeon 8060S / gfx1151, bundled with the DFlash speculative drafter and vision projector. ROCmFP4 is a runtime tensor format that exists only in the ROCmFPX fork of llama.cpp; Muse Glimmer support exists only in current upstream β€” this build ports the model forward into the ROCmFPX base so the two can meet.

MetricResult
QuantizationROCmFP4 / ROCmFPX (ggml types 100–115), 6 variants
Model size13.80 – 27.23 GiB (6 quants)
Effective BPW4.25 – 8.39 (see table)
Tested hardwareAMD Ryzen AI Max+ 395 (Strix Halo), 128 GB unified
GPURadeon 8060S, gfx1151
ROCm version7.2.4
32K decode (FAST, real-world)~17-45 tok/s depending on workload; ~30 typical
Prompt processingnot separately instrumented β€” see Not yet measured
DFlash decode4.13 tokens accepted per target pass, n_max=15
Peak memory19.99 GiB resident (model + drafter + projector + 32K KV)
Context validated32768 only β€” see Not yet measured
Tool calling6/7 on a 7-case suite (parity with upstream)
Reasoningyes β€” reasoning_content / content split
Visionyes β€” verified on spatial ground truth, requires -fa off

Why this build?

  • 20.31 tok/s on the FAST variant vs 16.65 tok/s for Meta's fastest official GGUF (kquant-17gb) β€” same box, same flags, same drafter: 1.22Γ—
  • 13.80 GiB vs Meta's 15.61 GiB β€” 1.8 GiB smaller and faster
  • Four ftypes published so you can pick the size/speed/verbosity point you want
  • Text, vision and DFlash speculative decoding all work from one download
  • Chat-format parser ported, so no to=self<|message|> control tokens leak into output
  • Every published file validated before upload; nothing shipped unverified

Which file should I use?

Ryzen AI Max+ 395, ROCm 7.2.4, DFlash drafter at --spec-draft-n-max 15, -fa on, ctx 32768, batch 1, temperature 0. Warm medians of 9 generations; the first call after load is discarded.

BuildftypeSizeBPWTG 32KQuality
ROCmFP4-FAST10313.80 GiB4.2520.313/3
ROCmFP4-STRIX_LEAN10614.00 GiB4.3818.723/3
ROCmFP4-STRIX10514.17 GiB4.3617.243/3
ROCmFP4-BASE10016.87 GiB4.5015.903/3
Meta kquant-17gb (reference)β€”15.61 GiBβ€”16.653/3
Meta kquant-17gb on Vulkanβ€”15.61 GiBβ€”6.103/3

Why two different speed figures? The comparison table above is a controlled A/B: every build ran the same fixed prompt set, so the numbers are directly comparable to each other and to Meta's reference (that is where the 1.22x comes from). Real-world decode on the FAST build varies with workload by about 2.6x - measured on the live deployment at ~45 tok/s on code-transform/edit work, ~17 tok/s on freeform prose, and ~30 tok/s in typical mixed use. Quote the range, not a single number.

Start with FAST. BASE is both the slowest and the largest β€” it is published for completeness, not because anyone should choose it.

⚠ The faster files write shorter answers

Some of the speed comes from terser output, not only from faster decode. Median words per answer on identical prompts:

BuildMedian words
STRIX (105)377
STRIX_LEAN (106)306
BASE (100)301
FAST (103)259

The quality check is substring-based and cannot distinguish "more concise" from "less thorough." If answer depth matters more than throughput, prefer STRIX. This is a real trade, not a free win.

Across the whole family β€” all six model quants

⚠️ Decode on this model is workload-dominated, not variant-dominated. DFlash proposes long runs on repetitive and code-like text and very little on freeform prose, so a single tok/s figure is misleading β€” mean accepted length moves 2.5 β†’ 7.1 on the same binary and the same weights. Quote a range for this model, not a point.

Measured on one Ryzen AI MAX+ 395, median of 3, with the DFlash head (--spec-type draft-dflash --model-draft dflash-ROCmFP4-STRIX.gguf --spec-draft-ngl 99):

VariantftypeSizeprosecode-transformaccept len (code)
4-bit FAST10313.80 GiB15.0739.357.12
4-bit STRIX_LEAN10614.00 GiBβ€”β€”β€”
4-bit STRIX10514.17 GiB14.9637.556.80
4-bit BASE10016.87 GiBβ€”β€”β€”
8-bit plain11126.85 GiB11.31β€”2.65
8-bit AGENT11527.23 GiB11.27β€”2.51

Without a drafter the 8-bit builds measure 7.48 (111) and 7.22 (115) tok/s β€” medians of 3, raw runs 7.54 / 7.48 / 7.35 and 7.22 / 7.21 / 7.26.

β›” Serve it with the draft head. Without --model-draft the 8-bit build drops 11.62 β†’ 7.65 (βˆ’34%). The two 8-bit builds are within noise of each other: AGENT routing lifts draft acceptance on MTP models, and this model uses DFlash, so there is nothing for it to win here.

Quick start

hf download kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF --local-dir muse
llama-server \
  -m muse/muse-glimmer-30B-ROCmFP4-FAST.gguf \
  --mmproj muse/mmproj-kquant.gguf \
  --spec-type draft-dflash \
  --model-draft muse/dflash-kquant.gguf \
  --spec-draft-n-max 15 \
  --chat-template-kwargs '{"reasoning_strength":"medium"}' \
  -ngl 999 -fa off -dio --jinja \
  -c 32768 --host 127.0.0.1 --port 8080

Requires a llama.cpp built with ROCmFP4 support (ggml types 100–106). Stock llama.cpp rejects these tensor types.

Three flags that matter more than which file you pick

FlagWhy
--chat-template-kwargs '{"reasoning_strength":"..."}'Template defaults to high. At high this model spent an entire 1200-token budget deliberating on a real refactor task and returned no visible answer at all. medium answered in 38.1s, low in 32.6s.
-fa on (text) / -fa off (vision)-fa off costs +21% at ctx 32768 but is mandatory for images. Run separate endpoints if you serve both.
--spec-draft-n-max 15DFlash block size is 16; one slot holds the previously accepted token.

β›” --reasoning-budget does not work on this model. Values 256 and -1 produced byte-identical runs at temperature 0 β€” the flag is not enforced on peg-native format. Use reasoning_strength instead.

Verified hardware

HardwareGPUROCmStatusTG 32KNotes
Ryzen AI Max+ 395 (Strix Halo)Radeon 8060S / gfx11517.2.4βœ… Tested by KingJones~30 (17-45)128 GB unified
Any Vulkan backendβ€”β€”βŒ Known incompatibleβ€”rejects ggml type 101 at parse time
gfx1201 / RDNA4——❓ Untestedβ€”
NVIDIA / CUDAβ€”β€”βŒ Known incompatibleβ€”ROCmFP4 is a ROCm-only tensor format

Vulkan is impossible, not merely slow. The backend rejects these files at parse time:

gguf_init_from_reader: tensor 'output.weight' has invalid ggml type 101. should be in [0, 43)

Vulkan's type table ends at 43; ROCmFP4 types are 100–106. No flag changes this. For reference, Meta's k-quant does run on Vulkan and measured 6.10 tok/s versus 16.65 on ROCm on this box, so Vulkan is not a useful path for this model in any case.

Speculative decoding (DFlash)

Muse Glimmer has no MTP tensors β€” zero in both the base checkpoint and the quants. It speculates using DFlash against a separate 5-layer drafter, which is what Meta's own recipe prescribes.

MetricValue
Setting--spec-type draft-dflash --spec-draft-n-max 15
Tokens accepted per target pass4.13 (median, range 2.85–6.65)
Per-token acceptance~21%
Drafter memory1.52 GiB

⚠️ Per-token acceptance is a misleading statistic for a block drafter. DFlash proposes 15 tokens in one forward pass; ~21% acceptance means ~4.13 tokens land per target pass, which is healthy. Judge block drafters on tokens-per-pass.

n-gram speculation is not a substitute here. Measured on the same build: ngram-map-k reached 42.9% acceptance β€” double DFlash's β€” yet ran 45% slower on code-transform work (15.20 vs 27.49 tok/s), because it proposes far fewer tokens per pass.

A ROCmFP4 drafter is included but is not the default. It measured 1.008Γ— against Meta's k-quant drafter on a quiet box β€” inside noise, acceptance unchanged. The drafter is ~1.5 GiB of a ~17 GiB working set, so shrinking it 8.5% moves total memory traffic by well under 1%. Shipped because it is valid, not because it is faster.

Tool calling

7-case suite, run against this build and against Meta's k-quant on the upstream binary as a reference:

CaseThis buildUpstream reference
multi-arg (string/int/bool)βœ…βœ…
nested object argumentβœ…βœ…
enum constraintβœ…βœ…
correctly declines (no spurious call)βœ…βœ…
multi-turn tool-result follow-upβœ…βœ…
streaming tool callβœ…βœ…
two parallel calls in one turn❌❌
Total6/76/7

The parallel-call failure is the model's, not the quantisation's β€” Meta's own weights on upstream's own parser fail identically. Sequential agent loops are unaffected.

Raw example:

{"name": "book_flight",
 "arguments": {"passenger": {"name": "Alice Smith", "age": 34},
               "route": "LHR-JFK", "cabin": "business"}}

Agentic loop

A multi-step loop (list β†’ move β†’ observe β†’ finish) over a directory of loose files, 3 runs at temperature 0.7: 3/3 completed the task correctly, 0 cases of claiming an action without emitting a tool call.

Vision

The vision path needs stage 2 of the port below β€” it registers PROJECTOR_TYPE_MUSE_GLIMMER in clip/mtmd. A build carrying only the 9-file text-graph patch reports unknown projector type: muse-glimmer when a projector is passed.

⚠️ Minimum useful image size is 28Γ—28 px. The preprocessor snaps to patch 14 Γ— merge 2, so anything smaller collapses to a single merge token and carries no spatial signal. Feed 256Γ—256 or larger; llama-mtmd-cli behaves identically β€” this is preprocessing geometry, not the projector.

Works, and is verified for spatial correctness rather than plausible-sounding output: a four-quadrant colour image is scored on whether each colour lands in the right corner. A misapplied attention mask names colours confidently but places them wrongly, so this test distinguishes a working port from a fluent-but-broken one. 3/3.

Requires -fa off β€” ggml_flash_attn_ext aborts on Muse's per-layer sparse-window masks.

Quantization methodology

# 1. convert BF16 safetensors -> GGUF (upstream tree; only it has the muse-glimmer converter)
python convert_hf_to_gguf.py <MODEL_DIR> --outtype bf16 --outfile muse-glimmer-30B-BF16.gguf

# 2. quantize with the ROCmFPX build (only it has ggml types 100-106)
llama-quantize muse-glimmer-30B-BF16.gguf muse-glimmer-30B-ROCmFP4-FAST.gguf 103

Source: meta-models/Muse-Glimmer-30B BF16 safetensors, 1436 tensors β†’ 55.7 GB BF16 GGUF (731 text tensors) β†’ ROCmFP4.

The model was ported forward into the ROCmFPX base in three stages:

  1. Text graph, arch registration and converter. Three API gaps bridged: is_swa_impl β†’ swa_layers, n_layer() from method to field, and the NVFP4-only output-scale argument (null on the ROCmFP4 path).
  2. Vision tower β€” required teaching the older base's build_vit to accept per-layer attention masks at all; it previously took no mask parameter. Added as an overload so the ~32 other vision models calling it are untouched.
  3. Chat-format parser, so harmony-style channel output is parsed rather than leaking to=self<|message|> into content.

Files

Ten files, three distinct networks. llama.cpp loads them via --model, --model-draft and --mmproj β€” there is no merged single-file format.

Model weights β€” all six quants live in this repo

FileftypeSizeBytesBPW
muse-glimmer-30B-ROCmFP4-FAST.gguf10313.80 GiB14,815,844,9284.25
muse-glimmer-30B-ROCmFP4-STRIX_LEAN.gguf10614.00 GiB15,031,512,6404.38
muse-glimmer-30B-ROCmFP4-STRIX.gguf10514.17 GiB15,210,123,0084.36
muse-glimmer-30B-ROCmFP4-BASE.gguf10016.87 GiB18,117,264,1924.50
muse-glimmer-30B-Q8_0_ROCMFPX.gguf11126.85 GiB28,826,594,6888.28
muse-glimmer-30B-Q8_0_ROCMFPX_AGENT.gguf11527.23 GiB29,235,965,3128.39

Drafter, projector and patches

FileSizeRole
dflash-kquant.gguf1.52 GiBDFlash drafter (Muse's, unmodified) β€” use this
dflash-ROCmFP4-STRIX.gguf1.39 GiBROCmFP4 drafter β€” works, 1.008Γ— (a wash)
mmproj-kquant.gguf1.30 GiBvision projector
patches/muse-glimmer-complete.patch81,968 B20-file port β€” text graph + vision + chat parser
patches/rocmfpx-3edc3d3-add-muse-glimmer.patch44,062 B9-file text-graph-only port

Total 117.12 GiB. Download a single quant rather than the whole repo:

hf download kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF \
  --include "muse-glimmer-30B-ROCmFP4-FAST.gguf" --local-dir muse

⚠️ hf download silently ignores --include when given more than one pattern β€” issue one call per file.

Not yet measured

Listed explicitly so nobody mistakes absence for a pass. These are genuine gaps, not claims:

TestStatus
Context scaling (2K / 8K / 16K / 64K / 128K)❓ only 32768 measured
Prompt-processing tok/s, isolated❓ not separately instrumented
Sustained generation (1K / 4K tokens)❓ not measured
Perplexity / KL divergence vs BF16❓ not measured
MMLU-Pro, GPQA, GSM8K, HumanEval+, MBPP+❓ not run
Long-context needle retrieval❓ not run
DFlash n-max sweep (2 / 4 / 8 / 24)❓ only n=15 measured
5-run statistics with std dev⚠️ 9 samples per arm, median reported; std dev not published
Independent reproduction❓ none yet

Measurement conditions: the tok/s figures were taken on a machine that also served other traffic during the run. The ordering across builds is wide enough to be reliable; the exact ratios are not trustworthy to three significant figures. A re-run on a quiesced box is planned.

Quality caveat: the 3/3 figure is a smoke check over factual recall, arithmetic and instruction-following, scored by substring match. It is a regression guard against a broken quantisation, not a benchmark suite, and it does not measure answer depth. No claim of "no quality loss" is made β€” that would require the perplexity and standardized evaluations listed above.

Independent results

None yet. If you run this build, please open a discussion with: hardware, GPU, OS, ROCm version, runtime commit, exact command, context, prompt-processing tok/s, generation tok/s and peak RAM. Independent reproductions will be listed separately from author benchmarks and carry more weight.

Known issues

  1. Vulkan/CUDA/CPU cannot load these files β€” ROCmFP4 is a ROCm-only tensor format.
  2. Vision requires -fa off, costing ~21% on text at 32K context.
  3. Parallel tool calls fail β€” model-level, reproduced identically on Meta's own weights.
  4. Small max_tokens returns empty content β€” the budget goes to reasoning_content. Allow several hundred tokens.
  5. --reasoning-budget is not enforced on this model; use reasoning_strength.

License and attribution

Base model, DFlash drafter and vision projector are Meta's, under the base model's licence. ROCmFP4 quantisation types are from the ROCmFPX fork of llama.cpp. This repository contains the quantised weights and the measurements above.

Other public builds of this model

Compiled from Hugging Face repository metadata β€” file sizes, shipped files, quant variant as named by each repo. No third-party build was run or benchmarked here, so this table makes no speed or quality claim about any of them. It is here so you can see the size and format options at a glance and pick what fits your hardware.

RepositoryLargest model fileVariantShipsDownloadsLikes
RadixArk/Muse-Glimmer-NVFP44.00 GiBNVFP4safetensors405
kingjones777/Muse-Glimmer-30B-ROCmFP4-Strix-Halo-DFlash-GGUF (this repo)16.87 GiBSTRIX4 model files, drafter, vision01
Preyazz/Muse-Glimmer-30B-NVFP417.37 GiBNVFP4safetensors05
cloudnathan5/Muse-Glimmer-30B-NVFP418.63 GiBNVFP4safetensors02
RedHatAI/Muse-Glimmer-30B-NVFP418.63 GiBNVFP4safetensors07
vmlinux/Muse-Glimmer-30B-ROCmFPX-GGUF26.77 GiBROCmFPX3 model files, drafter, vision013

Base model: meta-models/Muse-Glimmer-30B. Generated from Hub metadata; download counts move over time.

Acknowledgements

This build would not exist without the work below. Please star and follow these projects β€” the quantisation format used here is their engineering, not mine.

ROCmFPX β€” maintained by charlie12345 / caf The ROCmFP4 / ROCmFPX tensor formats (ggml types 100–106) exist only in this fork. Every ROCmFP4 file in this repository was produced with its llama-quantize, and runs on its runtime. The fork also credits collaborators ciru-ai, Tom Turney, PlunderStruck and Aydan S., and acknowledges AMD for hardware support. Licensed MIT, based on upstream llama.cpp.

llama.cpp β€” ggml-org and contributors The inference engine, GGUF format and conversion tooling everything here is built on.

AMD ROCm The compute platform these builds target β€” ROCm 7.2.4 on gfx1151 / Radeon 8060S.

Base model authors β€” see base_model in the metadata above; all model weights, licences and capabilities are theirs. This repository contributes quantisation and measurement only.

If you use these files, please credit ROCmFPX alongside this repository.

🩹 The muse-glimmer architecture port β€” complete, three stages

patches/muse-glimmer-complete.patch β€” 81,968 bytes, 20 files, git apply --check clean against charlie12345/ROCmFPX.

git clone https://github.com/charlie12345/ROCmFPX.git && cd ROCmFPX
git apply --check ../patches/muse-glimmer-complete.patch && \
git apply           ../patches/muse-glimmer-complete.patch
cmake -S . -B build-muse -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1151 \
      -DLLAMA_BUILD_WEBUI=OFF -DCMAKE_BUILD_TYPE=Release
cmake --build build-muse --target llama-server --target llama-quantize \
      --target llama-mtmd-cli -j 6

muse-glimmer is not an upstream architecture. Running it end-to-end takes three independent pieces of work, and all three are in this patch.

Stage 1 β€” text graph and conversion

FileRole
src/llama-arch.{h,cpp}LLM_ARCH_MUSE_GLIMMER + tensor-name table
src/llama-model.cppmodel factory case
src/models/muse-glimmer.cppthe graph itself
src/models/models.hdeclaration
gguf-py/gguf/{constants,tensor_mapping}.pyGGUF constants + tensor map
conversion/{__init__,muse_glimmer}.pysafetensors β†’ GGUF converter

⚠️ convert_hf_to_gguf.py does not know MuseGlimmer. The converter is conversion/muse_glimmer.py, driven through conversion.get_model_class.

Stage 2 β€” vision projector (clip / mtmd)

FileRole
tools/mtmd/models/muse-glimmer.cppprojector graph
tools/mtmd/clip-impl.hPROJECTOR_TYPE_MUSE_GLIMMER
tools/mtmd/clip-model.hhparams + LANCZOS enum
tools/mtmd/clip-graph.hbuild_vit_opts + 7-arg overload
tools/mtmd/clip.cpp, models/models.h, CMakeLists.txtwiring
tools/mtmd/mtmd-image.{cpp,h}preprocessor; LANCZOS β†’ bicubic_pillow fallback
tools/mtmd/mtmd.cpp<|image_start|> / <|image_end|> markers
gguf-py/gguf/tensor_mapping.pymodel.vision_tower.layers.{bid}.attn.{q,k,v,proj}, norm1/2, mlp.fc1/2, ln_post
gguf-py/gguf/constants.pyVisionProjectorType.MUSE_GLIMMER

This stage is what makes --mmproj work. This repo ships mmproj-kquant.gguf (1.30 GiB); a BF16 projector built through this stage β€” mmproj-muse-glimmer-30B-BF16.gguf, 3,849,174,048 bytes, 809 tensors, clip.projector_type = muse-glimmer, merge 2, patch 14, image_size 896 β€” is published alongside the 8-bit builds in Muse-Glimmer-30B-ROCmFPX-Q8_0-GGUF.

Stage 3 β€” chat parser

common/chat.cpp β€” common_chat_params_init_muse_glimmer, PEG_NATIVE.

Without it the model's to=self<|message|> control sequence is emitted into content. With it, content is clean: "The capital of Japan is Tokyo."

Build note

cmake's source GLOB is configure-time. After the patch adds src/models/muse-glimmer.cpp you must re-run the cmake -S . -B build-muse configure step, not just --build. -DLLAMA_BUILD_WEBUI=OFF avoids a node/npm requirement.

Applying to a different base commit

The patch header names commit 3edc3d3, and it applies cleanly to later revisions (verified on b41ce12). On trees where cohere2moe and bailing_hybrid model sources are absent, their factory cases in llama-model.cpp reference symbols that do not exist in that tree β€” build those two out, or apply on 3edc3d3 where their .cpp files are present. The muse-glimmer factory case and graph are independent of both.

Contributors

kingjones777

32 commits