EXLLM / EXLLM8_FORMAT.md
ToTo-40417's picture
Publish EXLLM-0.005B-Instruct
80300e5 verified
|
Raw History Blame Contribute Delete
1.29 kB
# EXLLM8 binary format v1
All integer fields are little-endian.
## File header
| Field | Type | Value |
|---|---|---|
| magic | 8 bytes | `EXLLM8\0\0` |
| format_version | uint32 | `1` |
| tensor_count | uint32 | number of serialized tensors |
## Tensor record
Each tensor is stored as:
1. `name_len`: uint16
2. `ndim`: uint8
3. `qtype`: uint8
4. `name`: `name_len` UTF-8 bytes
5. `dims`: `ndim` × uint32
6. `scale_count`: uint32
7. `data_bytes`: uint32
8. `scales`: `scale_count` × float32
9. `data`: `data_bytes` bytes
### qtype 1 — row-wise int8
Used for 2D matrices. If a weight is shaped `[rows, cols]`, one float32 symmetric scale is stored per row and the matrix data is signed int8.
Approximate reconstruction:
```text
weight[row, col] = int8_value[row, col] * scale[row]
```
Quantized values are limited to `[-127, 127]`.
### qtype 2 — float16
Used for the small RMSNorm vectors. `scale_count` is zero and `data` is IEEE-754 binary16.
## Weight tying
`lm_head.weight` is not stored. It aliases `tok.weight`. The companion manifest declares this alias explicitly.
## Deployment note
The float scales are an interchange representation. A SH4/no-FPU deployment should translate them into the fixed-point scale representation chosen by the C inference kernel.