MAGI 1.1-2B

Introduction

magi-1.1-2B is Qwen3.5-2B in 1.36 GiB at a 32K context, with the highest capability density we have measured: ฯ = 1.149, 3.0ร— the unquantized BF16 model (0.385 at 4.72 GiB) and above the magi-1.0 recipe applied to the 2B alone (1.071), all measured under the same settings.

It is two steps on top of Qwen/Qwen3.5-2B:

  1. One LoRA fine-tune that teaches the model to finish its thinking. Under greedy decoding the quantized 2B often gets stuck repeating itself until the thinking budget runs out: 82% of its benchmark traces end in a repetition loop, against 49% for the BF16 model. The fine-tune trains on 600 of the model's own correct, short reasoning traces. Part of them are aimed at the prompts on which a first fine-tune still looped under greedy decoding.
  2. The magi-1.0 mixed-precision recipe, unchanged: the same 13 tensor-class rules and the same quantizer, with an importance matrix computed on the 2B. The fine-tune does not change the file size.

The size is the point, not the score: magi-1.1-2B keeps 92% of the BF16 model's score (66.1% against 71.7%) in 3.5ร— less memory. Use the BF16 model if accuracy matters most, magi-1.1-2B if memory is the constraint.

magi-1.1-2B against Qwen3.5-2B BF16: 3.5x less memory, 92% of its score, 3.0x capability per GiB

Capability density

Capability density: magi-1.1-2B 1.149, the magi-1.0 recipe on the 2B 1.071, Qwen3.5-2B BF16 0.385

Capability density is ฯ = โˆ’logโ‚‚(1 โˆ’ score) / GiB: how many times the benchmark error rate is halved per gibibyte of memory. All three models here were measured the same way (llama.cpp, q4_0 KV cache, memory at a 32K context from llama-fit-params). The magi-1.0 card's chart used Ollama's memory figures, so its numbers are not comparable with these.

Benchmarks

Every column was run on one RTX 5070 (12 GB) with llama.cpp b11800 (llama-server) under one protocol:

  • Tasks: 2,313, run with thinking on and a 4,096-token thinking budget (budget forcing), greedy decoding.
  • Server: q4_0 KV cache with flash attention and micro-batch 128 for all three.
  • BF16 model: Unsloth's BF16 GGUF of Qwen3.5-2B (unsloth/Qwen3.5-2B-GGUF, Qwen3.5-2B-BF16.gguf), the unquantized starting point of both magi builds.
  • Code grading: by executing tests (EvalPlus for HumanEval+ and MBPP+). LiveCodeBench uses 150 problems from contests between 2025-01-18 and 2025-04-06.

Memory and ฯ. Memory is the resident size llama-fit-params projects for a 32K context with one sequence: weights, KV cache, recurrent state and compute buffers, GPU plus host, without the CUDA context. Capability density is ฯ = โˆ’logโ‚‚(1 โˆ’ score) / GiB. These sizes are measured differently from the Ollama figures on the magi-1.0 card, so compare ฯ only within this table.

BenchmarkQwen3.5-2B BF16
4.72 GiB
magi-1.0 recipe on 2B
1.36 GiB
magi-1.1-2B
1.36 GiB
Efficiency
Memory at 32K (GiB)4.721.361.36
Benchmark score71.66%63.48%66.06%
Capability density ฯ0.3851.0711.149
Decode speed (tok/s)not measured332338
Traces ending in a loop49.2%82.4%77.4%
Coding
HumanEval+56.1038.4146.95
MBPP+55.6441.3544.61
LiveCodeBench11.330.671.33
Math
GSM8K82.6770.0078.00
Science and Knowledge
ARC-Challenge94.6789.3393.33
MMLU74.5061.0064.00
OpenBookQA86.5074.0077.00
SciQ95.0092.0094.00
TruthfulQA75.5074.5077.50
Commonsense
HellaSwag60.0054.5050.50
WinoGrande68.0066.0065.50
Tool Use
Function calling100.00100.00100.00

magi-1.1-2B against the BF16 model: on the same 2,313 tasks, it scores 5.60 points lower (paired, standard error 0.84; 134 tasks gained, 279 lost) in 3.5ร— less memory. Largest gaps, in points: MBPP+ โˆ’11.0, MMLU โˆ’10.5, LiveCodeBench โˆ’10.0.

magi-1.1-2B against the recipe alone: the fine-tune adds 2.58 points to the benchmark score (paired, standard error 0.82; 222 tasks gained, 163 lost) at the same file size. It still loops on 77% of traces and hits the thinking budget on 81% (BF16: 49% and 62%).

