Apodex-1.1-mini โ€” ROCmFPX 8-bit AGENT routing for AMD Strix Halo (gfx1151)

I built this agent-tier 8-bit ROCmFPX quantization of apodex/Apodex-1.1-mini (Qwen3.5- derived hybrid MoE, 262K context, native function calling) on my Strix Halo box. The agent tier is the one I would serve for tool work.

The file

ftype 115 โ€” Q8_0_ROCMFPX_AGENT
size 36,401,372,416 bytes (33.90 GiB)
bpw 8.40
architecture qwen3_5_moe (hybrid linear-attention + full-attention MoE)
tensors 733
context 262,144
experts 256 routed, 8 active per token + shared expert
token embedding Q8_0
output.weight Q8_0 (protected)
sha256 1b469523f8c4292e058c7bb1e18a45e4161a9fadb217503e687bbbc982db2dab

Type histogram, read from the finished file:

F32 x301, Q8_0_ROCMFPX x250, Q8_0 x182

What this build type is โ€” and what it protects

Q8_0_ROCMFPX_AGENT (ftype 115) is my agent/tool-call coherent 8-bit routing. It keeps the LM head, token embeddings and the attention-output projections at full plain Q8_0 (182 tensors here) and routes the rest through the ROCmFPX 8-bit UE4M3-scale layout (250 tensors). My plain tier keeps zero tensors at plain Q8_0 โ€” the routing difference is exactly what the extra ~580 MiB buys.

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

  1. Manifest gate: pulled apodex/Apodex-1.1-mini file list from the HF API with ?blobs=true and recorded the real shard bytes (15 safetensors shards, 71,903,869,048 bytes total โ€” never the index total_size).
  2. Downloaded and byte-verified all 28 files against that manifest.
  3. Converted with convert_hf_to_gguf.py from my rocmfpx-dspark-halo tree (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.
  4. Quantized with the same tree's llama-quantize at 16 threads. Dry-run estimate 34,704.57 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:

offload 9 / 40 layers on ROCm0, rest CPU-mmap (-ngl 9 -c 2048)
generation (server-reported) 0.163 t/s over 48 tokens (294.0 s)
prompt processing 19 tokens in 33.3 s
MemAvailable 16.5 GiB before load โ†’ 7.4 GiB after

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: โ€ฆ (native thinking-mode generation)

โš ๏ธ Stock llama.cpp will not load this file

Q8_0_ROCMFPX_AGENT is a custom tensor format that exists only in the ROCmFPX fork of llama.cpp.

llama-server -m apodex-1.1-mini-Q8_0_ROCMFPX_AGENT.gguf -dev ROCm0 -fa on -ngl 999 -c 8192   # on a box with the memory for it

Not 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 (0.163 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:

32.54 tok/s (128-token generation, greedy).

All my quants of Apodex-1.1-mini

build what it is size tok/s (full GPU offload)
STRIX_LEAN my leaner 4-bit tier, Q6_K head โ€” smallest of my 4-bit builds, the one most people want 17.46 GiB 64.87
COHERENT my 4-bit ROCmFP4 tier with the Q6_K-protected head โ€” the balance I run day to day 18.48 GiB 63.30
Q8_0 straight 8-bit ROCmFPX โ€” highest fidelity I publish 33.36 GiB 45.05
Q8_0-AGENT 8-bit ROCmFPX with the agent-tuned tensor set โ€” for tool-calling work where precision matters 33.90 GiB 32.54

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

Downloads last month
20
GGUF
Model size
35B params
Architecture
qwen35moe
Hardware compatibility
Log In to add your hardware

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for kingjones777/Apodex-1.1-mini-ROCmFPX-Q8_0-AGENT-GGUF

Quantized
(28)
this model