Blog post5 min read

Embla 1: A reasoning model built for phones

Embla 1 runs on a phone, private, offline and free per request. This is how we trained it, and how it compared with other small models in our tests at 4 bits.

At 4 bits Embla 1 averages 57.4 on BFCL, IFBench, AA-Omniscience, GPQA and MATH-500 and answers in 1.77 s end to end on an iPhone 18 Pro.* In our measurements, the models that scored higher took at least twice as long on the same phone.

Embla 1 is a reasoning model built to run on a phone, private, offline and free per request. We designed it to be fast and to use few tokens per answer, and trained it on 16 nodes of 8× H100.

10 20 30 40 50 60 70 0.5 s 1 s 2 s 4 s 8 s 16 s End-to-end latency on iPhone 18 Pro, 1,024-token prompt + 256 generated tokens (log scale) Average score BEYOND THE FRONTIER WITHIN THE FRONTIER PROVIDER Sevren Google IBM Liquid AI Alibaba OpenBMB LFM2.5-230M: 26.1 at 0.61 s LFM2.5-230M LFM2.5-350M: 25.2 at 0.84 s LFM2.5-350M Granite 4.0 350M: 17.8 at 1.05 s Granite 4.0 350M MiniCPM5-1B: 43.1 at 1.95 s MiniCPM5-1B LFM2.5-1.2B: 42.7 at 2.29 s LFM2.5-1.2B LFM2.5-8B-A1B: 58.8 at 3.59 s LFM2.5-8B-A1B LFM2-2.6B-Exp: 47.5 at 4.90 s LFM2-2.6B-Exp Gemma 4 E2B: 52.8 at 4.95 s Gemma 4 E2B LFM2.5-2.6B: 62.7 at 5.33 s LFM2.5-2.6B Granite 4.2 3B: 61.0 at 6.80 s Granite 4.2 3B Gemma 4 E4B: 60.4 at 9.53 s Gemma 4 E4B Qwen3.5-4B: 60.0 at 9.69 s Qwen3.5-4B Embla 1: 57.4 at 1.77 s Embla 1 57.4 · 1.77 s
* Embla 1 decodes with our own Metal implementation. In llama.cpp it takes 2.18 s. Other models run in llama.cpp.

Architecture

Embla 1 is built to be fast on a phone in both prefill and decode. It has 32 layers of width 2048, with 8 of 96 routed experts and one shared expert per token. We use 15 sliding-window layers of 128 tokens, 12 sparse attention layers and 5 full attention layers. For more detail see The Architecture of Embla 1. It is built around the following:

Training

The model is pretrained on 1.4T tokens followed by a 20B-token extension to 256K context. For post-training we run SFT on 123B tokens. During the last 2,000 SFT steps we train with quantization-aware training (QAT) [1] and all later stages run at 4 bits. For RL we run 100 steps of on-policy distillation (OPD) [2], 800 + 200 steps of GRPO [3] and 300 steps of multi-teacher on-policy distillation (MOPD) [4]. Every stage before GRPO distils from a larger model [5].

StageTokens or stepsTeacher or signal
Pretraining1.4T tokensQwen3.5-35B-A3B-Base
Long-context extension20B tokensQwen3.5-35B-A3B
SFT with QAT123B tokensQwen3.5-35B-A3B
OPD100 stepsQwen3.8-27B and Qwen3.5-35B-A3B
GRPO800 + 200 stepsVerifiers and a judge
MOPD300 stepsGRPO-trained domain specialists

Pretraining

We pretrain at 4K context in two phases: 1T tokens without document masking, then 400B tokens with it. We use Qwen3.8's tokenizer pruned to 65,536 tokens. From the first step the model distils from Qwen3.5-35B-A3B-Base with 0.9 × KL on its top-256 logits plus 0.1 × cross-entropy. Its embeddings and output head start from the teacher's top principal components [6]. Muon [7] trains the weight matrices and AdamW the rest with 4M-token batches and a constant learning rate. We then extend the context to 256K over 20B tokens with Qwen3.5-35B-A3B Instruct as teacher.

PretrainingPhase 1Phase 2
Web text, filtered and synthetic50%43%
Code19%19%
STEM, reasoning and QA (synthetic)10%10%
Math9%8%
PDFs8%14%
Multilingual web (10 European languages)5%5%

