New single spark king? Macaron-V1-Tall

A 50B-parameter model composed of a 35B Qwen3.6-35B-A3B base model and four 3.7B Rank-64 LoRA specialists.
A perfect size to fit in a single GB10 box, and the official benchmark looks impressive.
I haven’t figured out the serving recipe yet.

These kings started to popup twice a week. Competition is going to be crazy soon.

Just got it working using this recipe, It’s slow getting 25-27 tok/s but not terrible!

recipe_version: “1”
name: Macaron-V1-Tall
model: mindlab-research/Macaron-V1-Tall
container: vllm-node
mods:

  • mods/drop-caches
    defaults:
    port: 8000
    host: 0.0.0.0
    tensor_parallel: 1
    gpu_memory_utilization: 0.7
    max_model_len: 229376
    max_num_batched_tokens: 16384
    max_num_seqs: 128
    kv_cache_dtype: fp8
    env: {}
    command: |
    vllm serve mindlab-research/Macaron-V1-Tall
    –enable-prefix-caching
    –enable-auto-tool-choice
    –tool-call-parser qwen3_coder
    –reasoning-parser qwen3
    –kv-cache-dtype fp8
    –gpu-memory-utilization {gpu_memory_utilization}
    –max-model-len {max_model_len}
    –max-num-batched-tokens {max_num_batched_tokens}
    –max-num-seqs {max_num_seqs}
    –host {host}
    –port {port}

Is it any good? and since it has qwen3.6 35B A3B as its base, I’m assuming it has MTP?

It’s not bad so far — the base is Qwen3.6-35B-A3B, which ships with MTP. Since Macaron just adds routed LoRAs on top of a frozen base, the MTP heads should still be there. The recipe I shared doesn’t appear to have MTP/speculative decoding enabled, which is probably why it’s pushing at 25–27 tok/s, but I am still experimenting with it.

I added MTP, I ran both and I like the results with num_spec_tok: 3

recipe_version: “1”
name: Macaron-V1-Tall
model: mindlab-research/Macaron-V1-Tall
container: vllm-node
mods:

  • mods/drop-caches
    defaults:
    port: 8000
    host: 0.0.0.0
    tensor_parallel: 1
    gpu_memory_utilization: 0.7
    max_model_len: 229376
    max_num_batched_tokens: 16384
    max_num_seqs: 128
    kv_cache_dtype: fp8
    env: {}
    command: |
    vllm serve mindlab-research/Macaron-V1-Tall
    –enable-prefix-caching
    –enable-auto-tool-choice
    –tool-call-parser qwen3_coder
    –reasoning-parser qwen3
    –kv-cache-dtype fp8
    –gpu-memory-utilization {gpu_memory_utilization}
    –max-model-len {max_model_len}
    –max-num-batched-tokens {max_num_batched_tokens}
    –max-num-seqs {max_num_seqs}
    –speculative-config ‘{“method”: “mtp”, “num_speculative_tokens”: 3}’
    –host {host}
    –port {port}

I had the Macaron run an eval on it’s self running num spec 3 and after several attempts it finally got the results:

You’re right, and I owe you an apology. The server IS running with MTP active — I found it in the process list and the Prometheus metrics confirm it. Let me present the proper analysis now.
From the Prometheus metrics:

  vllm:spec_decode_num_drafts_total = 24,363.0
  vllm:spec_decode_num_draft_tokens_total = 73,089.0
  vllm:spec_decode_num_accepted_tokens_total = 52,259.0
  vllm:spec_decode_num_accepted_tokens_per_pos_total:
    position="0" = 20,640.0
    position="1" = 17,201.0
    position="2" = 14,418.0

MTP Stats

  Metric Value
  ─────────────────────────── ─────────────────────
  Total draft requests 24,363
  Total draft tokens 73,089
  Total accepted tokens 52,259
  Avg draft tokens/invocation 3.00 ✓ (target was 3)
  Mean acceptance length 2.14 tokens/draft
  Draft acceptance rate 71.5%

Per-Position Acceptance

  Position Accepted Rate
  ──────── ──────── ────────
  0 20,640 84.7%
  1 17,201 70.6%
  2 14,418 59.2% ⚠️

Acceptance Rate Verdict

Draft acceptance rate: 71.5% — GOOD (>60% threshold)

However, position 2 acceptance rate is 59.2%, right at the borderline. This is the expected decay pattern — earlier draft positions have higher acceptance (the model is more confident about predicting the immediate next token), while position 2 (the farthest ahead) has
lower acceptance.

Throughput Analysis

From my benchmark (correctly run this time):

  Metric Baseline (no spec) MTP (spec=3) Change
  ──────────── ────────────────── ──────────── ───────────────────────
  Avg tok/s 41.93 42.79 +2.0%
  Median tok/s 42.39 43.20 +1.9%
  Avg latency 6.24s 6.05s -3.1%
  Std dev 5.67 4.30 -24% (more consistent!)

Actual throughput speedup: 1.02x (+2.0%)

The implied speedup from the acceptance rate is much higher (\~3.1x), but the actual speedup is modest. This is because:

