Request: a UD quant between IQ4_XS (93.7 GB) and Q4_K_XL (111 GB) for 128 GB unified-memory machines (Strix Halo)

#67
by bitlamas - opened

Hi, thanks for the UD quants and the MTP heads! The shared-Q8_0 and shared-Q4_K_M heads are working great on this model.

Would you be open to adding a quant step right between UD-IQ4_XS (93.7 GB) and UD-Q4_K_XL (111.3 GB)?

Specifically, I’m thinking of UD-Q4_K_XL with the expert down projections (ffn_down_exps) set to IQ4_NL instead of Q5_1. That brings the size down to 102.5 GB. I’ve already built and tested this build locally (details below), but having a clean version quantized directly from the BF16 base with your importance matrix would be ideal.

Why this build?

I’m running this on an AMD Strix Halo setup (Ryzen AI MAX+ 395, 128 GB RAM, Win11, llama.cpp Vulkan).
On this hardware:

  • The 28.8 GB n-gram table stays in host RAM for all quants.
  • A single process can dynamically allocate ~80 GiB to VRAM.

With a 262k context, a q8_0 KV cache, the shared Q4_K_M MTP head, and -ub 512:

  • UD-Q4_K_XL asks for 85.4 GiB and immediately aborts on the first GPU submission. Running it requires offloading expert layers to the CPU, which takes a 15–36% throughput hit depending on layer depth.
  • UD-IQ4_XS fits easily, but its gate/up experts drop down to IQ3_S.
  • This 102.5 GB build lands at 79.9 GiB... just under the threshold, allowing the full transformer to stay on the GPU.

Since ffn_down_exps is 640 wide, it can only use 32-block types anyway, making IQ4_NL the natural choice. Trimming these down projections saves 8.9 GB, which happens to be the exact margin needed to fit this machine.

Benchmark & Validation Results

I built a test version by requantizing ffn_down_exps (Q5_1 → IQ4_NL via --tensor-type, leaving the other 1,176 tensors identical) and scored it against UD-Q4_K_XL on wikitext-2 (24 × 2048):

  • Perplexity: 2.9165 vs 2.9117 for XL (well within the margin of error).
  • KL Divergence: 0.028 with 94.5% same top-1 (compared to IQ4_XS at 0.089 / 90.75%).

It’s been my daily driver since Sept 5 at 262k context with 100% GPU offload. I’ve uploaded the card, checksums, build scripts, and CLI flags here: https://huggingface.co/bitlamas/Qwen3.8-Flash-Next-Q4_K_XL-DN4

I also tested requantizing those 48 tensors using your published imatrix_unsloth.gguf_file (0.0277 vs 0.0282 KLD, 94.6% vs 94.5% top-1, so essentially noise). When starting from a 6-bit source, the IQ4_NL grid dominates the error, so imatrix doesn't have much left to tweak. Anyway a fresh cut straight from BF16 with the imatrix should be even cleaner.

A Few Side Notes

  • IQ4_XS Comparison: bartowski’s IQ4_XS (IQ4_XS gate/up across all layers, but IQ4_XS attention) scores worse on the same text than your UD-IQ4_XS (PPL 3.064 vs 2.998 vs 2.912 for XL). This suggests keeping Q8_0 on attention, delta-net, and hyper-connection tensors matters significantly more than expert bits on this architecture.
  • Model Card Note: per_layer_token_embd rows are 160 wide, meaning nothing below IQ4_NL can actually be applied to that table. Adding a quick note about this in the README might save others some trial and error.

Happy to run any extra perplexity or KLD sweeps on this rig if you need more data!

Have you tried Ubuntu 24.04 + amd-debug-tools and allocating more than 96 GB of memory? I managed to allocate 108 GB this way, but it can be increased even further.

Hi @rusl-dautov . I haven't and probably won't. This machine is my daily Windows machine and I'd rather not dual-boot it for one model. GTT is well documented and I agree it's likely to remove the wall I'm hitting.

In theory, Windows already lets the GPU take up to 124 GB of shared memory here. The catch is that the Vulkan driver splits that 2:1 into an 82.5 GiB device-local heap and a 41 GiB host-visible one, and a single process can't put much more than ~80 GiB of weights in the device-local heap. So on Windows the 111 GB file needs CPU offload no matter how the carve-out is set, which is why a 102.5 GB rung is worth publishing.

Since you have the 108 GB setup... if you load UD-Q4_K_XL at 262k with a q8_0 KV cache, what does GPU-resident memory come to, and does decode hold up with the table in page cache? I'd happily add a Linux row to my release card.

Sign up or log in to comment