Post-training

SFT. We train on 123B tokens in 32K packed sequences with Qwen3.5-35B-A3B Instruct as teacher on assistant tokens. Reasoning traces in math, code and STEM are capped at 8K tokens. One in ten reasoning prompts gets no reasoning. The last 2,000 steps run QAT in the phone runtime's 4-bit format: round-to-nearest in groups of 64 with a bf16 scale and offset per group.

SFTShare
Chat25.5%
Math16%
Tool use14%
Instruction following12%
Code12%
STEM10%
Multilingual6%
Long context, safety, other4.5%

OPD. We run 100 steps with answers up to 8K tokens. Qwen3.8-27B and Qwen3.5-35B-A3B score each answer token by token. Both are pruned to our vocabulary and keep 99.1% of their probability mass.

GRPO. We run 800 steps with 16 answers per prompt and no reference model. Verifiers score math, code, tool calls and instruction following. Another 200 steps add knowledge questions judged by gpt-oss-120b [8]: +1 correct, 0 abstain, −1 wrong. The last 180 of them add a loop penalty [9] of −10−4 per token in a repeated 40-gram of a correct answer up to 0.5. Answers hitting the 16K limit fell from 20.7% to 1.8%.

MOPD. We run 300 steps with GRPO-trained specialists as teachers for four domains: tool use, instruction following, math and abstention.

Results

Score is the mean of BFCL, IFBench, AA-Omniscience, GPQA and MATH-500 with up to 16K tokens per answer and reasoning on. All models run at 4 bits: Embla 1 in the phone runtime's format, the others from their official Q4_K_M GGUF weights. Each model uses its lab's recommended sampling settings. Latency uses 4-bit builds on an iPhone 18 Pro with a 1,024-token prompt and 256 output tokens.

These are our own measurements: one phone, one evaluation harness and five benchmarks. Each average carries an uncertainty of about ±1 point, and other setups may rank the models differently.

Five of the twelve models score higher than Embla 1. LFM2.5-8B-A1B is 1.4 points ahead and takes 2.0× as long. LFM2.5-2.6B, Granite 4.2 3B, Gemma 4 E4B and Qwen3.5-4B are 2.6 to 5.3 points ahead and take 3.0 to 5.5× as long. Of the reasoning models we tested, Embla 1 writes the fewest tokens per answer:

ModelMean tokens per answervs Embla 1Score
Embla 18881.0×57.4
Gemma 4 E4B1,5771.8×60.4
Gemma 4 E2B1,6111.8×52.8
LFM2.5-8B-A1B3,1293.5×58.8
LFM2.5-2.6B3,5574.0×62.7
Granite 4.2 3B5,6336.3×61.0
MiniCPM5-1B6,4617.3×43.1
Qwen3.5-4B6,6197.5×60.0

Embla 1 is clearly behind on math: 76.1 on MATH-500 against 89.6 for LFM2.5-8B-A1B and 90.5 for LFM2.5-2.6B. There is still a lot to improve.

The 4-bit weights of Embla 1 are available on Hugging Face.

References

  1. Benoit Jacob et al., "Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference", CVPR, 2018.
  2. Rishabh Agarwal et al., "On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes", ICLR, 2024.
  3. Zhihong Shao et al., "DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models", arXiv:2402.03300, 2024.
  4. Xiaomi LLM-Core Team, "MiMo-V2-Flash Technical Report", arXiv:2601.02780, 2026.
  5. Geoffrey Hinton, Oriol Vinyals and Jeff Dean, "Distilling the Knowledge in a Neural Network", arXiv:1503.02531, 2015.
  6. Zhiqiu Xu et al., "Initializing Models with Larger Ones", ICLR, 2024.
  7. Keller Jordan et al., "Muon: An optimizer for hidden layers in neural networks", blog post, 2024.
  8. OpenAI, "gpt-oss-120b & gpt-oss-20b Model Card", arXiv:2508.10925, 2025.
  9. Edward Yeo et al., "Demystifying Long Chain-of-Thought Reasoning in LLMs", arXiv:2502.03373, 2025.
← Publications All posts