GGUF
conversational
File size: 8,930 Bytes
bb7b6d5
 
 
 
 
 
 
 
 
 
 
 
da11688
 
bb7b6d5
 
da11688
 
 
 
 
 
 
 
 
 
bb7b6d5
 
 
 
 
 
 
 
 
 
 
 
 
da11688
bb7b6d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da11688
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bb7b6d5
 
 
 
 
 
 
da11688
 
bb7b6d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da11688
 
 
 
 
 
 
 
 
 
 
 
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
---
license: other
license_name: openpangu-model-license-agreement-1.0
license_link: LICENSE
base_model: openpangu/openPangu-R-7B-2512
library_name: gguf
---

# openPangu-R-7B-2512-Q4_K_M (GGUF)

Powered by openPangu. openPangu is a trademark of Huawei Technologies Co., Ltd.

Q4_K_M GGUF conversion of [openpangu/openPangu-R-7B-2512](https://huggingface.co/openpangu/openPangu-R-7B-2512),
together with a CPU inference backend study (llama.cpp vs oneDNN vs OpenVINO).
This is an unofficial community conversion, not released or endorsed by Huawei.

## Repository layout

| path | contents |
|---|---|
| `openPangu-R-7B-2512-Q4_K_M.gguf` | the Q4_K_M model (4.72 GiB) |
| `openpangu-r-llama.cpp-v0.7.0.patch` | llama.cpp v0.7.0 patch adding the `openpangu-r` architecture |
| `build_openpangu_r.sh` | one-click clone + patch + build + model download |
| `onednn/` | CPU backend comparison: oneDNN backend patch, OpenVINO programs, benchmarks, raw logs |
| `LICENSE` | OpenPangu Model License Agreement 1.0 |

## Important

- **Upstream llama.cpp does not support this model.** The GGUF uses the architecture name `openpangu-r`,
  which exists only in the patch in this repository. The patch targets **llama.cpp v0.7.0** (latest stable release).
- Tested on CPU only (x86-64, AVX-512). GPU backends were not tested.

## Quick start

```bash
bash build_openpangu_r.sh          # clones llama.cpp v0.7.0, applies the patch, builds, downloads the GGUF
```

Options: `SKIP_MODEL=1` skips the download; `HF_TOKEN` is only needed if this repository is private.
The script downloads from this repository (`HelloSun/Experiment_1`) and checks the sha256 of the patch and the GGUF.

Run (raw prompt, Chinese chat template of the model):

```bash
./llama.cpp/build/bin/llama-completion -m models/openPangu-R-7B-2512-Q4_K_M.gguf -no-cnv --temp 0 -n 128 --no-display-prompt \
  -p "[unused9]系统:你是一个有帮助的助手。[unused10][unused9]用户:用一句话介绍什么是大语言模型。 /no_think[unused10][unused9]助手:[unused16]"
```

Prompt format: `[unused9]系统:…[unused10][unused9]用户:…[unused10][unused9]助手:[unused16]`.
Append ` /no_think` to a user message for fast (non-thinking) answers. The answer follows `[unused17]`; generation ends with `[unused10]`.

## Conversion

1. `convert_hf_to_gguf.py` (patched) with `--outtype f16` from the BF16 safetensors. The MTP module (layer 27) and the second final norm are dropped.
2. `llama-quantize <f16.gguf> <out.gguf> Q4_K_M`. Sinks and the conv weight are kept in F32.

## Verification (done in this environment)

- **Reference check:** a CPU fp32 reference was written from the HF modeling code. For a 33-token prompt, the top-10 logits
  match llama.cpp F16 (max |Δlogit| ≈ 0.01). For a 484-token prompt (sliding-window layers active), the top-10 match with
  max |Δlogit| ≈ 0.03. Turning the sliding window off in the reference changes the logits by about 6, so the window is verified.
- **Greedy decoding:** llama.cpp F16 matches the fp32 reference token by token (11 tokens checked).
- **Batching:** F16 gives the same results with prompt decoding in one batch, in chunks of 4, and token by token.
- **Long context:** a fact placed about 400 tokens before the question was answered correctly (`7312`).
- **Multi-turn:** a second user turn appended to the same context is answered in context.

Sample outputs (Q4_K_M):

| prompt | output |
|---|---|
| 用一句话介绍什么是大语言模型(快思考) | 大语言模型是一种基于大量文本数据训练而成的人工智能模型,能够理解和生成人类语言,广泛应用于自然语言处理任务。 |
| 写一首关于秋天的四行短诗(快思考) | 秋风轻拂叶纷飞,/ 金黄铺满小径长。/ 寒蝉低唱夕阳下,/ 一缕炊烟入梦乡。 |
| 一个班有30名学生,其中2/5是女生,女生有多少人?(慢思考) | 12人 |
| 123 + 456 等于多少?(慢思考) | 579 |

Note: in fast mode the model once answered `123 + 456 = 679`. The fp32 reference gives the same answer for that prompt, so this is a model
behavior, not a conversion or implementation error. Thinking mode answers 579.

## CPU backend comparison (Q4_K_M)

Measured on an Intel Xeon Platinum 8559C (192 threads host, 16-CPU container, AMX BF16/INT8, AVX-512),
80 GiB memory guard, no GPU. `pp512` / `tg128` are steady-state throughput; OpenVINO `tg128` is the
median of 128 decode steps. Full tables, accuracy checks and methodology: [`onednn/README.md`](onednn/README.md),
raw numbers in [`onednn/results.csv`](onednn/results.csv).

| backend | weights | pp512 tok/s | tg128 tok/s | ppl512 | argmax vs f32 |
|---|---|---:|---:|---:|---:|
| llama.cpp (plain AVX512) | Q4_K_M | **180.50** | **13.39** | - | - |
| llama.cpp (default AMX+repack) | Q4_K_M | 112.77 | 12.19 | - | - |
| oneDNN | int8 | 90.09 | 7.67 | - | - |
| oneDNN | bf16 | 75.52 | 4.79 | - | - |
| OpenVINO | f32 | 125.60 | 2.22 | **28.82** | 1.000 |
| OpenVINO | bf16-hint | 209.43 | 3.93 | 28.85 | 0.975 |
| OpenVINO | int8-asym | 219.17 | 4.70 | 29.11 | 0.951 |
| OpenVINO | int8-sym | 226.68 | - | 29.34 | 0.941 |
| OpenVINO | int4-asym | 223.65 | 5.20 | 32.68 | 0.703 |
| OpenVINO | int4-sym | 222.48 | - | 42.95 | 0.701 |

Takeaways:

- llama.cpp Q4_K_M is the fastest overall on this 16-CPU container: `13.39 tg128`, `180.50 pp512`.
- The oneDNN hook (in `onednn/onednn.patch`) is bandwidth-bound: bf16 weights are 16.6 GB/token vs
  ~5 GB/token for Q4_K, int8 8.3 GB/token. The AMX int8 kernel itself is fast (~7.1 TFLOPS at M=512);
  the loss comes from the weight format and per-call activation quantization.
- OpenVINO has the fastest prefill but the slowest decode here, because its decode graph runs attention
  over the full 640-slot KV cache and moves all KV tensors across the host/plugin boundary each step.
  int8/int4 are NNCF weight-only compression of the f32 IR: int8 stays close to f32 (PPL +0.3, ~95% argmax),
  int4 keeps short factual answers but loses distributional fidelity (PPL +3.9, ~70% argmax).

Reproduce: build the oneDNN backend with `onednn/build.sh <llama.cpp dir>`, benchmark with
`onednn/bench.sh <Q4_K_M.gguf>` (needs a plain AVX512 build and an oneDNN build alongside a default build).
The OpenVINO route is a direct `ov.convert_model` trace of the HF model (stateless prefill + decode IRs);
`optimum-cli`, `openvino-genai` `LLMPipeline` and `torch.compile(backend="openvino")` all reject this
architecture — see [`onednn/README.md`](onednn/README.md) and [`onednn/openvino_quantization.md`](onednn/openvino_quantization.md).

## Known limitations

- **One sequence per batch.** A batch with more than one sequence aborts. The conv history of the merge layers is kept inside the model
  and follows one sequence decoded contiguously. Prompt-cache reuse, `seq_rm`, and multi-slot serving are not supported.
- The MTP (next-token) head is not included and not used.
- Hadamard-rotated (quantized) KV cache is not supported; use the default f16 KV cache.
- `llama-server` was not validated.
- The oneDNN backend handles only 2D quantized-weight x 2D activation `MUL_MAT` (projections and `lm_head`);
  batched attention matmuls stay on the ggml path. int4 has no optimized kernel in oneDNN 3.7.

## License and notices

The model and derivative works are licensed under the **OPENPANGU MODEL LICENSE AGREEMENT VERSION 1.0** (see `LICENSE`).

- **EU restriction (Section 3):** you must not access, download, install, run, deploy, integrate, modify, or otherwise use this model within the European Union.
- **Acknowledgment (Section 4.2):** "Powered by openPangu" and the trademark notice "openPangu is a trademark of Huawei Technologies Co., Ltd." must appear on pages, manuals, or materials that describe features of the model.
- The model is provided "AS IS" without warranty. Outputs are generated automatically and may be inaccurate.

## Files and checksums

| file | sha256 |
|---|---|
| `openPangu-R-7B-2512-Q4_K_M.gguf` | `efeb81edbf64ad9d7a80254332f3128d86deec589ee39315a3c1f7ec1aa5f10a` |
| `openpangu-r-llama.cpp-v0.7.0.patch` | `b5f302da0cece9c6bc717982d820f8b3e6ca0970f8f32b549efb41ef0d6b8773` |
| `LICENSE` | `747083c8c24995c75ed641d5c031a95a859b1ec37cd3deeb033425a75249a3cb` |

Backend-study material (all small text files):

| path | contents |
|---|---|
| `onednn/README.md` | full comparison, environment, accuracy and per-backend notes |
| `onednn/results.csv` | every measured configuration |
| `onednn/onednn.{cpp,h}`, `onednn/onednn.patch` | oneDNN `MUL_MAT` backend for ggml-cpu |
| `onednn/build.sh`, `onednn/bench.sh` | build and benchmark helpers |
| `onednn/openvino/` | prefill/decode IR builders, NNCF compression, PPL/argmax and isolation tests |
| `onednn/logs/` | raw `llama-bench`, OpenVINO and NNCF logs (incl. `logs/quant/`) |
| `onednn/openvino_quantization.md` | why int8/int4 needed NNCF weight compression |