minicpm5-2b-iq8r / README.md
StillDeadcode's picture
IQ8R container
5fdbcc9 verified
|
Raw History Blame Contribute Delete
4.94 kB
---
license: apache-2.0
base_model:
- openbmb/MiniCPM5-2B
- openbmb/MiniCPM5-2B-DSpark
base_model_relation: quantized
pipeline_tag: text-generation
language:
- en
- zh
tags:
- radiance
- rocm
- amd
- rdna4
- int8
- w8a8
- iq8r
- hadamard
- speculative-decoding
- dspark
---
# MiniCPM5-2B IQ8R + DSpark — radiance container
[openbmb/MiniCPM5-2B](https://huggingface.co/openbmb/MiniCPM5-2B) as a single `.rad` container for
the [radiance](https://codeberg.org/StillDeadcode/radiance) inference engine (AMD RDNA4, ROCm), with
the [MiniCPM5-2B-DSpark](https://huggingface.co/openbmb/MiniCPM5-2B-DSpark) block drafter merged in
for speculative decoding.
It replaces [StillDeadcode/minicpm5-2b-fp8](https://huggingface.co/StillDeadcode/minicpm5-2b-fp8): the
same eight bits a weight, closer to the bf16 model and a little faster. A bf16 version is at
[StillDeadcode/minicpm5-2b-bf16](https://huggingface.co/StillDeadcode/minicpm5-2b-bf16).
| | |
|---|---|
| File | `minicpm5-2b-iq8r.rad` — 3.04 GiB |
| Weights | every linear of the model and of the drafter int8 (codes −127..127) with a u8 scale per row and 256 of K under a bf16 scale a row, each 128 of K rotated by the unnormalised Hadamard, round to nearest; the lm_head int8 with a bf16 scale per row and 128; embeddings and norms bf16 |
| Activations | int8 under the same rotation (W8A8) |
| Speculator | DSpark (5 layers, block size 7), IQ8R; its vocabulary head as 2-bit codes |
| Context | 131,072 tokens (the checkpoint's trained length) |
| Modalities | text |
| Needs | radiance built from main after 1.17.0: IQ8R at one scale a 256 of K and the int8 KV cache are not in 1.17.0 and come with the next release |
## Quality and speed
KL divergence from the next-token distribution of radiance's bf16 container of the same model
(82,066 positions of mixed text, one card, bf16 KV cache unless named):
| | mean KLD | top-1 agreement |
|---|---|---|
| this file | 0.0103 | 97.3% |
| this file, `kv-cache-dtype: i8` | 0.0113 | |
| minicpm5-2b-fp8 | 0.0688 | 91.7% |
| minicpm5-2b-fp8, `kv-cache-dtype: fp8` | 0.0837 | |
One Radeon AI PRO R9700 (gfx1201), milliseconds a speculative step at 1 / 4 concurrent sequences:
6.87 / 7.92, against 7.14 / 8.17 for minicpm5-2b-fp8; both accept 8.7 to 9.1 drafted tokens a step
over 24 chat prompts. Without the drafter a decode step is 5.17 ms (FP8 5.40).
## Serve
```yaml
# radiance.yaml
server:
host: 0.0.0.0
port: 8000
models:
minicpm5-2b:
model: minicpm5-2b-iq8r.rad
tp: 1
max-model-len: 131072
max-num-seqs: 8
kv-cache-dtype: i8
```
```sh
radiance --config radiance.yaml
```
`tp: 2` splits it over two cards. The server speaks the OpenAI API (`/v1/chat/completions`,
`/v1/completions`), with tool calls and structured output; the drafter's depth is chosen
automatically (`num-speculative-tokens: N` states one, `0` turns speculation off).
Built and tested on Radeon AI PRO R9700 (gfx1201), one card and two.
## How this file was made
```sh
rad-convert openbmb/MiniCPM5-2B --draft-model openbmb/MiniCPM5-2B-DSpark \
--tokenizer openbmb/MiniCPM5-2B/tokenizer.json \
--recipe minicpm5-2b-iq8r.recipe -o minicpm5-2b-iq8r.rad
```
The recipe (`minicpm5-2b-iq8r.recipe` in this repository); everything it does not name is the
checkpoint's own:
```
output.weight rtn codes=i8 group=128 scale=bf16 clamp=sym rule=search
dspark.draft_head.weight rtn codes=u2 zero=u8 group=128 scale=f16
blk.*.attn_qkv.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
blk.*.attn_output.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
blk.*.ffn_gate_up.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
blk.*.ffn_down.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dspark.fc.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dspark.blk.*.attn_q.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dspark.blk.*.attn_k.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dspark.blk.*.attn_v.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dspark.blk.*.attn_output.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dspark.blk.*.ffn_gate_up.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dspark.blk.*.ffn_down.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
```