Ling-3.0-tiny-GGUF / README.md
Mike0021's picture
Publish v1.0 model card, provenance, and validation
31596cd verified
|
Raw
History Blame Contribute Delete
16.3 kB
---
license: mit
library_name: gguf
pipeline_tag: text-generation
inference: false
base_model: inclusionAI/Ling-3.0-tiny
base_model_relation: quantized
model_name: Ling-3.0-tiny GGUF
quantized_by: Mike0021
tags:
- gguf
- llama.cpp
- bailingmoe3
- mixture-of-experts
- quantized
- reasoning
- conversational
---
# Ling-3.0-tiny GGUF
Unofficial GGUF conversion and importance-matrix quantizations of
[inclusionAI/Ling-3.0-tiny](https://huggingface.co/inclusionAI/Ling-3.0-tiny),
created from immutable source revision
[`a2ee06c0`](https://huggingface.co/inclusionAI/Ling-3.0-tiny/tree/a2ee06c0f2de5b171701aee7f73f70a1da75483b).
No fine-tuning, merging, or other parameter training was performed. The
original model documentation, intended use, benchmark claims, and limitations
remain authoritative.
> **Experimental runtime requirement**
>
> As of 2026-08-11, BailingMoE3 support remains unmerged in upstream
> `llama.cpp`. These files were converted and validated with
> [PR #26608](https://github.com/ggml-org/llama.cpp/pull/26608) at exact commit
> [`d8d8625`](https://github.com/aetherbird/llama.cpp/commit/d8d862521e9ad842f2b47f3b392b039317782aa0).
> This includes the Q-LoRA path required by Ling-3.0-tiny
> (`q_lora_rank=256`) from
> [`517b4675`](https://github.com/aetherbird/llama.cpp/commit/517b467544f732ddabb3f7727932f8d004ad9457)
> and the pinned multi-argument tool-parser fix
> [`0266ebca`](https://github.com/aetherbird/llama.cpp/commit/0266ebca66bd95b7a85d37b8ca08ccf9812b85cc).
> Stock or older llama.cpp binaries and other GGUF
> runtimes may reject this architecture or produce incorrect output until they
> incorporate equivalent support.
## Preserved model facts
- BailingMoeV3 hybrid KDA/MLA sparse MoE, 526 GGUF tensors
- 7,893,392,800 parameters total; approximately 1.3B active per token
- 24 layers; 128 routed experts, 8 selected per token, plus 1 shared expert
- Q-LoRA rank 256 and KV-LoRA rank 512
- Native configured context: 131,072 tokens
- Embedded tokenizer and source chat template
- No NEXTN/MTP layers (`num_nextn_predict_layers=0`)
The source identifies itself as Transformers `model_type=bailing_hybrid` with
`BailingMoeV3ForCausalLM`; the pinned converter intentionally maps that model
to GGUF `general.architecture=bailingmoe3`. This is not a model-family
mismatch.
The original card's 256K command uses an external YaRN/runtime override. This
release preserves the checkpoint's native 131,072-token configuration and does
not claim validated 256K operation. Do not enable MTP speculative decoding for
this Tiny checkpoint.
## Files and recommendations
| File | Quant | Size | Matrix | Suggested use |
|---|---:|---:|:---:|---|
| `Ling-3.0-tiny-BF16.gguf` | BF16 | 14.72 GiB | No | Exact GGUF reference/requantization source |
| `Ling-3.0-tiny-Q8_0.gguf` | Q8_0 | 7.83 GiB | No | Highest-fidelity quantized option |
| `Ling-3.0-tiny-Q6_K.gguf` | Q6_K | 6.05 GiB | Yes | Quality-first practical choice |
| `Ling-3.0-tiny-Q5_K_M.gguf` | Q5_K_M | 5.25 GiB | Yes | Recommended quality/size balance |
| `Ling-3.0-tiny-Q4_K_M.gguf` | Q4_K_M | 4.49 GiB | Yes | Recommended lower-memory default |
| `Ling-3.0-tiny-Q4_K_S.gguf` | Q4_K_S | 4.24 GiB | Yes | Smaller K-quant alternative |
| `Ling-3.0-tiny-IQ4_XS.gguf` | IQ4_XS | 3.99 GiB | Yes | Most compact 4-bit option |
| `Ling-3.0-tiny-Q3_K_M.gguf` | Q3_K_M | 3.58 GiB | Yes | Larger K-quant 3-bit tier |
| `Ling-3.0-tiny-IQ3_M.gguf` | IQ3_M | 3.31 GiB | Yes | Smaller 3-bit tier |
| `Ling-3.0-tiny-IQ2_M.gguf` | IQ2_M | 2.52 GiB | Yes | Extreme compression; substantial loss |
| `Ling-3.0-tiny-imatrix.gguf` | Auxiliary | 41.98 MiB | — | Reproducing importance-aware quants |
If memory permits, prefer Q6_K or Q8_0 for fidelity. Q5_K_M is the
quality-oriented general recommendation; Q4_K_M is the lower-memory default.
IQ3_M and IQ2_M are specialized memory-constrained choices; the measured loss
at IQ2_M is large enough that it should not be a default. File size is not
total runtime memory: context length, state/KV caches, backend, and GPU offload
add overhead. IQ backend support varies, so use the pinned runtime until
equivalent BailingMoE3 support lands elsewhere.
Checksums are in [`SHA256SUMS`](./SHA256SUMS).
## Download and run
```bash
hf download Mike0021/Ling-3.0-tiny-GGUF \
--include "Ling-3.0-tiny-Q5_K_M.gguf" \
--local-dir ./models
```
Build the tested unmerged runtime (review the PR before running it):
```bash
git clone --filter=blob:none https://github.com/ggml-org/llama.cpp.git
git -C llama.cpp fetch origin refs/pull/26608/head:pr-26608
git -C llama.cpp checkout d8d862521e9ad842f2b47f3b392b039317782aa0
cmake -S llama.cpp -B llama.cpp/build -DGGML_CUDA=ON -DGGML_NATIVE=OFF
cmake --build llama.cpp/build --config Release --parallel
```
For a CPU-only build, omit `-DGGML_CUDA=ON`. This server example deliberately
starts at 8K context to keep memory moderate:
```bash
./llama.cpp/build/bin/llama-server \
-m ./models/Ling-3.0-tiny-Q5_K_M.gguf \
--alias ling-3.0-tiny --host 127.0.0.1 --port 8080 \
--jinja -c 8192 -ngl 999
```
```bash
curl http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "ling-3.0-tiny",
"messages": [{"role": "user", "content": "What is the capital of France?"}],
"temperature": 1.0,
"top_p": 0.95,
"top_k": 20,
"stream": false
}'
```
These sampling settings follow the original model's recommendations. Thinking
is enabled by the embedded source chat template by default.
To disable thinking in the pinned server, pass
`"chat_template_kwargs":{"enable_thinking":false}` in the request. Keep
`--jinja` enabled so the embedded template is applied.
The pinned runtime logs `special_eos_id is not in special_eog_ids` while
loading this tokenizer. The raw arithmetic reference stopped on token 156895
in Transformers, and Q4_K_M server stop behavior was tested as described
below, but the warning is preserved here because it has not yet been resolved
upstream.
## Conversion provenance
| Item | Value |
|---|---|
| Source | `inclusionAI/Ling-3.0-tiny@a2ee06c0f2de5b171701aee7f73f70a1da75483b` |
| Source weights | 32 safetensors shards, 15,787,992,416 bytes |
| Converter/runtime | `aetherbird/llama.cpp@d8d862521e9ad842f2b47f3b392b039317782aa0` (upstream PR #26608) |
| Conversion | BF16 GGUF, then every quant directly from BF16 |
| Detailed provenance | [`conversion_manifest.json`](./conversion_manifest.json) |
| Source shard hashes | [`source-safetensors.sha256`](./source-safetensors.sha256) |
| Core reproduction commands | [`REPRODUCE.md`](./REPRODUCE.md) |
## Importance-matrix calibration
Importance-aware files used two complementary, pinned calibration sources.
The primary corpus was
[`lemon07r/bartowski-imatrix-v5-semantic`](https://huggingface.co/datasets/lemon07r/bartowski-imatrix-v5-semantic/tree/a306f203ee4323e0afe846ae02c2daafe17384d9)
at revision `a306f203ee4323e0afe846ae02c2daafe17384d9`. Its 2,075 semantic
samples span 13 languages and include code, math, science, dialogue, and Q&A,
which is substantially broader than English-only WikiText calibration.
An additive second pass used `combined_all_micro.parquet` from
[`eaddario/imatrix-calibration`](https://huggingface.co/datasets/eaddario/imatrix-calibration/tree/e87ed55dcba9d9c3a3e41539f3e728e981b1daa4)
at revision `e87ed55dcba9d9c3a3e41539f3e728e981b1daa4`. This MIT-licensed
mixture adds multilingual text plus tool-use, math, and code prompts. It was
added because the first pass left one routed expert unobserved in one layer;
the release gate requires every routed-expert slot to have a nonzero count.
- Input: `bartowski-imatrix-v5-semantic.txt`
- SHA-256: `ff879b5a748f822ef539e43c596a3f44ab922f0295ee209d4220d9f86e86a063`
- 1,496,006 bytes; 6,318 serialized lines
- Supplement parquet SHA-256:
`94389921e1f67b180a99de28c3090b41ce6f1960eb13abad21b7eba7cbe11b26`
- Extracted supplement SHA-256:
`fdb2d41abf04a2fb207502741a561a5a9ab385eb0c44a450eae676c410955946`
(1,008,653 bytes; 3,130 serialized lines)
- Context / batch / ubatch: 4096 / 4096 / 512
- Complete 4,096-token chunks processed: 162
(663,552 tokens); 5,338 trailing tokens excluded
- Matrix entries: 332
- Per-expert count values: 8,832
- Routed-expert slots with zero observations: 0
The matrix is the modern GGUF imatrix format. It contains 69 expert-count
vectors of length 128 (8,832 layer/tensor expert slots); “zero” is measured
over those slots, not over 128 globally unique expert IDs. Output-tensor
statistics were intentionally not collected: the pinned llama.cpp imatrix
documentation says it is typically better not to use importance statistics
when quantizing `output.weight`, and therefore defaults `--process-output` to
false.
Observed per-slot counts ranged from 16 to 326,023 (median 33,514); a
distribution summary and the lowest-count slots are recorded in
`validation/imatrix.json`.
The final matrix SHA-256 is
`e8b15d131f9ce294f922c5c387f7a69829c12100d6a35bb1635a2b859083c3f0`.
`llama-quantize` embeds only one `quantize.imatrix.dataset` scalar, so the
importance-aware model files name the primary corpus even though the final
matrix contains both ordered passes. The manifest is the authoritative record
of the two-source lineage. It also records the absolute paths embedded by the
quantizer; changing those paths can preserve tensor values while changing the
GGUF file hash.
The corpus was used only to collect activation statistics. It was not used to
train or fine-tune the model and is not an evaluation set.
## Held-out validation
Validation used the separate WikiText-2 test file from
`ggml-org/ci@927b3642933080f1b0e811e2f916e14c292992f9`; this file was not
used for imatrix collection. Content-level uniqueness from all calibration
material or from the model's original pretraining data is not asserted. The
extracted `wiki.test.raw` SHA-256 is
`173c87a53759e0201f33e0ccf978e510c2042d7f2cb78229d9a50d79b9e7dd08`.
PPL and BF16-relative KLD used 32 fixed sequential chunks at
context/batch/ubatch 512, scoring
8,160 held-out tokens. Exact commands are in
[`REPRODUCE.md`](./REPRODUCE.md), and machine-readable results are under
[`validation/`](./validation/).
| Artifact | Loads | Greedy raw vs HF BF16 | PPL ± SE | ΔPPL | Mean KLD ± SE (nats) |
|---|:---:|:---:|---:|---:|---:|
| BF16 self | Pass | Exact | 11.901303 ± 0.415179 | +0.033176 | 0.000000 ± 0.000000 |
| Q8_0 | Pass | Exact | 11.812842 ± 0.410345 | −0.055285 | 0.011688 ± 0.000329 |
| Q6_K | Pass | Exact | 11.873857 ± 0.413599 | +0.005730 | 0.023357 ± 0.000625 |
| Q5_K_M | Pass | Exact | 12.087854 ± 0.422594 | +0.219727 | 0.053244 ± 0.001318 |
| Q4_K_M | Pass | Exact | 12.651529 ± 0.447483 | +0.783402 | 0.130069 ± 0.003051 |
| Q4_K_S | Pass | Exact | 12.608386 ± 0.443531 | +0.740259 | 0.138631 ± 0.003234 |
| IQ4_XS | Pass | Exact | 12.640906 ± 0.445231 | +0.772779 | 0.155524 ± 0.003489 |
| Q3_K_M | Pass | Exact | 13.649613 ± 0.484819 | +1.781486 | 0.301154 ± 0.006362 |
| IQ3_M | Pass | Exact | 12.967071 ± 0.446764 | +1.098944 | 0.312063 ± 0.006496 |
| IQ2_M | Pass | Exact | 16.362374 ± 0.564546 | +4.494247 | 0.696147 ± 0.011718 |
These tests measure conversion and quantization behavior, not general model
capability or safety. Results are comparable only under the documented
tokenizer, context, chunk, and pinned-runtime settings. The stored BF16
reference has PPL 11.868127 ± 0.412222. BF16 self-comparison establishes the
uint16 stored-log-probability/backend resolution; mean KLD rounded to 0.000000
nats in this run. Small negative ΔPPL values, such as Q8_0, are within sampling
uncertainty and do not mean the quant is better than BF16.
“Loads” means the pinned runtime completed its tensor integrity/load check and
a graph evaluation. “Greedy raw vs HF BF16” compares a deterministic 12-token
continuation against a separately generated Transformers BF16 reference. The
validator binds both runtimes to the exact same full prompt; all ten artifacts
matched this one shallow case exactly. This is a conversion smoke test, not a
claim that quantized logits or arbitrary generations equal BF16. All six
tokenizer test cases, including Chinese, code, whitespace, multilingual text,
and special tokens, matched Transformers token IDs exactly.
Q6_K contains six Q8_0 fallbacks because those narrow MLA tensors cannot use
the requested block width. The 3-bit and 2-bit files likewise contain exactly
six documented MLA fallbacks. Their complete tensor-type inventories are in
the structure reports and manifest.
### Matrix ablation
A direct Q4_K_M A/B against a temporary no-matrix quant gave mixed evidence.
The matrix lowered the mean KLD point estimate from 0.131547 to 0.130069 nats
and raised the same-top-token point estimate from 84.596% to 85.221%, while
PPL moved from 12.357816 to 12.651529. This is not presented as a universal
quality gain; the broader calibration coverage and those KLD/same-top point
estimate shifts motivated retaining the matrix build. See
[`kld-Q4_K_M-ab.json`](./validation/kld-Q4_K_M-ab.json).
### Fixed multiple-choice collapse screen
The pinned `mmlu-validation.bin` contains 1,548 four-choice tasks. A fixed
seed-1 subset of 500 was used as a regression/collapse check, not as a model
capability benchmark. The tool's log says “TruthfulQA,” but the supplied input
is the pinned MMLU validation binary (SHA-256
`470af3a74eccacfaf6f43b08aabf510f61e6c92fe20d17241ded934151e225fa`).
| Artifact | Accuracy ± SE |
|---|---:|
| BF16 | 38.2% ± 2.1751% |
| Q5_K_M | 39.0% ± 2.1835% |
| Q4_K_M | 38.8% ± 2.1814% |
| Q4_K_S | 39.0% ± 2.1835% |
| IQ4_XS | 37.2% ± 2.1637% |
| Q3_K_M | 37.8% ± 2.1707% |
| IQ3_M | 37.8% ± 2.1707% |
| IQ2_M | 34.8% ± 2.1324% |
Random chance was 25.0% ± 1.9384%. Q8_0 and Q6_K were not run through this
auxiliary screen; their held-out KLD results are the stronger fidelity evidence.
### Long-context and server checks
BF16, Q4_K_M, and the most aggressive IQ2_M completed a one-chunk 32,768-token
perplexity/prefill evaluation at batch 4,096: respectively 23.3709, 25.7803,
and 34.6812 PPL. Other artifacts were validated at context 512. The checkpoint's
native 131,072-token limit and the external 256K YaRN configuration were not
exercised.
Q4_K_M was also tested through `llama-server --jinja`. Thinking-disabled and
thinking-enabled requests both stopped normally, the latter exposed separate
reasoning content, a Chinese prompt returned `巴黎`, and a required
tool request produced `get_weather` with both `location=Paris` and
`unit=celsius` arguments and `finish_reason=tool_calls`. These server results
apply to Q4_K_M; they are not generalized to every quant.
### Rejected candidates
Two generated candidates were deliberately not published. IQ4_NL was only
28,606,464 bytes smaller than Q4_K_S while its KLD rose from 0.138631 to
0.149734. MXFP4_MOE passed an exact 69-tensor routed-expert whitelist, but at
4,718,248,800 bytes and 0.267021 KLD it was larger and much less faithful than
Q4_K_S. On the tested RTX PRO 4500 Blackwell it improved 512-token prompt
throughput by 17.9% but reduced 128-token generation throughput by 8.2%.
Full measurements are in
[`rejected-candidates.json`](./validation/rejected-candidates.json).
As a post-hoc independent cross-check, the canonical BF16 and Q8_0 SHA-256
values exactly match
[`bloomer010/Ling-3.0-tiny-GGUF@598201`](https://huggingface.co/bloomer010/Ling-3.0-tiny-GGUF/tree/59820116411687d44e1333816609afca8c93aa0b).
That repository was not used as a weight source.
## Limitations and attribution
- Runtime support is experimental and tied to an unmerged llama.cpp revision.
- Quantization can change factuality, reasoning, tool-call formatting, and
multilingual behavior; validate the chosen file on your workload.
- Long contexts add substantial memory and were not exhaustively exercised for
every artifact.
- No new safety evaluation was performed. The source model's limitations and
acceptable-use considerations still apply.
- This is an unofficial conversion, not endorsed by InclusionAI, Hugging Face,
or llama.cpp maintainers.
The source card declares the MIT license. Original authorship belongs to
InclusionAI; this repository provides an unofficial format conversion by
Mike0021.