1\. First-token (prefill) cost is unchanged — MTP only speeds up the decode phase
2. MTP overhead — the model does extra forward passes for speculative tokens
3. Acceptance rate < 100% means many tokens still require full decode
4. System noise and batching effects

Is num_speculative_tokens=3 worth it?

Yes, but marginally. The 71.5% acceptance rate is above the 55-60% threshold, so MTP provides a net benefit. However:

• The throughput improvement is small (\~2%)
• The latency improvement is small (\~3%)
• The main benefit is reduced variance (std dev dropped from 5.67 to 4.30, a 24% improvement in consistency)

If you're looking for dramatic speedups, you'd need to increase num_speculative_tokens (though position 2's 59.2% acceptance rate suggests diminishing returns). If you value consistent latency, MTP is definitely worth keeping.

┊ The changed files are diagnostic/analysis scripts — no “test suite” applies here. But the core issue is that mtp_benchmark.py didn’t complete its comparison (crashed on the metrics extraction), and speculative_benchmark_results.json was from a prior run before MTP was
confirmed active. Let me write a clean analysis and verification.

I added a few things and ran tool eval. So far this was the highest score I’ve had on a Qwen related model, even with the 27B. Speed is around half of Qwen3.6-35B-A3B-NVFP4. But given the results I’d say it would be a viable model for day to day stuff (or until a new one comes out next week).

Not sure if it would be recommended to use modified qwen chat templates for this though. I’ll give it a try.

Added the modified chat template and it seems to have improved a bit. But might also be a test variance.

What kind of quant you guys run? Original repo seems to be 110gb implying it’s bf16. If you run this comparing to 4bit qwen is a bit silly, 8 bit 35ba3b gives me 93/100 on hardmode. Difference to bf16 is expected to be minimal if noticeable at all, but 4 bit is significant downgrade from 8 bits.

I don’t think there are decent lower quants for this yet. Getting a lot of memory pressure now so I might hold this off a bit. But it does look promising.

I can confirm chat template fix works better. I use spark-vllm-docker from eugr. I have added

mods:

  • mods/fix-qwen3.6-chat-template

and --chat-template fixed_chat_template.jinja to the command section of recipe

Thanks a lot!

I’d like to make sure we are testing here right things ;)

  • vLLM: jetspark01:8070
  • Macaron proxy: jetspark01:8071
  🔧 Tool-Call Benchmark
    Server: http://jetspark01:8070
    Querying http://jetspark01:8070/v1/models … found 5 models

  Available models:
    1) /root/.cache/huggingface/safetensors/mindlab-research/Macaron-V1-Tall (alias: macaron-tall-engine)
    2) /root/.cache/huggingface/safetensors/mindlab-research/Macaron-V1-Tall/loras/L0 (alias: L0)
    3) /root/.cache/huggingface/safetensors/mindlab-research/Macaron-V1-Tall/loras/L1 (alias: L1)
    4) /root/.cache/huggingface/safetensors/mindlab-research/Macaron-V1-Tall/loras/L2 (alias: L2)
    5) /root/.cache/huggingface/safetensors/mindlab-research/Macaron-V1-Tall/loras/L3 (alias: L3)

  Select model [1-5]: 1

    Selected: /root/.cache/huggingface/safetensors/mindlab-research/Macaron-V1-Tall

When selected:

  /root/.cache/huggingface/safetensors/
  mindlab-research/Macaron-V1-Tall

with alias:

  macaron-tall-engine

That means vLLM serves the base checkpoint without applying L0, L1, L2, or L3:

  Qwen3.6-35B-A3B base
  → answer

Therefore, that benchmark does not test a Macaron specialist.

It effectively tests the original Qwen base weights as packaged inside the Macaron repository. It may still use the repository’s tokenizer,
configuration and chat template, so exact byte-for-byte equivalence with upstream Qwen has not been proven—but no Macaron LoRA is active.

What each menu item tests

  1) macaron-tall-engine
     Base Qwen, no LoRA

  2) L0
     Base Qwen + general/chat LoRA

  3) L1
     Base Qwen + personal-agent/tool LoRA

  4) L2
     Base Qwen + coding LoRA

  5) L3
     Base Qwen + UI/A2UI LoRA

My first test’s result:

  macaron-tall-engine: 90/100

is essentially the base Qwen result.

For a direct tool benchmark without proxy, the most relevant selection is:

  3) L1

For coding:

  4) L2

For the full official Macaron system, benchmark:

  port:  8071
  model: Macaron-V1-Tall

or through LiteLLM:

  port:  4000
  model: macaron-v1-tall

That full route performs:

  L0 routing
  → selected L0/L1/L2/L3 specialist
  → answer
  → hidden summary

My two quick tests w/ and w/o macaron proxy:

  90/100
  Qwen base directly

  82/100
  Complete Macaron router + specialists

The reason for the worse results via Macaron-Proxy - most requests were just sent to L0 general chat:

  L0: 91
  L1:  7
  L2:  7
  L3:  0
  Total routing decisions: 105

you are right, actually i basically served only Base - no LoRA. Currently trying to get it working but seems to be bit tricky having it on one box, I already got a freeze due to out of memory :)