DeepSeek-R1 Distillation: Reasoning Transfer to Small LLMs

The Problem: The Cost of Giant Models and the Failure of Small-Scale RL
The debut of frontier reasoning models—most notably OpenAI o1/o3 and DeepSeek-R1—demonstrated a profound paradigm shift in artificial intelligence: test-time compute scaling. By allowing models to generate thousands of intermediate reasoning tokens inside <think> blocks, models self-correct, explore alternate hypotheses, and solve complex Olympiad-level mathematics and competitive coding problems.
However, deploying frontier reasoning architectures in production environments, autonomous edge scrapers, and localized developer tools like AiFetchly encounters two severe roadblocks:
1. The Prohibitive Serving Footprint of 671B Flagship Models
DeepSeek-R1 is a massive 671-billion parameter Mixture-of-Experts (MoE) architecture:
- Running DeepSeek-R1 at FP16 or BF16 precision requires over 1.3 Terabytes of High-Bandwidth Memory (HBM), demanding multi-node HGX clusters with eight NVIDIA H100/H200 GPUs costing over $300,000 per server.
- Even with aggressive 4-bit quantization, R1 demands at least 180 GB of VRAM across multiple consumer GPUs or high-end workstation setups.
- For high-frequency enterprise agent loops, low-latency API endpoints, and on-device execution, serving a 671B model introduces severe memory bandwidth bottlenecks and high operational expenses.
2. The Small-Model Exploration Trap in Pure RL
If Reinforcement Learning with Verifiable Rewards (RLVR / GRPO) enabled DeepSeek-R1-Zero to emerge naturally from scratch, why not simply apply RL directly to small language models (such as Qwen-2.5-7B or LLaMA-3.1-8B)?
When research teams attempted pure large-scale RL directly on small base models, they encountered the Search Space Collapse:
The Small-Model RL Exploration Trap vs. Large-Model Emergence:
┌────────────────────────────────────────────────────────────────────────┐
│ 671B Flagship Model (DeepSeek-R1-Zero): │
│ Massive Parametric Capacity ──► Explores diverse solution branches │
│ Recovers from errors ──► Spontaneously discovers "Wait..." │
│ Emergent Behaviors ──► Discovers reflection & backtracking! │
├────────────────────────────────────────────────────────────────────────┤
│ 7B Small Base Model (Direct RL Training): │
│ Constrained Capacity ──► Gets trapped in local reward plateaus │
│ Fragile Trajectories ──► Repeats degenerate repetitive loops │
│ Outcome ──► Catastrophic policy collapse or gibberish│
└────────────────────────────────────────────────────────────────────────┘ Small models lack the latent representational breadth required to stumble upon long-chain reasoning strategies via stochastic exploration alone. Without millions of tokens of guidance, pure reinforcement learning fails to bootstrap self-correction in models under 14B parameters.
The Solution: DeepSeek-R1 Reasoning Distillation
To bring frontier reasoning capabilities to lightweight, deployable models without incurring the failure modes of direct RL, DeepSeek introduced Reasoning Distillation (DeepSeek-R1 Technical Report, January 2025).
Instead of forcing small models to reinvent multi-step deductive reasoning from scratch through trial and error, DeepSeek distilled 800,000 curated reasoning samples generated by the 671B DeepSeek-R1 teacher directly into dense open-weights student architectures:
- DeepSeek-R1-Distill-Qwen-1.5B
- DeepSeek-R1-Distill-Qwen-7B
- DeepSeek-R1-Distill-Llama-8B
- DeepSeek-R1-Distill-Qwen-14B
- DeepSeek-R1-Distill-Qwen-32B
- DeepSeek-R1-Distill-Llama-70B
DeepSeek-R1 Distillation Pipeline Overview:
┌────────────────────────────────────────────────────────────────────────┐
│ 1. Teacher Generation (DeepSeek-R1 671B MoE): │
│ Curated Math, Code, & Logic Prompts ──► Generates Deep Reasoning │
│ Traces with Dynamic Reflection & Backtracking (<think> ... </think>)│
└──────────────────────────────────┬─────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────────┐
│ 2. Rigorous Data Filtering & Verification │
│ - Deterministic Compiler / Unit Test Verification (Math & Code) │
│ - Hallucination & Degeneracy Filtering │
│ - Assembles 800,000 High-Quality Reasoning Demonstrations │
└──────────────────────────────────┬─────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────────┐
│ 3. Supervised Fine-Tuning (SFT) on Dense Student Models │
│ Base Models: Qwen-2.5 (1.5B, 7B, 14B, 32B) & LLaMA-3.1 (8B, 70B) │
│ Standard Next-Token Cross-Entropy on Full Reasoning Trajectories │
└──────────────────────────────────┬─────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────────┐
│ 4. Optional Post-Distillation RL Phase │
│ Applies GRPO on the Distilled Student Model │
│ Result: Qwen-32B Distill beats OpenAI o1-mini on Math & Code! │
└────────────────────────────────────────────────────────────────────────┘ The Architecture: Why Distillation Beats Direct Reinforcement Learning
The fundamental architectural revelation of DeepSeek-R1 is that reasoning patterns can be distilled far more efficiently than they can be discovered through unguided exploration.
1. Transferring Cognitive Primitives via Teacher Forcing
When a student model is trained on DeepSeek-R1 reasoning traces using standard Supervised Fine-Tuning (SFT), the loss objective trains the model to imitate the teacher’s internal structure:
$$\mathcal{L}{\text{SFT}}(\theta) = - \sum{t=1}^{T} \log P_{\theta}(x_t \mid x_{<t})$$
Because the target sequences include the full <think> reasoning block, the student model directly inherits three critical cognitive primitives:
- Explicit Hypothesis Exploration: Evaluating multiple candidate approaches before committing to a calculation:
"Let me first try solving this using dynamic programming... Wait, the constraints on N are too large ($10^9$), so dynamic programming will TLE. Let's look for a combinatorial invariant instead." - Autonomous Error Detection: Diagnosing calculation slips mid-sequence:
"Wait, if $x = 0$, the denominator collapses to zero. That is an invalid edge case. Let me reconsider the domain boundary." - Format-Guarded Final Answers: Isolating internal messy scratchpad calculations from clean, user-facing deliverables outside the
<think>tag.
2. Empirical Breakthrough: Distillation vs. Direct RL
DeepSeek conducted an ablation comparing two identical Qwen-2.5-32B models:
- Model A (Direct RL): Trained using large-scale RLVR / GRPO directly on the base Qwen-2.5-32B model without teacher data.
- Model B (Distilled SFT): Fine-tuned directly on the 800k DeepSeek-R1 reasoning traces.
Ablation Benchmark: Direct RL vs. Distilled SFT (32B Parameter Scale):
┌────────────────────────────┬────────────────────┬────────────────────┐
│ Benchmark Task │ Qwen-32B Direct RL │ Qwen-32B Distill │
├────────────────────────────┼────────────────────┼────────────────────┤
│ AIME 2024 (Pass@1) │ 47.3% │ 72.6% (+25.3%!) │
│ MATH-500 (Pass@1) │ 82.1% │ 94.3% (+12.2%!) │
│ Codeforces Rating │ 1,320 │ 1,691 (+371 pts!) │
└────────────────────────────┴────────────────────┴────────────────────┘ The distilled model outperformed the directly RL-trained model across every single domain. Distilling the 671B teacher’s reasoning traces acts as a superhuman curriculum, providing high-entropy reasoning milestones that a 32B model could never explore on its own within realistic compute budgets.
Technical Deep Dive: The 800k Distillation Dataset Composition
The performance of distilled reasoning models is strictly bound to the quality and diversity of the distillation dataset. DeepSeek curated approximately 800,000 examples divided into two primary categories:
Composition of the 800k DeepSeek-R1 Distillation Corpus:
┌────────────────────────────────────────────────────────────────────────┐
│ Reasoning Domain (~600k Samples, 75% of Total Corpus) │
│ ├─ Formal Mathematics: Olympiad, AIME, AMC, GSM8K, Higher Calculus │
│ ├─ Competitive Coding: Codeforces, LeetCode Hard, LiveCodeBench │
│ └─ Scientific & Logic Puzzles: ARC-AGI, formal proofs, deduction │
│ Target: Generates extended CoT traces (2k to 16k tokens per sample) │
├────────────────────────────────────────────────────────────────────────┤
│ General Non-Reasoning Domain (~200k Samples, 25% of Total Corpus) │
│ ├─ Creative Writing & Roleplay (DeepSeek-V3 SFT dataset integration) │
│ ├─ Multi-Turn Conversational Dialogue & Instruction Following │
│ └─ Code Refactoring & General System Prompts │
│ Target: Preserves general conversational capabilities and user safety │
└────────────────────────────────────────────────────────────────────────┘ Sanitization and Filtering Pipeline
Generating 800k long-chain traces from a 671B model naturally produces edge-case failures. DeepSeek applied a multi-stage filtering harness:
- Outcome Verifier Oracles: For math and code, the final extracted answer was evaluated against ground-truth unit tests or symbolic solvers (e.g., SymPy). Any trace with an incorrect final answer was immediately purged.
- Language Consistency Filter: Reasoning models frequently engage in “language mixing” (e.g., switching between English and Chinese mid-derivation). Samples exhibiting erratic linguistic switches were discarded or re-prompted.
- Repetition & Loop Pruning: Traces with degenerative repetitive cycles (e.g., repeating the same sentence 10 times during indecision) were flagged and purged using $n$-gram repetition penalties.
Empirical Benchmarks: Distilled Small Models vs. Frontier Giants
The empirical results of DeepSeek-R1 distillation redefined what is achievable on consumer and single-server hardware.
| Model | Total Parameters | Active Parameters | AIME 2024 (Pass@1) | MATH-500 (Pass@1) | Codeforces Percentile | Hardware Requirement |
|---|---|---|---|---|---|---|
| OpenAI GPT-4o (0513) | ~1.8T (MoE) | Dense/Unknown | 38.3% | 74.6% | ~60th | Multi-Node Datacenter |
| Claude 3.5 Sonnet | ~70B+ (MoE) | Dense/Unknown | 44.0% | 78.3% | 72nd | Enterprise Cloud API |
| OpenAI o1-mini | Small / Unknown | Unknown | 63.6% | 90.0% | ~88th | Enterprise Cloud API |
| DeepSeek-R1 (Flagship) | 671B (MoE) | 37B (MoE) | 79.8% | 97.3% | 96.3rd | 8x H100 80GB GPUs |
| R1-Distill-Qwen-1.5B | 1.5 Billion | 1.5 Billion | 28.9% | 83.9% | ~40th | Mobile Phone / Edge CPU |
| R1-Distill-Qwen-7B | 7 Billion | 7 Billion | 55.5% | 92.8% | 70.2th | 1x RTX 3060 / Mac M-Series |
| R1-Distill-Qwen-14B | 14 Billion | 14 Billion | 69.7% | 93.9% | 84.0th | 1x RTX 4080 (16GB) |
| R1-Distill-Qwen-32B | 32 Billion | 32 Billion | 72.6% | 94.3% | 90.6th | 1x RTX 4090 / 24GB VRAM |
| R1-Distill-Llama-70B | 70 Billion | 70 Billion | 70.0% | 94.5% | 89.0th | 2x RTX 4090 / 48GB VRAM |
Critical Benchmark Takeaways
- The 7B Leap:
R1-Distill-Qwen-7Bscores 55.5% on AIME 2024 and 92.8% on MATH-500—surpassing non-reasoning frontier models like GPT-4o (38.3%) and Claude 3.5 Sonnet (44.0%) while running comfortably on an entry-level consumer GPU with 8 GB to 12 GB of VRAM. - The 32B Sweet Spot:
R1-Distill-Qwen-32Bbeats OpenAI’s specializedo1-minion both math and competitive programming benchmarks, representing the gold standard for workstation-class local AI intelligence.
Production Implementation: Serving and Interfacing with Distilled Models
Deploying distilled reasoning models locally or in production web applications requires managing the streaming <think> tags and configuring appropriate sampling temperatures.
1. Running Distilled Models Locally with Ollama
The distilled models are natively available in Ollama for immediate local execution:
# Pull and run the 7B or 14B distilled models locally
ollama run deepseek-r1:7b
ollama run deepseek-r1:14b
ollama run deepseek-r1:32b 2. Production Python Integration with vLLM and Output Parsing
Because distilled models emit their reasoning steps inside <think> ... </think> blocks, production serving architectures must parse and decouple the internal scratchpad from the final answer delivered to end users:
import re
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123xyz"
)
def query_reasoning_model(prompt: str) -> dict:
system_prompt = (
"You are an expert software architect. Reason thoroughly through "
"the problem inside <think> tags before delivering the final answer."
)
# Recommended inference parameters for distilled reasoning models:
# Temperature: 0.6 (avoids repetition loops while maintaining reasoning diversity)
# Top-P: 0.95
response = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": prompt}
],
temperature=0.6,
top_p=0.95,
max_tokens=4096
)
raw_content = response.choices[0].message.content
# Parse thinking scratchpad vs. final answer
think_match = re.search(r"<think>(.*?)</think>", raw_content, flags=re.DOTALL)
if think_match:
reasoning_trace = think_match.group(1).strip()
final_answer = re.sub(r"<think>.*?</think>", "", raw_content, flags=re.DOTALL).strip()
else:
reasoning_trace = "No explicit thinking trace found."
final_answer = raw_content.strip()
return {
"reasoning_trace": reasoning_trace,
"final_answer": final_answer,
"usage": {
"total_tokens": response.usage.total_tokens,
"completion_tokens": response.usage.completion_tokens
}
}
if __name__ == "__main__":
test_query = (
"We have an unbuffered asynchronous event queue with 5 worker nodes. "
"If worker 3 crashes during message transit, how do we guarantee at-least-once "
"delivery without causing duplicate side effects in downstream database writes?"
)
print("[*] Dispatching query to DeepSeek-R1-Distill-Qwen-7B...")
result = query_reasoning_model(test_query)
print("\n--- INTERNAL REASONING TRACE (<think>) ---")
print(result["reasoning_trace"][:400] + "... [truncated]")
print("\n--- FINAL PRODUCTION ANSWER ---")
print(result["final_answer"]) 3. Serving Guidelines and Parameter Calibration
When hosting distilled models with vLLM or SGLang:
- Temperature Calibration: Do not use zero temperature ($T=0$). Greedy decoding frequently causes distilled reasoning models to get stuck in repetitive reasoning loops or prematurely truncate their
<think>blocks. Maintain temperature between $0.5$ and $0.7$. - Context Window Sizing: Allocate sufficient
max_model_len(at least 16,384 to 32,768 tokens). Because the model may expend 2,000 to 6,000 tokens reasoning before emitting its answer, restrictive token ceilings trigger mid-thought truncation. - Avoid System Prompt Interference: Do not instruct the model to “Be concise” or “Do not think”. Suppressing reasoning tokens severely degrades performance back to standard baseline levels.
Strategic Takeaways for AI Systems Engineers
The success of DeepSeek-R1 reasoning distillation marks a turning point in the democratization of artificial intelligence.
- Distillation Beats Pure Small-Model Exploration: Small models do not possess the capacity to discover complex self-correction behaviors from scratch via RL. Supervised fine-tuning on high-quality reasoning traces successfully transfers cognitive reflection without multi-million-dollar RL budgets.
- Specialized 7B/14B Reasoners Outperform Legacy Giants: A 7B or 14B model fine-tuned on reasoning traces routinely outperforms 70B+ generalist chat models on STEM, programming, and algorithmic data tasks.
- Radical Cost Reduction for Agent Swarms: High-throughput autonomous workflows can deploy distilled 7B or 14B models locally on a single GPU, delivering frontier reasoning quality at 95% lower operational latency and zero third-party cloud API costs.