Granite 4.2-3B (COHERENT) — ROCmFP4 for AMD Strix Halo (gfx1151)

I built this 4-bit ROCmFP4 quantization of ibm-granite/granite-4.2-3b on my Strix Halo box for the ROCmFPX runtime. Granite 4.2 landed this week; this is my 3-tier publish set for it.

The file

ftype 102Q4_0_ROCMFP4_COHERENT
size 2,195,351,616 bytes (2.04 GiB)
bpw 4.79
architecture granite
tensors 363
context 131,072
token embedding Q6_K
output.weight Q6_K (protected)
sha256 694bed2934af5da4cea5df83ed40616686ba0663aad242b5bf110d1a46507778

Type histogram, read from the finished file:

Q4_0_ROCMFP4 x280, F32 x81, Q6_K x2

What 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. Cost: ~0.1 GiB over the unprotected 4-bit. Worth it.

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-3b file list from the HF API with ?blobs=true and recorded the real shard bytes (2 safetensors shards, 7,319,517,120 bytes total — never the index total_size).
  2. Downloaded and byte-verified all 15 files against that manifest.
  3. Converted with convert_hf_to_gguf.py from my rocmfpx-dspark-halo tree (4eca07e), --outtype bf16 → 363 tensors, 7,323,461,696 bytes.
  4. Quantized with the same tree's llama-quantize at 16 threads and --output-tensor-type q6_K. Dry-run estimate 2,090.24 MiB; the real file landed within a few MiB of it.

Measured on my box

amd-halo: AMD Ryzen AI Max+ 395 (Strix Halo, gfx1151), ROCm 7.13.0, 125 GiB unified memory. Functional check, not an idle-box benchmark: 8 other llama-server seats were live on this machine while I tested (MemAvailable ~11.6 GiB before load, ~8.2 GiB after). Server flags: -dev ROCm0 -fa on -ngl 999 --no-mmap -fit off -np 1 -b 2048 -c 8192 -t 16 --jinja, port 8497, greedy:

generation (server-reported) 71.55 t/s over 128 tokens
prompt processing 19 tokens in 46.3 ms

Sample output (greedy, prompt "Explain in one clear sentence what granite rock is primarily made of."):

Please use the following reasoning steps: 1. Identify the main component of granite rock. 2. State the composition of granite rock. … (the model answered in its native function-calling/thinking scaffold — real, structured 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 granite-4.2-3b-Q4_0_ROCMFP4_COHERENT.gguf -dev ROCm0 -fa on -ngl 999 -c 8192

Not measured

No benchmark sweeps, no context sweeps, no perplexity — 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-3b (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.

All my quants of Granite-4.2-3B

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 1.92 GiB 60.69
COHERENT my 4-bit ROCmFP4 tier with the Q6_K-protected head — the balance I run day to day 2.04 GiB 71.55
Q8_0 straight 8-bit ROCmFPX — highest fidelity I publish 3.52 GiB 46.36
Q8_0-AGENT 8-bit ROCmFPX with the agent-tuned tensor set — for tool-calling work where precision matters 3.59 GiB 50.47

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-3b

Downloads last month
75
GGUF
Model size
4B params
Architecture
granite
Hardware compatibility
Log In to add your hardware

4-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for kingjones777/Granite-4.2-3B-ROCmFP4-COHERENT-GGUF

Quantized
(25)
this model