Instructions to use GEHIRNS/magi-1.1-2B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use GEHIRNS/magi-1.1-2B with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf GEHIRNS/magi-1.1-2B # Run inference directly in the terminal: llama cli -hf GEHIRNS/magi-1.1-2B
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf GEHIRNS/magi-1.1-2B # Run inference directly in the terminal: llama cli -hf GEHIRNS/magi-1.1-2B
Build from source code
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-app # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama serve -hf GEHIRNS/magi-1.1-2B # Run inference directly in the terminal: ./build/bin/llama cli -hf GEHIRNS/magi-1.1-2B
Use Docker
docker model run hf.co/GEHIRNS/magi-1.1-2B
- Llama new
- LM Studio
- Jan
- vLLM
How to use GEHIRNS/magi-1.1-2B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "GEHIRNS/magi-1.1-2B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "GEHIRNS/magi-1.1-2B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/GEHIRNS/magi-1.1-2B
- Ollama
How to use GEHIRNS/magi-1.1-2B with Ollama:
ollama run hf.co/GEHIRNS/magi-1.1-2B
- Unsloth Desktop
- Pi
How to use GEHIRNS/magi-1.1-2B with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf GEHIRNS/magi-1.1-2B
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "GEHIRNS/magi-1.1-2B" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use GEHIRNS/magi-1.1-2B with Docker Model Runner:
docker model run hf.co/GEHIRNS/magi-1.1-2B
- Lemonade
How to use GEHIRNS/magi-1.1-2B with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull GEHIRNS/magi-1.1-2B
Run and chat with the model
lemonade run user.magi-1.1-2B-{{QUANT_TAG}}List all available models
lemonade list
- Hermes Agent
How to use GEHIRNS/magi-1.1-2B with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf GEHIRNS/magi-1.1-2B
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default GEHIRNS/magi-1.1-2B
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use GEHIRNS/magi-1.1-2B with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf GEHIRNS/magi-1.1-2B
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "GEHIRNS/magi-1.1-2B" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
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:
- 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.
- 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.
Capability density
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.
| Benchmark | Qwen3.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.72 | 1.36 | 1.36 |
| Benchmark score | 71.66% | 63.48% | 66.06% |
| Capability density ฯ | 0.385 | 1.071 | 1.149 |
| Decode speed (tok/s) | not measured | 332 | 338 |
| Traces ending in a loop | 49.2% | 82.4% | 77.4% |
| Coding | |||
| HumanEval+ | 56.10 | 38.41 | 46.95 |
| MBPP+ | 55.64 | 41.35 | 44.61 |
| LiveCodeBench | 11.33 | 0.67 | 1.33 |
| Math | |||
| GSM8K | 82.67 | 70.00 | 78.00 |
| Science and Knowledge | |||
| ARC-Challenge | 94.67 | 89.33 | 93.33 |
| MMLU | 74.50 | 61.00 | 64.00 |
| OpenBookQA | 86.50 | 74.00 | 77.00 |
| SciQ | 95.00 | 92.00 | 94.00 |
| TruthfulQA | 75.50 | 74.50 | 77.50 |
| Commonsense | |||
| HellaSwag | 60.00 | 54.50 | 50.50 |
| WinoGrande | 68.00 | 66.00 | 65.50 |
| Tool Use | |||
| Function calling | 100.00 | 100.00 | 100.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
- GEHIRNS/magi-1.0: the recipe this release reuses (on Qwen3.5-4B).
- GEHIRNS/magi-1.0-2B: the recipe alone on Qwen3.5-2B, without the fine-tune (the middle column above).
- Paper on the recipe: Eason Sun, Where the Bits Go, Zenodo, 2026. DOI: 10.5281/zenodo.23630199.
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
- -
We're not able to determine the quantization variants.

