We describe HobbyLM, a family of small sparse Mixture-of-Experts (MoE) models trained from scratch with a few hundred to a few thousand dollars of rented GPU time. The core is a decoder-only transformer with fine-grained experts, sigmoid routing with auxiliary-loss-free load balancing, grouped-query attention with per-head QK-normalization, and aMuon/AdamW optimizer split. Each of these choices was selected with a single-variable ablation suite at 130M parameters. On this architecture we train a 500M-parameter model (169M active) on 40B FineWeb tokens and post-train it into a chat model, a masked-diffusion language model, a function-calling and computer-use agent, and a single "omni" checkpoint that reads text, images, video, sound and speech through frozen encoders and small projectors. We run these models on a laptop CPU with a from-scratch Rust inference engine. Two of the authors then adopted the architecture without architectural changes to build HobbyLM-1B (1.04B total, 305M active parameters), trained on a 100B-token curated mixture with a high-quality anneal. HobbyLM-1B reaches a 47.5 average on seven zero-shot benchmarks, and its builders also release an instruction-tuned model and an on-device macOS computer-use adapter. Finally, we describe HobbyLM-Image, a 333M-parameter flow-matching diffusion transformer that generates 1024x1024 images in a 32x-compressed latent space, together with a dependency-light CPU implementation of the full text-to-image pipeline. We report what worked, what did not, and where the small-scale ceilings lie. We also state for each component which author designed or built it.
Figures & tables
Figure 1: Zero-shot average on seven tasks (HellaSwag, OpenBookQA, WinoGrande, ARC-c, ARC-e, BoolQ, PIQA) against pretraining tokens, for base checkpoints of up to about 1B parameters (HobbyLM-1B: 1.04B total, 305M active). Filled points were run through the same evaluation wrapper (Table 5 ). HobbyLM-1B (hollow) was evaluated by its builders on the same tasks with the same metric choices, but with lm-eval 0.4.13 rather than 0.4.9.1 (Appendix D ). HobbyLM-130M and -500M outscore MicroLlama-300M, OPT-350M and Pythia-160M, which saw 1.25–30 × more tokens; Pythia-410M (300B tokens) remains ahead of HobbyLM-500M.
Table 1: Provenance of each component. “Adopted” means the component was taken from the HobbyLM architecture specification and code without modification.
Figure 2: The HobbyLM decoder. Every layer is pre-norm. Layer 0 uses a dense SwiGLU FFN; all later layers use a sparse MoE with E routed SwiGLU experts, top- k sigmoid routing, an auxiliary-loss-free selection bias b , and (in the 500M and 1B presets) one shared expert.
Preset
d
L
nq/nkv×dh
dense FFN
E×f
top- k
shared
Total
Active
130M
512
12
8/2×64
1536
32×192
8
0
140.0M
62.1M
500M
768
16
12/3×128
2304
36×320
6
1
500.8M
169.0M
1B
1024
20
16/8×128
2816
64×224
8
1
1037.1M
305.0M
Table 2: HobbyLM presets. G is the dense-to-expert FFN width ratio. All presets use 1 dense leading layer, RMSNorm with ϵ=10−6 , RoPE θ=104 (raised to 106 for the 8k-context 500M), tied embeddings and vocabulary 50,304.
Variant
Change from baseline
Val loss
Δ
topk8
top-8 instead of top-4
3.6441
−0.025
no_renorm
no top- k gate renormalization
3.6542
−0.015
softmax
softmax instead of sigmoid gating
3.6677
−0.001
shared1
add one shared expert
3.6678
−0.001
baseline
–
3.6688
0
scale_emb
multiply embeddings by d
3.6775
+0.009
Table 3: Single-knob ablations at 130M, 3,000 steps, FineWeb validation loss (baseline 3.6688).
Option
ms/step
tokens/s
Peak GB
130M val loss
baseline
222.5
36,821
33.3
4.0739
fused_ce
209.2
39,166
26.4
4.0681
polar
224.8
36,445
33.3
4.0790
fused_ce + polar
210.1
38,988
26.4
4.0855
FP8 head
223.8
36,605
33.8
10.90 (no gradient)
Table 4: Throughput options on a 1B speed probe (one H100, micro-batch 8, sequence 1024) and quality on a 130M, 1,000-step run.
Model
Params
Tokens
Hella
OBQA
Wino
ARC-c
ARC-e
BoolQ
PIQA
Avg
SmolLM2-360M
360M
4T
56.41
38.00
59.35
38.48
68.22
62.08
71.49
56.29
Qwen3-0.6B
600M
36T
53.81
34.60
58.56
38.31
58.08
69.82
70.29
54.78
SmolLM2-135M
135M
2T
43.13
33.20
52.25
29.44
58.59
60.37
68.39
49.34
Gemma-3-270M
270M
6T
41.28
30.60
53.43
28.33
57.07
57.77
68.12
48.09
Pythia-410M
410M
300B
40.14
28.80
52.96
23.98
45.45
58.50
67.52
45.34
HobbyLM-500M
501M/169M
40B
41.56
29.80
51.30
22.44
42.76
50.98
69.53
44.05
Table 5: 0-shot results, all base (not instruction-tuned) checkpoints, all run through the same harness wrapper. Reference models: SmolLM2 ( Ben Allal et al., 2025 ) , Qwen3 ( Yang et al., 2025a ) , Gemma 3 ( Gemma Team et al., 2025 ) , Pythia ( Biderman et al., 2023 ) , OPT ( Zhang et al., 2022 ) , GPT-2 ( Radford et al., 2019 ) and MicroLlama ( keeeeenw, 2024 ) .
Modality
Frozen encoder
Tokens per input
Projector
Image (early)
SigLIP2 so400m/14 @384
729 × 1152
1.48M
Image (from joint11)
SigLIP2 so400m/16 @512
1024 × 1152
1.48M
Video
same as image, per frame
729 or 1024 per frame
shared
Sound
CLAP HTSAT
flattened HTSAT feature map, × 768
1.18M
Speech
Whisper-small encoder
750 × 1536 (2-frame stacking)
1.77M
Table 6: Frozen encoders and projectors of the omni model: SigLIP2 ( Tschannen et al., 2025 ; Zhai et al., 2023 ) , CLAP ( Wu et al., 2023 ) with an HTSAT backbone ( Chen et al., 2022 ) , and Whisper ( Radford et al., 2023 ) .
Run
Added
joint5
image, video, sound, speech (spoken QA), text
joint6
single-shot tool calls
joint7
text agent loop (query → call → result → answer) and spoken agent loop (TTS’d queries)
Table 18: HobbyLM-Image training curriculum. Data counts are the configured per-source quotas; step counts are the defaults of the corresponding training actions.
Figure 3: 1024×1024 samples from HobbyLM-Image (final checkpoint, CFG ≈5 , about 100 Euler steps), downscaled. Left: scene prompts. Right: object prompts. The object panel shows typical failures in fine structure (bus, bicycle).
Appendix figures & tables8 assets
Supplementary material from the paper’s appendix.
Appendix
Artifact
Location
Description
HobbyLM-Base
rootxhacker/HobbyLM-Base
500M base model, 8k context (Section 4 )
HobbyLM-Chat
rootxhacker/HobbyLM-Chat
SmolTalk SFT and UltraFeedback DPO
HobbyLM-Computer-Use
rootxhacker/HobbyLM-Computer-Use
function calling and accessibility-tree agent (Section 5.4 )
HobbyLM-Omni
rootxhacker/HobbyLM-Omni
joint12 omni checkpoint with vision and speech projectors (Section 5 )
HobbyLM-Diffusion
rootxhacker/HobbyLM-Diffusion
masked-diffusion chat model (Section 4.4 )
HobbyLM-SAE
rootxhacker/HobbyLM-SAE
top- k SAE on layer 8 of HobbyLM-Base
Appendix
Table 19: Released artifacts. Hugging Face repositories are under https://huggingface.co/ .
Table 23: Recorded compute for the main runs. GPU-hours are wall-clock time multiplied by the number of GPUs; where only the cost was recorded, we give the cost.
Stage
Identity
Steps
Base (step 95,367)
947e80d9
pretraining
2K extension
0add7bf0
550
Function-calling pilot
3f60c420
100
4K plain-RoPE extension (R2)
4a0c8215
150
SFT D: recovery, step 500
7f1e7213
500
SFT E: continuation, step 750
df65ea5a
250
Appendix
Table 24: Selected checkpoint path of HobbyLM-1B-Instruct. Identity is the SHA-256 prefix of each stage’s output. The 800 extension and pilot steps precede the SFT step counter. The step-2,751–4,750 continuation and a separate step-3,400 summarization branch are not ancestors of step 3,450.
SFT stage
Supervised tokens
D, step 0 → 500
11,869,621
E, step 500 → 750
5,789,137
F, step 750 → 2,750
43,678,658
G, step 2,750 → 3,450
16,776,587
Cumulative
78,114,003
Appendix
Table 25: Supervised-token increments (SFT plus replay) recorded in the checkpoints. The final raw-position counter is 3,617,587,200=3,450×1,048,576 , which includes padded and masked positions.
Table 26: Prepared datasets and configured sampling shares for the final Broad-Instruct stage (step 2,750 → 3,450). Shares are conditional on selecting an SFT row and are rounded; replay is a separate share of about 0.46% of all sampled rows. Row counts are prepared rows, not unique examples consumed. Earlier stages used different mixtures and, for some buckets, different files. Revision prefixes are as recorded.
Mixture-of-Experts language models use input-dependent routing to activate a small subset of expert networks, increasing capacity without proportional compute.
We present Marco-MoE, a suite of fully open multilingual sparse Mixture-of-Experts (MoE) models. Marco-MoE features a highly sparse design in which only around 5% of the total parameters are activated per input token. This extreme sparsity, combined with upcycling from dense models, enables efficient pre-training on 5T tokens. Our models surpass similarly-sized competitors on English and multilingual benchmarks, achieving a best-in-class performance-to-compute ratio. We further post-train these models to create Marco-MoE-Instruct variants, which surpass the performance of competing models possessing 3--14× more activated parameters. Our analysis reveals that Marco-MoE learns structured expert activation patterns shared across related languages, while maintaining highly specialized utilization for linguistically isolated ones. We further show that Marco-MoE allows for scalable language expansion without the interference typical of dense models. To support the community, we disclose our full training datasets, recipes, and model weights.
This paper reports on training a hundred-billion-parameter sparse mixture of experts on a single eight-GPU node, end to end. LightningLM 0.1V is a recurrence-backbone language model family grown in four stages from a small dense seed, through a 5B and a 9B mixture of experts, to a 120B model with 460 routed experts under top-12 routing. Each larger model is grown from the trained weights of the smaller one; active parameters rise monotonically from 1.78B at the dense seed to 5.93B at 120B (about 5% of the 118.67B stored). The full lineage runs on single nodes, the larger stages at 8K context, reaching a released training loss of 1.78 at 120B scale. This is a systems and experience report. It is organized around three disciplines. Reversibility: a reversible recurrence stack reconstructs activations in the backward pass instead of storing them, holding activation memory flat as the model grows. State-preserving growth: each expansion (dense to MoE, shallow to deep, few experts to many) is given as a reproducible principle paired with the failure that results from getting it wrong; several failures are silent. Single-node economics: the 120B trains through TQP, a strategy of quantized base expert weights and trained low-rank adapters that carries optimizer state on 2.26B adapter parameters rather than 100B+ resident in routed experts, cutting expert-path optimizer state by a factor of ~45. What is new is the integration of known primitives, not any primitive in isolation: one grown lineage running end to end on a single node, documented at practitioner level, with per-domain held-out loss as evidence that targeted capabilities (multilingual Indic competence, code) were learned by construction. Model family, tokenizer, and training code are released.
Mixture-of-Experts (MoE) models have gained popularity as a means of scaling the capacity of large language models (LLMs) while maintaining sparse activations and reduced per-token compute. However, in memory-constrained inference settings, expert weights must be offloaded to CPU, creating a performance bottleneck from CPU-GPU transfers during decoding. We propose an expert prefetching scheme that leverages currently computed internal model representations to speculate future experts, enabling memory transfers to overlap with computation. Across multiple MoE architectures, we demonstrate that future experts can be reliably predicted by these internal representations. We also demonstrate that executing speculated experts generally maintains downstream task accuracy, thus preserving more effective compute-memory overlap by eliminating the need to re-fetch true router-selected experts. Integrated into an optimized inference engine, our approach achieves up to 14% reduction in time per output token (TPOT) over on-demand loading of experts from CPU memory. For MoEs where speculative execution alone yields suboptimal accuracy, we further examine lightweight estimators that improve expert prediction hit rates, thereby reducing performance degradation. Our code is released in open-source at https://github.com/axonn-ai/yalis/tree/offload_prefetch.