Ling-3.0-tiny-ONNX / README.md
webbrain-one's picture
Document
4ef5383 verified
|
Raw
History Blame Contribute Delete
7.15 kB
---
license: mit
base_model: inclusionAI/Ling-3.0-tiny
library_name: transformers.js
pipeline_tag: text-generation
tags:
- onnx
- transformers.js
- webgpu
- onnxruntime
- onnxruntime-genai
- q4
- q4f16
- int4
- cuda
- moe
- text-generation
---
# Ling-3.0-tiny ONNX — Q4 WebGPU + CUDA
Community ONNX conversion of
[`inclusionAI/Ling-3.0-tiny`](https://huggingface.co/inclusionAI/Ling-3.0-tiny),
a 7.9B-total / 1.3B-active-parameter hybrid reasoning MoE model.
> [!IMPORTANT]
> This is an independent community conversion, not an official inclusionAI
> release. Read the [original model card](https://huggingface.co/inclusionAI/Ling-3.0-tiny)
> for training, evaluation, intended use, and base-model limitations.
| Target | Files | Runtime | Download |
|---|---|---|---:|
| Browser WebGPU | `onnx/model_q4f16.onnx` + 3 data shards | Transformers.js 4.2+ | 4.849 GB / 4.516 GiB |
| NVIDIA CUDA | `model.onnx` + `model.onnx.data` | ONNX Runtime GenAI | 4.849 GB / 4.516 GiB |
The WebGPU layout follows the standard Transformers.js `q4f16` contract used
by browser-oriented ONNX repositories: the graph is under `onnx/`, external
tensor data is split into three sub-2 GB files, activations and cache are FP16,
and hybrid recurrent-cache names use the Qwen3.5-compatible convention already
supported by Transformers.js.
## Run in the browser with WebGPU
Install Transformers.js 4.2 or newer:
```bash
npm install "@huggingface/transformers@^4.2.0"
```
```javascript
import { pipeline, TextStreamer } from '@huggingface/transformers';
const generator = await pipeline(
'text-generation',
'webbrain-one/Ling-3.0-tiny-ONNX',
{
device: 'webgpu',
dtype: 'q4f16',
},
);
const messages = [
{ role: 'user', content: 'Explain why the sky is blue in two sentences.' },
];
const output = await generator(messages, {
max_new_tokens: 128,
do_sample: false,
tokenizer_encode_kwargs: { enable_thinking: false },
streamer: new TextStreamer(generator.tokenizer, {
skip_prompt: true,
skip_special_tokens: true,
}),
});
console.log(output[0].generated_text.at(-1)?.content);
```
For thinking mode, set `enable_thinking: true`. The original model card
recommends `temperature: 1.0`, `top_p: 0.95`, and `top_k: 20` when sampling in
thinking mode.
### Browser requirements
- A current desktop browser with WebGPU enabled; Chrome or Edge is recommended.
- Approximately 4.85 GB of model downloads on first load, plus browser cache.
- Enough GPU memory for all weights, runtime buffers, state, and the requested
context. The 1.3B active-parameter figure reduces compute, but all 7.9B model
parameters still need to be stored.
- Start with a short prompt and modest `max_new_tokens`, then increase context
after confirming memory use on the target device.
The validation machine had two discrete NVIDIA GPUs, and Chromium selected the
display-connected adapter. On multi-GPU systems, check the adapter selected by
the browser rather than assuming it will match a CUDA compute workload.
This graph depends on WebGPU implementations of `MatMulNBits`, `QMoE`,
`LinearAttention`, `CausalConvWithState`, and `GroupQueryAttention`. It is not a
WASM/CPU fallback model.
## Use from WebBrain
Use the same repository ID and standard Transformers.js settings:
```text
model: webbrain-one/Ling-3.0-tiny-ONNX
device: webgpu
dtype: q4f16
task: text-generation
```
WebBrain should select `onnx/model_q4f16.onnx` and fetch the three external-data
files declared by `config.json`.
## Run the CUDA variant with Python
The repository also retains the separately validated CUDA-targeted ONNX Runtime
GenAI graph.
```bash
pip install "onnxruntime-gpu>=1.28.0" \
"onnxruntime-genai-cuda>=0.15.2" \
"transformers>=4.57,<5"
```
```python
import numpy as np
import onnxruntime_genai as og
from transformers import AutoTokenizer
model_dir = "Ling-3.0-tiny-ONNX"
model = og.Model(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
input_ids = tokenizer.apply_chat_template(
[{"role": "user", "content": "Explain why the sky is blue."}],
add_generation_prompt=True,
tokenize=True,
return_tensors="np",
enable_thinking=False,
)
params = og.GeneratorParams(model)
params.set_search_options(
max_length=int(input_ids.shape[-1]) + 128,
do_sample=False,
)
generator = og.Generator(model, params)
generator.append_tokens(np.asarray(input_ids[0], dtype=np.int32))
prompt_length = int(input_ids.shape[-1])
while not generator.is_done():
generator.generate_next_token()
print(tokenizer.decode(generator.get_sequence(0)[prompt_length:], skip_special_tokens=True))
```
## Architecture and quantization
- 18 Kimi Delta Attention layers with recurrent and convolution state
- 6 Multi-Latent Attention layers with KV cache
- 23 sparse MoE layers with 128 routed experts, top-8 group-limited routing,
expert bias, and one shared expert
- one dense MLP layer at the start of the decoder
- symmetric Q4/block-32 dense and routed-expert weights
- FP16 embeddings, activations, recurrent state, and KV cache
- FP32 MoE router weights and routing math
The ONNX graph contains 235 `MatMulNBits`, 23 `QMoE`, 18 `LinearAttention`,
18 `CausalConvWithState`, and 6 `GroupQueryAttention` nodes.
## Validation
- The complete CUDA artifact generated successfully on an NVIDIA GeForce RTX
5090 with ONNX Runtime GenAI 0.15.2 and ONNX Runtime GPU 1.28.0.
- The WebGPU repack was verified tensor-for-tensor against the CUDA graph; all
4,835,749,912 external tensor bytes are identical.
- Transformers.js 4.2.0 loads the config, dispatches `Qwen3_5ForCausalLM`, finds
all 18 recurrent/conv caches and 6 attention caches, and applies the original
Ling tokenizer/chat template.
- A full remote-repository test passed in Chrome 150 with Transformers.js 4.2.0
on an NVIDIA T400 4GB WebGPU adapter using Windows shared-memory
oversubscription. First load/session creation took 925.87 seconds; a
deterministic 16-token generation took 90.18 seconds and produced a coherent
answer. This is a compatibility smoke test, not a performance benchmark.
## Limitations
- Q4 quantization can change outputs and quality relative to the original BF16
checkpoint. No benchmark parity claim is made here.
- Browser support, GPU limits, shader compilation time, and memory behavior vary
by operating system, browser version, and GPU driver.
- The advertised 131,072-token context is architectural; practical browser
context is limited by available GPU memory.
- The WebGPU config uses Transformers.js's existing `qwen3_5_text` hybrid-cache
adapter solely as a runtime compatibility layer. The underlying graph and
weights remain Ling/Bailing Hybrid, preserved in
`config_bailing_original.json`.
## Attribution and license
The model architecture, checkpoint, tokenizer, and chat template are by
[`inclusionAI`](https://huggingface.co/inclusionAI). This conversion retains the
base model's MIT license. Please cite and credit the
[original Ling-3.0-tiny release](https://huggingface.co/inclusionAI/Ling-3.0-tiny)
when using or redistributing this artifact.