Downloads · 30 days
20
20% of all-time downloads
Kevpadil/Qwen3.6-35B-A3B-PrismaQuant-4.75bit-vllm
Qwen3.6-35B-A3B-PrismaQuant-4.75bit-vllm is a image-text-to-text model from Kevpadil. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for vllm. The card lists the license as apache-2.0.
[](https://github.com/RobTand/prismaquant) [](https://huggingface.co/Qwen/Qwen3.6-35B-A3B/blob/main/LICENSE) [](https://docs.vllm.ai/en/latest/features/quantization/compressedtensors.html)
Downloads · 30 days
20
20% of all-time downloads
All-time downloads
100
Public
Parameters
21.1B
92.6 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors22.9 GB · 100%
How the weights are stored.
U817B · 80%
From the Hugging Face model README
Mixed-precision quantization of Qwen/Qwen3.6-35B-A3B produced by
PrismaQuant — a per-Linear
sensitivity-driven allocator that chooses each Linear module's format
individually under a total-bit budget.
Why "every layer refracts into a different format": a naive uniform NVFP4 either leaves disk on the table (keeping everything BF16 "to be safe") or loses quality (quantizing sensitive layers to 4-bit). PrismaQuant measures the actual Fisher-weighted MSE for every (Linear, format) pair and runs a multi-choice knapsack under a total-bit budget, so every bit lives where it buys the most likelihood.
| Metric | BF16 source | This artifact | Delta |
|---|---|---|---|
| Size on disk | 70 GB | 22 GB | −69 % |
| Fraction of original weights | 100 % | 31 % | |
| Average bits per param | 16 | 4.76 | |
| Multimodal (vision + text) | ✓ | ✓ | |
| MTP speculative decoding heads | ✓ | ✓ | |
Loads in vLLM (stock compressed-tensors) | ✓ | ✓ | |
| Runtime backend | any | vLLM only |
This checkpoint uses three precisions, selected per-Linear by the allocator from measured sensitivity — not chosen uniformly:
| Format | W | A | Use | Count |
|---|---|---|---|---|
| NVFP4 | 4-bit (FP4, group_size=16 with per-group FP8 scale + per-tensor global) | 4-bit (dynamic) | Bulk MoE experts + medium-sensitivity dense Linears + full visual encoder | 192 Linears (52 dense + 80 per-expert + 108 visual + 2 visual un-probed stamped + MTP entries) |
| MXFP8 | 8-bit (E4M3, group_size=32 with per-group E8M0 scale) | 8-bit (dynamic) | High-sensitivity dense Linears the allocator won't risk at 4-bit | 45 Linears |
| BF16 | 16-bit | 16-bit | Router, norms, biases, embed / lm_head, pos_embed | 274 entries |
The allocator couples MoE gate_up_proj / down_proj so siblings share
a scheme (vLLM's FusedMoE requires this), and fused attention siblings
(q_proj/k_proj/v_proj) share one per-tensor global scale so the
packed qkv_proj loads without the "accuracy mismatch" warning.
On every NVFP4 weight the exporter runs, in order:
grid=32 candidate scales spanning
[0.5·s₀, 1.5·s₀], round each weight to its nearest codebook
neighbor at every candidate scale, pick the (scale, rounding-set)
configuration minimizing activation-weighted per-group MSE
sum_j a_j² · (w_orig,j - w_q,j)². Improve-or-keep gate against
the post-GPTQ weight. Handles within-group weight-distribution
variation that GPTQ takes as fixed.Scale_sweep is the closed-form analog of Intel's AutoRound — where AutoRound learns per-weight continuous rounding offsets V via 200 SGD iterations on a relaxed loss, scale_sweep enumerates the discrete scale dimension directly and lets RTN pick rounding conditional on scale. No gradient descent, sub-second per Linear.
Measured per-Linear output-MSE vs RTN baseline (Qwen3.6-35B, mixed visual + MTP Linears, geomean):
| Pipeline variant | out_mse ratio vs RTN |
|---|---|
| RTN (no passes) | 1.00 |
| GPTQ only | 0.41 |
| GPTQ + act_round polish (prior pipeline) | 0.99 (act_round undid GPTQ) |
| scale_sweep only | 0.33 |
| GPTQ + scale_sweep (this artifact) | 0.33 |
The prior pipeline's act_round polish was a closed-form per-weight
Δw²·E[a²] minimization at the fixed group scale. It turned out to
systematically undo GPTQ's cross-column error propagation — the
per-weight metric minima don't respect GPTQ's compensation structure.
scale_sweep replaces it as a strict improvement.
AWQ's γ-fold is not applied. On NVFP4's 16-channel groups, AWQ's per-channel rescaling pushes mixed-scale values into the same group and inflates per-group quant noise rather than reducing it (measured: baseline PPL 4.97, AWQ-only 16.44 — +230 %).
q_proj, k_proj, v_proj, o_proj):
mixed NVFP4 / MXFP8 / BF16 per-Linear by sensitivityin_proj_qkv, in_proj_z,
in_proj_a, in_proj_b, out_proj): samegate_up_proj, down_proj): per-expert NVFP4 with
joint per-tensor scale across the gate_up pair so vLLM FusedMoE
loads themmlp.gate): always BF16 (tiny, sensitive)--speculative-config method=mtp drafts at the
same precision as the body.model.visual.* module tree).patch_embed.proj edges
the probe didn't tap) stamped at NVFP4 uniformly.model.visual.pos_embed stays BF16 — it's a learnable parameter,
not an nn.Linear, and vLLM's compressed-tensors loader cannot
consume a quantized Parameter layout. The allocator's discover pass
excludes it explicitly.inputs_embeds.backward(grad)
that propagates into visual weights.lm_head — kept at BF16 because vLLM's ParallelLMHead module only
accepts a single weight parameter. The allocator measures lm_head's
Fisher sensitivity and would pick NVFP4 for it (saving ~770 MB), but
the compressed-tensors runtime rejects a compressed lm_head with
KeyError: lm_head.input_global_scale because its scheme registry
doesn't include ParallelLMHead. This is a vLLM runtime limitation,
not a PrismaQuant design decision.embed_tokensmodel.visual.pos_embed (Parameter/Embedding, see above)This artifact is only runnable via vLLM's stock compressed-tensors
support — there is no transformers-native runtime path for mixed NVFP4 +
MXFP8 with packed-MoE experts today. vLLM 0.11+ or equivalent is
required.
vllm serve rdtand/Qwen3.6-35B-A3B-PrismaQuant-4.75bit-vllm \
--trust-remote-code \
--max-model-len 32768 \
--gpu-memory-utilization 0.90 \
--speculative-config '{"method":"mtp","num_speculative_tokens":3}'
VLLM_USE_FLASHINFER_NVFP4=1 to make the preference explicit.n=3 is the measured optimum for
this family on DGX Spark (n=2 leaves ~10 % tok/s on the table, n=4
regresses).image-text-to-text chat
API — no special flags.Full pipeline is in the PrismaQuant repo:
pos_embed, rotary_emb) are excluded from the visual pool.lm_head passthrough at BF16 enforced
at this stage (see known issues).Wall-clock on a DGX Spark (128 GB unified memory): ~15 min on cached probe + cost + activation shards (body shards are invariant across export-pass flag changes, so only the final export stage reruns when you change a flag).
ParallelLMHead does not
register the NVFP4/MXFP8 compressed-tensors schemes. Allocator
measured it and would have picked NVFP4; the runtime limitation
forces BF16. Costs ~770 MB on the disk footprint.n=3 unless you
verify against the draft-head acceptance-rate trace.@software{prismaquant2026,
title = {PrismaQuant: per-Linear sensitivity-driven mixed-precision
quantization for LLMs},
author = {Tand, Rob},
year = 2026,
url = {https://github.com/RobTand/prismaquant},
}