---
title: Ling-3.0-tiny-UBTree
canonical_url: "https://www.modelscope.cn/models/inclusionAI/Ling-3.0-tiny-UBTree"
md_url: "https://www.modelscope.cn/models/inclusionAI/Ling-3.0-tiny-UBTree.md"
repository: inclusionAI/Ling-3.0-tiny-UBTree
last_updated: 2026-10-28
license: mit
pipeline_tag: text-generation
tasks:
  - text-generation
model_type:
  - qwen3
architectures:
  - Ling3UBTreeModel
base_model:
  - inclusionAI/Ling-3.0-tiny
base_model_relation: finetune
parameters: 183.1M
tensor_type:
  - BF16
library_name:
  - safetensors
  - pytorch
frameworks:
  - pytorch
language:
  - zh
  - en
downloads: 26
stars: 1
tags:
  - speculative-decoding
  - tree-speculative-decoding
  - ubtree
  - dflash
  - sglang
  - ling3
  - "arxiv:2609.39972"
---

# Ling-3.0-tiny-UBTree

> Ling-3.0-tiny-UBTree - inclusionAI 在 ModelScope 开源的模型。Ling3-Tiny-UBTree-B16

inclusionAI/Ling-3.0-tiny-UBTree 是 ModelScope 魔搭社区上的 183.1M 参数text-generation模型，采用 mit 许可，基于 inclusionAI/Ling-3.0-tiny 构建。

- **Repository**: inclusionAI/Ling-3.0-tiny-UBTree
- **License**: mit
- **Tasks**: text-generation
- **Parameters**: 183.1M
- **Base model**: inclusionAI/Ling-3.0-tiny
- **Tags**: speculative-decoding, tree-speculative-decoding, ubtree, dflash, sglang, ling3, arxiv:2609.39972
- **Downloads**: 26
- **Stars**: 1
- **Last updated**: 2026-10-28

Source: https://www.modelscope.cn/models/inclusionAI/Ling-3.0-tiny-UBTree

---

# Ling3-Tiny-UBTree-B16

