LFM2.5-VL-3B-DSpark MLX drafter (BF16)
What
An MLX-native conversion of Liquid AI's four-layer LFM2.5-VL-3B-DSpark DFlash drafter, using BF16 weights. It is intended to draft tokens for the MLX-VLM LFM2.5-VL-3B target model. It is a speculative-decoding draft model, not a standalone chat or vision-language model.
Model file: model.safetensors (558,942,944 bytes), SHA-256 80d4396d7e407f12794a151065e053206b19261c0c48c688fb0c550e5ac8f635.
Upstream draft source: LiquidAI/LFM2.5-VL-3B-DSpark, pinned at revision af77e9306a26e8625fde74d2a3051ab6d21bd955. Conversion and benchmark code are documented in the source/evaluation repository.
Why
The upstream DSpark checkpoint is distributed in an SGLang-oriented format. This conversion maps it to the MLX-VLM DFlash runtime layout so that Apple Silicon users can load the draft model with an MLX-VLM LFM target.
Why it matters
DFlash proposes multiple tokens per target-model verification step. When the proposal is accepted, the target model's output remains authoritative; at greedy temperature zero, the tested runs produced the same text as target-only decoding. This can reduce decode time for suitable prompts, but the drafter adds work and is not faster for every target precision or context length.
Results
Local, single-machine measurement on an Apple M3 Max with 36 GB unified memory, Python 3.12, mlx 0.32.2, mlx-vlm 0.7.3, and transformers 5.17.0. Short-prompt screen: three instructions against the same image, greedy generation, and two repetitions per prompt/configuration. The run with the lowest end-to-end wall time is retained per prompt/configuration, then throughput and ratios are averaged across prompts; best-of-two selection may be optimistic. results/sweep.json contains the selected rows only, not both repetitions.
| Target precision | Draft block | Target-only decode (mean) | With this drafter (mean) | Decode speed ratio | End-to-end ratio | Accepted tokens/round |
|---|---|---|---|---|---|---|
| BF16 | 8 | 43.6 tok/s | 130.7 tok/s | 2.99x | 2.41x | 4.30 |
| 8-bit | 4 | 74.9 tok/s | 79.2 tok/s | 1.07x | 1.06x | 2.97 |
The selected draft output for each prompt matched its target-only text. These are local results, not a vendor benchmark or a promise of speed on another machine. The 8-bit-target gain is small. The tested full-context sweep used a BF16 target and BF16 draft, and found drafting slower than target-only at 32k and 64k book-context tokens. Do not assume the short-prompt gain extends to long prompts.
How to use
Install compatible Apple-Silicon MLX and MLX-VLM builds, download this drafter and the target model, then run:
python -m mlx_vlm.generate \
--model LiquidAI/LFM2.5-VL-3B-MLX-bf16 \
--draft-model DJLougen/LFM2.5-VL-3B-DSpark-MLX-bf16 \
--draft-block-size 8 --temperature 0 \
--image image.jpg --prompt "Describe this image." --max-tokens 128
The drafter requires mlx-vlm >= 0.7.2; the measurements above used mlx-vlm==0.7.3. DFlash speculation in that runtime is greedy-only; use temperature zero. For the 8-bit target, the measured best setting was block 4 and the short-prompt gain was slight; compare against target-only decoding on your own prompts.
Known issues
- The drafter is for the matching LFM2.5-VL-3B target family and is not a standalone or general-purpose Qwen3 draft model.
- Speculation can be slower than target-only decoding, especially for long contexts or an already-fast target.
- The reported long-context measurements used a BF16 draft only; they do not establish long-context performance for this BF16 drafter on other target variants.
- The source benchmark's 16k results had severe run-to-run variance; no stable recommendation is made for that context length.
- This is an MLX conversion. No SGLang runtime or upstream benchmark is claimed here.
License
The draft weights and associated upstream-derived model artifacts are distributed under Liquid AI's LFM Open License v1.0, as required by the upstream DSpark repository. The source-code repository linked above has a separate Apache-2.0 code license; that license does not apply to these model weights.