Text Generation
Transformers
Safetensors
English
jugnu_vr
tiny-lm
qwen3
value-residual
muon
knowledge-distillation
ablation
custom_code
Instructions to use altslate/JugnuLM-110M-R4a with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use altslate/JugnuLM-110M-R4a with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="altslate/JugnuLM-110M-R4a", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("altslate/JugnuLM-110M-R4a", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use altslate/JugnuLM-110M-R4a with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "altslate/JugnuLM-110M-R4a" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "altslate/JugnuLM-110M-R4a", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/altslate/JugnuLM-110M-R4a
- SGLang
How to use altslate/JugnuLM-110M-R4a with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "altslate/JugnuLM-110M-R4a" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "altslate/JugnuLM-110M-R4a", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "altslate/JugnuLM-110M-R4a" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "altslate/JugnuLM-110M-R4a", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use altslate/JugnuLM-110M-R4a with Docker Model Runner:
docker model run hf.co/altslate/JugnuLM-110M-R4a
File size: 4,446 Bytes
ed62048 4a3deb5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | ---
license: apache-2.0
language:
- en
library_name: transformers
pipeline_tag: text-generation
tags:
- tiny-lm
- qwen3
- value-residual
- muon
- knowledge-distillation
- ablation
datasets:
- HuggingFaceFW/fineweb-edu
---
# JugnuLM-110M-R4a (value residuals + Muon + logit distillation)
**What "R4a" means.** Rung 4 of the JugnuLM phase-2 ablation ladder — the first
**knowledge-distillation** attempt. We take rung **R2**
([JugnuLM-110M-R2](https://huggingface.co/altslate/JugnuLM-110M-R2), value residuals + Muon)
and add **offline top-k logit distillation** from a teacher, holding data/optimizer/schedule
fixed. This is the **"a" variant** — a deliberately KD-heavy setting; a rebalanced **R4b** follows.
## What changed: logit KD from SmolLM2-1.7B
The frozen teacher **[SmolLM2-1.7B](https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B)** (base;
shares our SmolLM2 tokenizer, 49,152 vocab) was run over ~6B tokens of FineWeb-Edu, storing its
**top-16 next-token logits** per position. The student trains to match that distribution:
> `loss = α·CE + (1−α)·τ²·KL(student ‖ teacher_top16) + z-loss`, with **α=0.5, τ=2**.
## Result — distillation lifts ARC, but this setting over-weights KD
| 110M rung | BLiMP ↑ | ARC-Easy ↑ | WikiText-2 byte-ppl ↓ |
|---|---|---|---|
| R2 — value residuals + Muon | 80.78 | 56.10 | **1.932** |
| **R4a — + logit KD (α=0.5, τ=2)** | 80.39 | **56.99** | 2.178 |
**ARC-Easy reached 56.99 — the best of any JugnuLM rung, essentially matching GPT-X2-125M's
57.07** — confirming distillation is the right lever for reasoning. **However**, with α=0.5 and
τ=2 the KD term carries ~4× the weight of the hard-label loss, so the student over-imitates the
teacher's softened distribution at the cost of sharp next-token prediction: **WikiText perplexity
rose to 2.178** (from R2's 1.932). On the leaderboard's blended efficiency score this perplexity
regression outweighs the ARC gain, so **R4a is not kept as the ladder base** — but it validates
the lever and motivates the rebalanced **R4b (α=0.7, τ=1)**, which aims to keep the ARC win
without the perplexity damage. Evaluated with EleutherAI `lm-evaluation-harness`.
## ⚠️ Loading — requires `trust_remote_code`
Value residuals are a custom attention pathway; loading as a stock Qwen3 silently drops them.
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("altslate/JugnuLM-110M-R4a")
model = AutoModelForCausalLM.from_pretrained("altslate/JugnuLM-110M-R4a", trust_remote_code=True)
ids = tok("The theory of relativity was developed by", return_tensors="pt").input_ids
print(tok.decode(model.generate(ids, max_new_tokens=30, repetition_penalty=1.3)[0], skip_special_tokens=True))
```
## Architecture & training
Identical architecture/optimizer to R2 (value residuals + Muon): Qwen3-arch, **23 layers ×
576**, GQA 9/3, RoPE, SwiGLU, RMSNorm, QK-Norm, tied embeddings, SmolLM2 tokenizer (49,152),
z-loss 1e-4. Trained from scratch on ~8.4B tokens of FineWeb-Edu with the KD loss above, Muon
(peak 2e-2) + AdamW (1.5e-3) on a shared cosine, ~0.5M-token global batch, bf16, DDP on 4× RTX
PRO 4500 Blackwell. Teacher logits precomputed offline (top-16 over a 6B-token region).
## Intended use & limitations
Research **base** model (not instruction-tuned). Best-in-family ARC-Easy reasoning, but higher
perplexity than R1/R2 due to the KD-heavy setting. English-only, occasional repetition. Not for
production. For a more balanced distilled model, see R4b (when released).
## Links
- Base rung: [altslate/JugnuLM-110M-R2](https://huggingface.co/altslate/JugnuLM-110M-R2)
- Teacher: [HuggingFaceTB/SmolLM2-1.7B](https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B)
- Training code & ablation ladder: https://github.com/AltSlate-Labs/jugnu
## Paper
This model is described in [*Depth and Scale in the Sub-150M Regime: JugnuLM-53M vs JugnuLM-110M*](https://arxiv.org/abs/2609.14715)
(arXiv:2609.14715 · [HF Papers](https://huggingface.co/papers/2609.14715)).
```bibtex
@misc{rajput2026jugnu,
title = {Depth and Scale in the Sub-150M Regime: JugnuLM-53M vs JugnuLM-110M},
author = {Rajput, Dushyant and Chauhan, Nirdesh and Kosaraju, Siddharth},
year = {2026},
eprint = {2609.14715},
archivePrefix = {arXiv},
primaryClass = {cs.AI},
url = {https://arxiv.org/abs/2609.14715}
}
```
|