[Website](https://www.inclusion-ai.org/ubtree) · [Paper](https://www.inclusion-ai.org/ubtree/UBTree.pdf) · [Target model](https://huggingface.co/inclusionAI/Ling-3.0-tiny)

**Ling3-Tiny-UBTree-B16** is a UBTree speculative-decoding draft model for
[inclusionAI/Ling-3.0-tiny](https://huggingface.co/inclusionAI/Ling-3.0-tiny). It combines a
five-layer DFlash backbone with a learned bigram selector to propose multiple
candidate continuations for target-model verification.

This checkpoint is used alongside the matching target model; it cannot serve
as a standalone text-generation model.

## How UBTree works

![UBTree architecture and tree-native training pipeline](assets/ubtree_pipeline.png)

*UBTree pipeline*

UBTree pairs a **unigram proposer** with a **bigram selector**:

1. A DFlash backbone proposes candidate tokens for future positions in parallel.
2. The selector scores transitions between adjacent candidates in parallel.
3. Tree construction retains promising branches within a verification budget.
4. The target verifies the tree and commits the accepted continuation.

The paper also introduces tree-native training with renormalized KL supervision
on high-temperature target traces, encouraging plausible alternative branches.
See the [paper](https://arxiv.org/abs/2609.39972) for the method and experiments.

## Model specifications

| Item | Value |
|---|---|
| Target model | [inclusionAI/Ling-3.0-tiny](https://huggingface.co/inclusionAI/Ling-3.0-tiny) |
| Draft architecture | `Ling3UBTreeModel` |
| Draft backbone | 5 full-attention Transformer layers |
| Parameters stored in this checkpoint | 183,127,326 (183.1M) |
| Weight dtype | BF16 |
| Hidden size | 1,536 |
| Attention heads / KV heads | 16 / 16 |
| Target auxiliary feature layers (zero-based) | 4, 8, 12, 16, 22 |
| Draft block size | 16 (anchor-inclusive runtime convention) |
| Candidate top-k | 64 per draft position |
| Default verification tree budget | 64 non-root nodes + 1 anchor |
| Training | DFlash warm start, then joint backbone + UBTree selector training |

The parameter count covers tensors distributed in this repository. The draft
shares token embeddings and the language-model head with the target; these
shared weights are not included here. B16 denotes the draft block size, not
the verification tree's node budget.

## Serving with SGLang

Use the [`asahi/ubtree` SGLang branch](https://github.com/AsaHIXx/sglang/tree/asahi/ubtree) for the commands below.
Upstream integration is in progress in [sgl-project/sglang#44050](https://github.com/sgl-project/sglang/pull/44050).

```bash
CUDA_VISIBLE_DEVICES=0 \
SGLANG_OPT_FA3_VERIFY_METADATA_IN_GRAPH=1 \
SGLANG_OPT_UBTREE_FA3_TREE_ONLY_MASK=1 \
python -m sglang.launch_server \
  --model-path /path/to/ling3-tiny \
  --served-model-name ling3-tiny \
  --tp-size 1 \
  --host 0.0.0.0 \
  --port 30000 \
  --attention-backend fa3 \
  --page-size 1 \
  --context-length 4096 \
  --max-total-tokens 4096 \
  --max-running-requests 1 \
  --mem-fraction-static 0.80 \
  --max-prefill-tokens 4096 \
  --chunked-prefill-size 4096 \
  --disable-radix-cache \
  --mamba-backend triton \
  --linear-attn-backend triton \
  --linear-attn-verify-backend triton \
  --mamba-ssm-dtype float32 \
  --cuda-graph-backend-prefill disabled \
  --cuda-graph-backend-decode full \
  --cuda-graph-bs-decode 1 \
  --disable-cuda-graph-padding \
  --tool-call-parser ling3 \
  --reasoning-parser ling3 \
  --trust-remote-code \
  --speculative-algorithm UBTREE \
  --speculative-draft-model-path /path/to/ling3-tiny-ubtree \
  --speculative-num-draft-tokens 49
```

## Benchmark results

All methods use **block size 16**, TP1, concurrency 1, BF16, and greedy
no-thinking decoding. UBTree uses a 49-node tree.

Each cell shows **acceptance length / E2E speedup / TPS (tok/s)**.
E2E speedup is relative to target-only autoregressive (AR) decoding.

| Dataset | UBTree | DFlash | DSpark |
|---|---:|---:|---:|
| GSM8K | **9.53 / 3.055× / 1376.4** | 6.57 / 2.665× / 1200.7 | 7.53 / 2.718× / 1224.7 |
| MATH-500 | **9.86 / 3.518× / 1648.2** | 5.74 / 2.643× / 1238.2 | 6.96 / 2.826× / 1323.7 |
| AIME 2025 | **8.44 / 3.152× / 1495.4** | 4.76 / 2.261× / 1072.5 | 5.37 / 2.263× / 1073.7 |
| HumanEval | **10.04 / 3.411× / 1572.9** | 6.39 / 2.770× / 1277.5 | 7.59 / 2.914× / 1344.0 |
| MBPP | **9.35 / 3.062× / 1390.8** | 5.87 / 2.473× / 1123.3 | 7.16 / 2.678× / 1216.5 |
| LiveCodeBench | **7.46 / 2.794× / 1321.0** | 4.11 / 1.948× / 921.2 | 4.84 / 2.030× / 959.8 |
| **Avg. (6 datasets)** | **9.11 / 3.165× / 1467.4** | 5.57 / 2.460× / 1138.9 | 6.57 / 2.572× / 1190.4 |

TPS is total returned output tokens divided by total client HTTP time,
including prefill and generation. Acceptance length is returned output tokens
divided by target verification calls, including the anchor. Speculative AL and
TPS are independent medians over three runs; E2E speedup is speculative TPS
divided by the matched AR TPS. AR uses one run per benchmark.

Each Avg. value is the arithmetic mean of the six per-dataset values,
computed before display rounding. Average speedup is the mean of per-dataset
speedups, rather than the ratio of average TPS.

## Citation

If you use UBTree in your work, please cite:

```bibtex
@article{liang2026ubtree,
  title   = {UBTree: Parallel Tree Drafting via Unigram and Bigram Models for Speculative Decoding},
  author  = {Liang, Chumeng and Wang, Linxuan and Peng, Xinyu and Liu, Huabin and Chen, Yuxin and Liu, Ge and Lin, Guang and Song, Qifan and Li, Jianguo},
  journal = {arXiv preprint arXiv:2609.39972},
  year    = {2026},
  url     = {https://arxiv.org/abs/2609.39972}
}
```

## License

The model weights are released under the **MIT License**. The pipeline figure
is from [Liang et al., Figure 2](https://arxiv.org/html/2609.39972v1#S2.F2),
reproduced without modification under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
