File size: 7,595 Bytes
aaf7ddf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
---
license: apache-2.0
base_model: jialinyyzz/humanizer
base_model_relation: quantized
pipeline_tag: text-generation
library_name: gguf
language: [en, zh]
tags: [gguf, rocmfpx, rocmfp4, amd, rocm, strix-halo, quantized, humanizer, text-rewriting, gemma4]
---

# humanizer 12B — ROCmFPX GGUF

[jialinyyzz/humanizer](https://huggingface.co/jialinyyzz/humanizer) (v2) rewrites AI-written drafts in English and
Chinese so they read like a person wrote them, and keeps every number, date, name and quote. It is a fine-tune of
Gemma 4 12B. This repo has it in the [ROCmFPX](https://github.com/charlie12345/ROCmFPX) formats, a llama.cpp fork
with low-bit weight types for AMD GPUs (Vulkan and HIP/ROCm).

**Start with `humanizer-12b-Q8_0_ROCMFPX.gguf`** if it fits in your GPU memory: it is almost identical to the full
model. Take the 6-bit file next, and a 4-bit file when memory is tight.

> These files need [HarshaVardhan3002/ROCmFPX](https://github.com/HarshaVardhan3002/ROCmFPX), built from
> 23 October 2026 or later (they carry per-tensor scales, see below). Stock llama.cpp, LM Studio, Ollama and other
> ROCmFPX builds may not load them. **These files have not been tested on AMD hardware yet.**
>
> Not an official release of humanizer. All credit for the model goes to its authors. Their own files in stock
> llama.cpp formats, including quantization-aware trained 2-, 3- and 4-bit files, are at
> [jialinyyzz/humanizer-GGUF](https://huggingface.co/jialinyyzz/humanizer-GGUF).

## Files

| File | Size | KL to BF16 | Same top token | |
|---|---:|---:|---:|---|
| `humanizer-12b-Q8_0_ROCMFPX.gguf` | 12.3 GB | 0.00024 | 99.3% | 8-bit, closest to the full model |
| `humanizer-12b-Q6_K_ROCMFPX.gguf` | 9.8 GB | 0.0023 | 97.8% | 6-bit (ROCmFPX `Q6_0_ROCMFPX` weights, see below) |
| `humanizer-12b-Q4_0_ROCMFP4_STRIX.gguf` | 6.7 GB | 0.040 | 91.9% | recommended 4-bit (Strix Halo recipe) |
| `humanizer-12b-Q4_0_ROCMFP4_FAST.gguf` | 6.3 GB | 0.047 | 90.8% | smallest, speed-first 4-bit |

Stock llama.cpp builds of this model, measured the same way:

| Stock file | Size | KL to BF16 | Same top token |
|---|---:|---:|---:|
| Q8_0 | 12.7 GB | 0.00064 | 98.8% |
| Q6_K | 10.0 GB | 0.0026 | 97.8% |
| Q4_K_M | 7.4 GB | 0.0186 | 94.1% |

The 8-bit file here is closer to BF16 than a stock Q8_0, and the 6-bit file matches a stock Q6_K; both are a
little smaller. At 4-bit, a stock Q4_K_M (or the authors' quantization-aware Q4_K_M) stays closer to the full model than the ROCmFP4
files here. The ROCmFP4 files are smaller and are meant for speed on AMD GPUs.

**How this was measured:** llama.cpp `llama-perplexity --kl-divergence` against the authors' BF16 file, 40 chunks of
512 tokens of English Wikipedia text (wikitext-2), run on a GPU after expanding each file to F16 (the expansion is
exact). KL is how far the file's next-token probabilities drift from BF16, averaged over every token; lower is better.
"Same top token" is how often the file's most likely next token is the same as BF16's. This is general text, not
rewriting text; the authors measured their files on held-out rewriting data, and their stock Q4_K_M (KL 0.021) is
close to what this test gives (0.0186).

Every file also passed a rewrite check: a test draft with five facts (a date, a count, a name, a year and an amount),
greedy decoding on the CPU. All five facts came through in every file.

The 6-bit file is named `humanizer-12b-Q6_K_ROCMFPX.gguf` so that Hugging Face lists it as a 6-bit quant. Its weights
are the ROCmFPX `Q6_0_ROCMFPX` type, not a stock llama.cpp `Q6_K`, and it needs the same fork as the other files.

## Why these files carry tensor scales

ROCmFPX stores one scale for each block of weights as an 8-bit float (UE4M3) whose smallest step is 2^-10. This
model's weights are small (the largest value in a typical block of 32 is about 0.02 to 0.04), so an 8-bit ROCmFPX
file cannot pick small enough scales: almost every block gets stuck at the smallest scale, and the file is about as
precise as a 6-bit one. These files multiply each weight matrix by a power of two (2^7 to 2^10) before quantizing and store
the inverse as `<name>.scale`, which the fork multiplies back after the matrix product. The shared embedding and
output matrix cannot take such a scale, so it uses a stock llama.cpp type: Q8_0 in the 8-bit file, Q6_K in the 6-bit
and STRIX files (the FAST file keeps it in ROCmFP4 for speed).

| KL to BF16 | Plain ROCmFPX | With tensor scales |
|---|---:|---:|
| 8-bit | 0.0112 | 0.00024 |
| 6-bit | 0.0080 | 0.0023 |
| 4-bit STRIX | 0.053 | 0.040 |
| 4-bit FAST | 0.064 | 0.047 |

## How these were made

1. Source: the authors' BF16 GGUF (`humanizer-12b-bf16.gguf` from
   [jialinyyzz/humanizer-GGUF](https://huggingface.co/jialinyyzz/humanizer-GGUF)), sha256 checked against their card.
2. Importance matrix from the BF16 file over a general calibration text (`calibration_datav3`), 512-token chunks.
   The authors used their own rewriting data for theirs.
3. `llama-quantize --imatrix` from the BF16 file with `LLAMA_ROCMFPX_TENSOR_SCALE=1`, one run per type, from
   [HarshaVardhan3002/ROCmFPX](https://github.com/HarshaVardhan3002/ROCmFPX); `--token-embedding-type q8_0` for the
   8-bit file and `q6_K` for the 6-bit file.

The only change from the original is the weight quantization. The tokenizer, the chat template and the stored sampling
defaults come unchanged from the authors' GGUF.

## Run

```bash
git clone https://github.com/HarshaVardhan3002/ROCmFPX && cd ROCmFPX
cmake -B build -DGGML_VULKAN=ON          # or -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1151 (gfx1100 for RX 7900)
cmake --build build --target llama-server -j
build/bin/llama-server -m humanizer-12b-Q8_0_ROCMFPX.gguf -ngl 999 -c 8192 -np 1 --jinja
```

The model does text completion, not chat. The prompt is the instruction from `prompt_format.json`, a blank line, your
draft, then `\n\n### Rewritten:\n\n`. Sample with temperature 1.0, top-p 0.95, top-k 0, min-p 0 and repeat penalty 1.0,
and stop at the end-of-sequence token only.

```python
import json, urllib.request

pf = json.load(open("prompt_format.json", encoding="utf-8"))

def humanize(draft, url="http://127.0.0.1:8080"):
    body = {"prompt": pf["instr"] + "\n\n" + draft.strip() + pf["sep"],
            "temperature": 1.0, "top_p": 0.95, "top_k": 0, "min_p": 0,
            "repeat_penalty": 1.0, "n_predict": 2048}
    req = urllib.request.Request(url + "/completion", json.dumps(body).encode("utf-8"),
                                 {"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=900) as r:
        return json.load(r)["content"].strip()

print(humanize(open("draft.txt", encoding="utf-8").read()))
```

The chat template in each file builds the same prompt from the last user message, so `/v1/chat/completions` with one
draft per message also works. Keep instruction, draft and rewrite within 8,192 tokens and split long documents at
paragraph breaks. The authors note that a short, informal English draft occasionally comes back in Chinese; sample
again when that happens. Their [usage guide](https://github.com/sgaofen/humanizer-local-model/blob/main/docs/USAGE.md)
has more. Their desktop app runs stock llama.cpp with their own files, not these.

## License

Apache-2.0, same as the original (see `LICENSE`). The authors' `NOTICE` file is included and must stay with any copy.
humanizer is fine-tuned from [google/gemma-4-12B](https://huggingface.co/google/gemma-4-12B), which Google releases
under Apache 2.0. This repo is not affiliated with or endorsed by Google or the humanizer authors.