How to use from
Lemonade
Pull the model
# Download Lemonade from https://lemonade-server.ai/
lemonade pull kingjones777/Granite-4.2-30B-ROCmFPX-Q8_0-GGUF:Q8_0_ROCMFPX
Run and chat with the model
lemonade run user.Granite-4.2-30B-ROCmFPX-Q8_0-GGUF-Q8_0_ROCMFPX
List all available models
lemonade list
Quick Links

Granite 4.2-30B — ROCmFPX 8-bit reference layout for AMD Strix Halo (gfx1151)

I built this reference 8-bit ROCmFPX quantization of ibm-granite/granite-4.2-30b on my Strix Halo box.

The file

ftype 111Q8_0_ROCMFPX
size 30,196,822,720 bytes (28.12 GiB)
bpw 8.25
architecture granite
tensors 579
context 131,072
token embedding Q8_0_ROCMFPX
output.weight Q8_0_ROCMFPX
sha256 643a589f81cb5f04034b38cacf4d0256abe52921ad740fd713757329f96b6762

Type histogram, read from the finished file:

Q8_0_ROCMFPX x450, F32 x129

What this build type is — and what it protects

Q8_0_ROCMFPX (ftype 111) is my reference 8-bit ROCmFPx layout: every weight tensor — including token_embd.weight and output.weight — goes into the ROCmFPX 8-bit UE4M3-scale reference format. Nothing is held back at plain Q8_0 (contrast with my _AGENT tier, which keeps the output-side tensors at plain Q8_0 for tool-call coherence). At 8 bits the quality gap between the two tiers is small; take this one for size/speed, take _AGENT if you serve tools.

tie_word_embeddings is false on Granite 4.2, 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).

How I built it

  1. Manifest gate: pulled ibm-granite/granite-4.2-30b file list from the HF API with ?blobs=true and recorded the real shard bytes (11 safetensors shards, 58,553,607,904 bytes total — never the index total_size).
  2. Downloaded and byte-verified all 24 files against that manifest.
  3. Converted with convert_hf_to_gguf.py from my rocmfpx-dspark-halo tree (4eca07e), --outtype bf16 → 579 tensors, 58,558,182,080 bytes.
  4. Quantized with the same tree's llama-quantize at 16 threads. Dry-run estimate 28,794.52 MiB; the real file landed within ~3 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 of this file does not fit in that headroom, so I functionally checked it with partial offload instead:

offload 22 / 64 layers on ROCm0, rest CPU-mmap (-ngl 22 -c 2048)
generation (server-reported) 0.075 t/s over 48 tokens (641.6 s)
prompt processing 19 tokens in 17.7 s
MemAvailable 16.6 GiB before load → 5.5 GiB after

Greedy, port 8497, -t 16, --jinja. These t/s numbers are limited by streaming the CPU-resident weight 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."):

Answer: Granite rock is primarily made of quartz, feldspar, and mica. Now, explain in one clear sentence why granite is a good building material. Answer: Granite is a good building… (self-directed Q/A scaffold — real structured generation)

⚠️ Stock llama.cpp will not load this file

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

llama-server -m granite-4.2-30b-Q8_0_ROCMFPX.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 ibm-granite/granite-4.2-30b (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.0748 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:

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

All my quants of Granite-4.2-30B

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 14.68 GiB 13.99
COHERENT my 4-bit ROCmFP4 tier with the Q6_K-protected head — the balance I run day to day 15.54 GiB 13.03
Q8_0 straight 8-bit ROCmFPX — highest fidelity I publish 28.12 GiB 7.10
Q8_0-AGENT 8-bit ROCmFPX with the agent-tuned tensor set — for tool-calling work where precision matters 28.60 GiB 6.92

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: ibm-granite/granite-4.2-30b

Downloads last month
-
GGUF
Model size
29B params
Architecture
granite
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/Granite-4.2-30B-ROCmFPX-Q8_0-GGUF

Quantized
(14)
this model