Instructions to use dudeman2512/Muse-Glimmer-30B-NVFP4 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use dudeman2512/Muse-Glimmer-30B-NVFP4 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="dudeman2512/Muse-Glimmer-30B-NVFP4") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("dudeman2512/Muse-Glimmer-30B-NVFP4") model = AutoModelForMultimodalLM.from_pretrained("dudeman2512/Muse-Glimmer-30B-NVFP4", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use dudeman2512/Muse-Glimmer-30B-NVFP4 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "dudeman2512/Muse-Glimmer-30B-NVFP4" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dudeman2512/Muse-Glimmer-30B-NVFP4", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/dudeman2512/Muse-Glimmer-30B-NVFP4
- SGLang
How to use dudeman2512/Muse-Glimmer-30B-NVFP4 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "dudeman2512/Muse-Glimmer-30B-NVFP4" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dudeman2512/Muse-Glimmer-30B-NVFP4", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "dudeman2512/Muse-Glimmer-30B-NVFP4" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dudeman2512/Muse-Glimmer-30B-NVFP4", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use dudeman2512/Muse-Glimmer-30B-NVFP4 with Docker Model Runner:
docker model run hf.co/dudeman2512/Muse-Glimmer-30B-NVFP4
Muse-Glimmer-30B — NVFP4 (compressed-tensors)
A 4-bit NVFP4 weight-only quantization of meta-models/Muse-Glimmer-30B,
in compressed-tensors / nvfp4-pack-quantized format. 59.6 GB → 22 GB, which fits a
single 32 GB consumer card (RTX 5090, sm_120) with room for full 131K context.
What is quantized
| Component | Precision |
|---|---|
LM attention q/k/v/o/gate_proj (52 layers) |
NVFP4 (E2M1, 16-element blocks, fp8_e4m3 block scales + fp32 global scale) |
LM MLP gate/up/down_proj (52 layers) |
NVFP4 |
| Vision tower / adapter / projection | bf16 |
embed_tokens, lm_head, all norms, all biases |
bf16 |
416 language-model Linears quantized (52 layers × 8 modules, including the unusual
self_attn.gate_proj); 1020 tensors passed through untouched. The perception encoder stays
bf16, so image input is unaffected.
Scheme is exactly compressed_tensors' NVFP4A16 preset: num_bits=4, type=float, symmetric=True, group_size=16, strategy=tensor_group, dynamic=False.
Quality
Mean relative weight reconstruction error vs the original BF16, measured over sampled layers:
| quant | rel. error | size | % of bf16 |
|---|---|---|---|
| NVFP4 (this repo) | 0.0947 | 22 GB | 28.1% |
| INT4 W4A16 g128 | 0.1156 | 21 GB | 25.8% |
NVFP4 is both more accurate and only marginally larger than int4-g128 — the finer group size (16 vs 128) and E2M1's non-uniform spacing both help on Gaussian-ish weights. An INT4 build is published separately for kernel/back-end comparison.
Fit
GQA is 32:2 with head_dim=128, and only 13 of 52 layers are full-attention (the rest are
sliding-window 2048). Full 131,072-token context costs roughly 1.8 GB of KV in bf16, so on
a 32 GB card the ~8 GB left after weights supports full context plus concurrency.
How it was made
Produced by streaming the raw safetensors tensor-by-tensor and never instantiating the model,
so peak RAM is about one tensor rather than the full 59.6 GB checkpoint. All quantization math
comes from compressed_tensors itself (generate_gparam, calculate_qparams,
NVFP4PackedCompressor).
A note on llm-compressor, since this is easy to get wrong: the PyPI wheel pins
transformers<=5.14.1, which collides with the >=5.15.0 that muse_glimmer requires. That
cap only applies when BUILD_TYPE=release, so installing llm-compressor from source leaves
transformers unpinned and it works fine with 5.15.0. The reason a streaming script was used
here is memory, not the pin: oneshot() instantiates the whole model, and this 59.6 GB
checkpoint does not fit the host it was built on.
Implementation note worth knowing
weight_global_scale is stored 0-dim, not shape (1,). compressed_tensors'
generate_gparam returns (1,), but vLLM's PerTensorScaleParameter fused path does
param[shard_id].copy_(loaded), which raises
RuntimeError: output with shape [] doesn't match the broadcast shape [1]
on qkv_proj / gate_up_proj. A (1,)-shaped checkpoint crashes on load. If you build your
own NVFP4 artifact, squeeze that scalar.
Verification
- 416/416 Linears present; 0 missing tensors, 0 stray zero-point/g_idx tensors.
- 0 shape/dtype conformance failures against what vLLM's loaders actually allocate.
- Byte-level structural match against an independently-produced third-party NVFP4 build of the same base model (2268 tensors, identical name sets, 0 dtype/shape mismatches).
Verified: fits a single 32 GB GPU
Loaded with transformers 5.15.0 on an RTX 5090 (sm_120):
[load] 3s [placement] cuda:0=23.4GB
The whole checkpoint sits on one 32 GB card with roughly 8 GB left over, which is what makes full 131K context viable (KV is only ~1.8 GB, see above).
Gotcha if you try to run it in transformers
compressed-tensors installs a forward pre-hook that decompresses the entire model to bf16
on the first forward pass -- transformers has no NVFP4/INT4 compute kernels, those live in
vLLM. So the model loads at 23.4 GB but needs ~60 GB the moment you run it, and you get:
torch.OutOfMemoryError: CUDA out of memory
Splitting across GPU+CPU with device_map="auto" does not rescue it: the decompress hook
looks up the plain weight key, which offloaded modules do not have, and fails with
KeyError: 'model.language_model.layers.0.self_attn.q_proj.weight'.
Practical consequence: use vLLM for inference (once #51655 lands). transformers is fine for loading and inspecting the checkpoint, but running it there dequantizes to bf16 and therefore tells you nothing about 4-bit kernel behaviour anyway.
Serving
⚠️ vLLM does not yet support muse_glimmer upstream.
vllm-project/vllm#51655 is open, not merged.
Until it lands you need to build from that branch:
git clone -b tiezhen/new-model-support https://github.com/xianbaoqian/vllm && cd vllm
VLLM_USE_PRECOMPILED=1 pip install -e .
vllm serve dudeman2512/Muse-Glimmer-30B-NVFP4 \
--served-model-name muse --max-model-len 131072 \
--reasoning-parser muse_glimmer --tool-call-parser muse_glimmer
The reasoning parser is required — the model uses channel-scoped output framing rather than
<think> tags, and without it the channels collapse and output comes back empty.
End-to-end generation has not been validated, because that needs vLLM. What is verified: the checkpoint loads on a single 32 GB GPU (above), is structurally conformant to vLLM's loaders, and its weight reconstruction error is measured against the original BF16.
Caveats
- Built on sm_120 (RTX 5090). FP4 kernel behaviour differs on GB10 / sm_121 — test before committing on DGX Spark.
- Weight-only (W4A16). Activations stay in bf16.
License
Apache 2.0, inherited from the base model. LICENSE and USAGE_POLICY.md are included
unmodified.
- Downloads last month
- -
Model tree for dudeman2512/Muse-Glimmer-30B-NVFP4
Base model
meta-models/Muse-Glimmer-30B