Qwen3.8-27B-MMFlash

MMFlash draft model for speculative decoding of Qwen/Qwen3.8-27B on image and text inputs. It is not a standalone language model; it is paired with the target model in a speculative-decoding server (SGLang DFLASH).

MMFlash builds on DFlash block-diffusion drafting: the draft reads hidden states from five layers of the target and proposes a block of 16 tokens in one forward pass, and the target verifies the block in one forward pass. MMFlash keeps the DFlash architecture and is trained on multimodal data with a loss weighted by per-token visual-grounding (visual-KL) scores.

Qwen3.5-9B on a MathVista question, recorded in real time on one NVIDIA H200 with SGLang (greedy decoding).

Need a drafter for another model? Email us at fscnkucs@gmail.com and we can help train one. We will keep updating these releases, and a Qwen4 checkpoint is planned.

Model details

Target model Qwen/Qwen3.8-27B
Parameters 1.73B (bf16)
Block size 16
Target hidden states layers 1, 16, 31, 46, 61 (of 64)

Usage

SGLang

SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1 python -m sglang.launch_server \
  --model-path Qwen/Qwen3.8-27B \
  --speculative-algorithm DFLASH \
  --speculative-draft-model-path FSCCS/Qwen3.8-27B-MMFlash \
  --speculative-dflash-block-size 16 \
  --attention-backend fa3 \
  --mm-attention-backend sdpa \
  --disable-radix-cache \
  --max-running-requests 16 \
  --reasoning-parser qwen3 \
  --trust-remote-code

--max-running-requests 16 is required with --disable-radix-cache: SGLang then reserves about 2.3 GB of GDN verification states per allowed request at startup, and the default of 48 requests does not fit on one H200.

vLLM

vllm serve Qwen/Qwen3.8-27B \
  --dtype bfloat16 \
  --max-model-len 32768 \
  --attention-backend FLASH_ATTN \
  --reasoning-parser qwen3 \
  --speculative-config '{"method": "dflash", "model": "FSCCS/Qwen3.8-27B-MMFlash", "num_speculative_tokens": 15}'

Tested with vLLM 0.32.0, which serves DFlash drafts natively. num_speculative_tokens is the block size minus one.

Results

Each cell is ฯ„ / speedup: ฯ„ is the average acceptance length (tokens accepted per verification step), and the speedup is the decoding throughput over Qwen3.8-27B without speculative decoding.

Temperature 0

Method ChartQA MMStar DynaMath
MTP (15) 6.36 / 2.47ร— 5.25 / 2.16ร— 6.63 / 2.68ร—
MMFlash (16) 6.37 / 4.18ร— 5.36 / 3.54ร— 7.57 / 4.71ร—

Values in parentheses are the number of draft steps for MTP and the block size for MMFlash. MTP is Qwen3.8-27B's built-in multi-token-prediction head.

Concurrency (temperature 0)

MMFlash at 1, 8 and 32 requests in flight, on a single NVIDIA H200. Each cell is the decode throughput in tokens/s, with the speedup over Qwen3.8-27B alone at the same concurrency in parentheses.

Concurrency ChartQA CharXiv MMStar MMBench DynaMath MathVista MathVerse Avg.
1 277 (4.18ร—) 286 (4.33ร—) 234 (3.54ร—) 209 (3.16ร—) 311 (4.71ร—) 278 (4.20ร—) 296 (4.48ร—) 270 (4.09ร—)
8 762 (1.86ร—) 907 (2.22ร—) 927 (2.14ร—) 606 (1.43ร—) 1,300 (3.01ร—) 1,032 (2.39ร—) 1,169 (2.66ร—) 958 (2.24ร—)
32 932 (1.15ร—) 1,320 (1.40ร—) 1,211 (1.11ร—) 946 (1.48ร—) 1,627 (1.59ร—) 1,405 (1.32ร—) 1,628 (1.22ร—) 1,295 (1.32ร—)

For Qwen3.8-27B, concurrency 8 and 32 were served with --disable-radix-cache --mem-fraction-static 0.9. With the radix cache, SGLang keeps five state slots per request, and the MMFlash server held only 6 requests. At 32 in flight, the MMFlash server still holds at most 24 requests, because the GDN verification states take about 2.3 GB per request; the target alone holds 32.

Citation

Coming soon.

Downloads last month
5
Safetensors
Model size
2B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for FSCCS/Qwen3.8-27B-MMFlash

Base model

Qwen/Qwen3.8-27B
Finetuned
(895)
this model

Collection including FSCCS/Qwen3.8-27B-MMFlash