Decode speed: single-stream generation speed (llama-bench, 128 tokens, q4_0 KV), on the same GPU.

Recipe

The same rules as magi-1.0, applied to Qwen3.5-2B's 24 layers (18 Gated DeltaNet, 6 full attention):

Tensor group Type Share of parameters bits/weight
FFN gate, up, down (all 24 layers) IQ3_XXS 48.1% 3.06
Token embedding = tied output head Q4_K 27.0% 4.50
DeltaNet input projection attn_qkv (18) Q4_K 12.0% 4.50
Full-attention q, k, v, output (6 layers) Q4_K 4.7% 4.50
Gated-attention output gate (18 DeltaNet layers) IQ3_XXS 4.0% 3.06
DeltaNet output projection ssm_out (18) Q4_K 4.0% 4.50
DeltaNet gates ssm_alpha, ssm_beta Q8_0 <0.1% 8.50
Norms, convolution, A, ฮ”t bias F32 <0.1% 32.00

The quantizer is llama-quantize --pure from the PrismML-Eng/llama.cpp fork with magi-1.0's override file and base type IQ2_XXS. The importance matrix was computed on Qwen3.5-2B (BF16) from the same calibration text as magi-1.0: 32 reasoning traces for LiveCodeBench problems dated before the benchmark's contest window. File SHA-256: d25e04ce9eef9c1639e944b7147cd86f9ec9a4389d9de983380bc89683f8dc31.

Training

  • Adapter: LoRA rank 16, ฮฑ 32, on all MLP projections and the q/k/v/o projections of the 6 full-attention layers (96 modules).
  • Optimisation: 2 epochs, learning rate 1e-4 (cosine), bf16, on Qwen3.5-2B. The adapter is merged into the BF16 weights before quantization.
  • Data: 600 rows, each a prompt and one of the model's own answers with its thinking.
    • The answers were sampled at temperature 0.6 from 8-bit (Q8_0) builds: of Qwen3.5-2B for the first set and of a first fine-tune for the second. The second set holds only prompts on which that fine-tune loops under greedy decoding.
    • A sample was kept only if it was correct, finished thinking on its own within 3,000 tokens, and was the shortest such sample for its prompt.
    • Benchmark questions were excluded by id, normalized text and hash.
  • Prompt sources: the training/validation splits below. The licenses are as declared on each dataset's Hugging Face card.
Dataset Split Declared license
openai/gsm8k train MIT
cais/mmlu validation, dev MIT
google-research-datasets/mbpp train, validation, prompt CC BY 4.0
allenai/ai2_arc train CC BY-SA 4.0
allenai/sciq train CC BY-NC 3.0
allenai/openbookqa train unknown
Rowan/hellaswag train not declared
allenai/winogrande train not declared

The training rows hold the model's own outputs, not the datasets' answer texts. Some sources carry non-commercial or share-alike terms. If those terms matter for your use, check them.

How to run

llama.cpp (the evaluated configuration; uses the Qwen3.5 chat template embedded in the file):

llama-server -m magi-1.1-2B.gguf -c 32768 --jinja --flash-attn on --cache-type-k q4_0 --cache-type-v q4_0 -ub 128

Ollama:

ollama create magi-1.1-2B -f Modelfile
ollama run magi-1.1-2B

The benchmark used greedy decoding. For interactive use with thinking enabled, Qwen recommends temperature 0.6, top_p 0.95 and top_k 20, which also makes repetition loops much rarer.

Limitations

  • Below the BF16 model by 5.6 points overall (largest gaps: MBPP+, MMLU, LiveCodeBench). Competitive programming is mostly out of reach at 2B: LiveCodeBench 1.3%, against 11.3% for BF16.
  • Still loops under greedy decoding: 77% of benchmark traces end in a repetition loop, so use sampling for interactive work.
  • Narrow evaluation: one runtime (llama.cpp b11800), one benchmark, one GPU, each configuration run once.
  • The name is ours. "2B" follows Qwen's naming; the file holds 1,881,825,088 parameters. Text only: the base model's vision encoder is not included.

Related

License

The weights are Apache 2.0, inherited from Qwen/Qwen3.5-2B; the license text is included in this repository. See Training for the terms of the datasets the fine-tuning prompts came from.

Downloads last month
-
GGUF
Model size
2B params
Architecture
qwen35
Hardware compatibility
Log In to add your hardware

We're not able to determine the quantization variants.

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for GEHIRNS/magi-1.1-2B

Finetuned
Qwen/Qwen3.5-2B
Finetuned
(674)
this model

Collection including GEHIRNS/magi-1.1-2B