kingjones777/Apodex-1.1-mini-ROCmFP4-COHERENT-GGUF
Apodex-1.1-mini (COHERENT) — ROCmFP4 for AMD Strix Halo (gfx1151)
I built this 4-bit ROCmFP4 quantization of apodex/Apodex-1.1-mini — a Qwen3.5-derived hybrid MoE (40 layers of linear attention with full attention every fourth layer, 256 routed experts / 8 active, 262K context) — on my Strix Halo box for the ROCmFPX runtime.
The file
Type histogram, read from the finished file:
Q4_0_ROCMFP4 x430, F32 x301, Q6_K x2What this build type is — and what it protects
Q4_0_ROCMFP4_COHERENT (ftype 102) quantizes the body to ROCmFP4 — my 4-bit UE4M3-scale layout — and deliberately protects the two tensors that hurt coherence most when crushed to 4-bit: the token embedding table and the LM head both stay at Q6_K. Because this model's head is untied, a 4-bit output.weight would degrade the logits of every single token; so I quantized with --output-tensor-type q6_K and confirmed the head landed at Q6_K by exact-name read-back.
tie_word_embeddings is false on Apodex, so output.weight is a real standalone tensor. I verified the head types by reading the finished file back by exact tensor name (token_embd.weight and output.weight — exact match, not substring).
Text-only, trunk-only — stated up front
- No vision tower. The upstream repo is multimodal; this GGUF carries the language model only. No mmproj is included.
- No MTP head. My converter's MTP merge path dies on this checkpoint's de-fused
mtp.layers.0.mlp.experts.*tensors (KeyError: 'model.layers.0.mlp.experts.0.down_proj.weight'in the Qwen2Moe merge loop), so I converted with--no-mtp. The 40-layer trunk is complete (733 tensors); speculative MTP drafting is not available from this file. I do not publish what I have not verified.
How I built it
- Manifest gate: pulled
apodex/Apodex-1.1-minifile list from the HF API with?blobs=trueand recorded the real shard bytes (15 safetensors shards, 71,903,869,048 bytes total — never the indextotal_size). - Downloaded and byte-verified all 28 files against that manifest.
- Converted with
convert_hf_to_gguf.pyfrom myrocmfpx-dspark-halotree (4eca07e),--outtype bf16 --no-mtp→ 733 tensors, 69,376,638,528 bytes. The checkpoint ships fused expert tensors (mlp.experts.gate_up_proj/mlp.experts.down_proj); this converter's Qwen2Moe base ingests the fused layout directly. - Quantized with the same tree's
llama-quantizeat 16 threads and--output-tensor-type q6_K. Dry-run estimate 18,916.30 MiB; the real file landed within ~11 MiB of it.
Measured on my box — partial-offload functional check, stated plainly
amd-halo: AMD Ryzen AI Max+ 395 (Strix Halo, gfx1151), ROCm 7.13.0, 125 GiB unified memory. At test time this box was serving 8 live llama-server seats holding ~107 GiB of unified memory, leaving me ~16 GiB. A full -ngl 999 --no-mmap load does not fit in that headroom, so I functionally checked with partial offload instead:
Greedy, port 8497, -t 16, --jinja. These t/s numbers are limited by streaming the CPU-resident layers, not by the ROCm path — treat them as load-and-generate proof with the server's own timing, not as the speed you will get on an idle box. Full-offload throughput: not measured (would require freeing the seats — I don't touch my live seats).
Sample output (greedy, prompt "Explain in one clear sentence what granite rock is primarily made of."):
<think> Thinking Process: 1. Analyze the Request: Task: Explain what granite rock is primarily made of. Constraint: Use exactly one clear sentence. … (native thinking-mode generation)
⚠️ Stock llama.cpp will not load this file
Q4_0_ROCMFP4_COHERENT is a custom tensor format that exists only in the ROCmFPX fork of llama.cpp.
llama-server -m apodex-1.1-mini-Q4_0_ROCMFP4_COHERENT.gguf -dev ROCm0 -fa on -ngl 999 -c 8192 # on a box with the memory for itNot measured
No benchmark sweeps, no context sweeps, no perplexity, no full-offload throughput — per my build discipline this is the 3-tier publish set and one functional check per tier.
Provenance & license
Converted and quantized from apodex/Apodex-1.1-mini (Apache 2.0). This quantized build is released under the same Apache 2.0 license. The ROCmFPX runtime is a third-party fork; its own terms apply to the runtime, not to these weights.
Corrected speed — full GPU offload
My first published number (1.183 tok/s) was measured with PARTIAL offload on a box already serving 8 models — that was my harness's fault, not the model's. Re-measured on an idle Ryzen AI MAX+ 395 (gfx1151, ROCm 7.2.4), full -ngl 999 offload (), 32K ctx:
63.30 tok/s (128-token generation, greedy).
<!-- VARIANTS:START -->
All my quants of Apodex-1.1-mini
All measured by me on a Ryzen AI MAX+ 395 (Strix Halo, gfx1151, ROCm 7.2.4) with the whole model on GPU (-ngl 999), 128-token greedy generation. A dash means I haven't measured that one yet — I won't put a number in a card I didn't measure.
Base model: Apodex/Apodex-1.1-mini <!-- VARIANTS:END -->
