--- license: apache-2.0 language: - en pipeline_tag: text-generation library_name: pytorch tags: - base-model - causal-lm - small-language-model - text-generation datasets: - HuggingFaceTB/smollm-corpus - HuggingFaceTB/finemath - mlfoundations/dclm-baseline-1.0-parquet - code-search-net/code_search_net - codeparrot/codeparrot-clean --- # BarunLM-35M BarunLM-35M is a compact, decoder-only base language model built for strong capability per parameter. With exactly **35,072,768 parameters**, it reaches **41.01%** on a fixed, decontaminated nine-task zero-shot suite and exceeds [LFM2.5-230M-Base](https://huggingface.co/LiquidAI/LFM2.5-230M-Base) while using **6.55× fewer parameters**. [Download the model](https://huggingface.co/harrrshall/BarunLM-35M) · [Inspect benchmark data](benchmark_results.json) · [License](LICENSE) ## Highlights - **Parameter-efficient hybrid attention.** Three local-attention layers feed each full-attention layer, combining a 256-token working window with periodic global information exchange. - **Selective residual routing.** A learned convex selector every four layers chooses between the block-group input and its transformed state, providing a lightweight path for preserving useful representations. - **Stable small-model optimization.** Grouped-query attention, partial RoPE, QK normalization, gated attention outputs, and bounded SwiGLU are integrated into a single 35M-parameter design. - **Capacity-aligned pretraining.** The model was trained on 5.70B tokens—about 162.5 tokens per parameter—from a curated blend of educational web text, synthetic exposition, mathematics, general web text, and code. - **Contamination-aware evaluation.** Reported scores exclude 1,854 samples identified by a correctness-blind exact 13-token scan over the complete training history. ## Results All rows below were evaluated zero-shot with LM Evaluation Harness 0.4.12 on ARC-Challenge, ARC-Easy, BoolQ, HellaSwag, LAMBADA OpenAI, OpenBookQA, PIQA, SciQ, and WinoGrande. The reported value is the unweighted macro average after applying the same frozen decontamination decisions to every model. | Model | Loaded parameters | Macro accuracy | BarunLM lead | |---|---:|---:|---:| | **BarunLM-35M** | **35.1M** | **41.01%** | — | | [LFM2.5-230M-Base](https://huggingface.co/LiquidAI/LFM2.5-230M-Base) | 229.7M | 39.20% | **+1.81 pp** | | [Pythia-160M](https://huggingface.co/EleutherAI/pythia-160m-deduped) | 162.3M | 37.35% | **+3.66 pp** | | [Stentor-30M](https://huggingface.co/StentorLabs/Stentor-30M) | 30.4M | 36.46% | **+4.55 pp** | | [TinyStories-33M](https://huggingface.co/roneneldan/TinyStories-33M)¹ | 68.5M | 33.16% | **+7.85 pp** | | [Pythia-70M](https://huggingface.co/EleutherAI/pythia-70m-deduped) | 70.4M | 31.71% | **+9.30 pp** | The paired 10,000-resample bootstrap interval for the BarunLM minus LFM2.5 macro difference is **[+0.92, +2.71] percentage points**. Exact revisions, task scores, confidence intervals, sample counts, and evidence hashes are in [`benchmark_results.json`](benchmark_results.json). ¹ TinyStories is included as a narrow-domain diagnostic rather than a general-purpose peer. Parameter counts are computed from the loaded models, not inferred from repository names. These results establish parameter efficiency on this evaluation suite; they do not imply universal superiority across tasks or deployment settings. ## Architecture | Component | Configuration | |---|---| | Parameters | 35,072,768 | | Layers / width | 12 / 448 | | Attention | 7 query heads, 1 key/value head | | Attention rhythm | 3 local layers, then 1 full layer | | Local window | 256 tokens | | Position encoding | 50% partial RoPE | | Feed-forward width | 1,228 | | Residual selection | Every 4 layers | | Vocabulary | 16,384 byte-level BPE tokens | | Context length | 2,048 tokens | | Embeddings | Input/output weights tied | The design treats global attention as a periodic communication layer rather than a cost paid at every depth. Local layers concentrate computation on nearby structure, while the global layer propagates information across the sequence. The residual selector then gives each four-layer group a learned preservation path with negligible parameter overhead. ## Quick start BarunLM uses a small native PyTorch implementation. It is a completion model, not a chat model, and does not require `trust_remote_code`. For the shortest path from this model repository: ```bash hf download harrrshall/BarunLM-35M --local-dir BarunLM-35M cd BarunLM-35M python -m venv .venv source .venv/bin/activate pip install -r requirements.txt python generate.py \ --prompt "The future of efficient language models is" \ --max-new-tokens 48 \ --temperature 0.8 ``` The maintained source package and tests are available in the [GitHub repository](https://github.com/harrrshall/barunlm-35m): ```bash git clone https://github.com/harrrshall/barunlm-35m.git cd barunlm-35m python -m venv .venv source .venv/bin/activate pip install -e . python examples/generate.py \ --prompt "The future of efficient language models is" \ --max-new-tokens 48 \ --temperature 0.8 ``` Both examples verify the three required model artifacts and select CUDA automatically when available. For deterministic greedy decoding, pass `--temperature 0`. To download the release without running it: ```bash hf download harrrshall/BarunLM-35M --local-dir BarunLM-35M sha256sum -c BarunLM-35M/SHA256SUMS ``` ## Training BarunLM-35M was pretrained on **5,699,985,408 realized tokens** at sequence length 2,048. The final 4B-token continuation used Muon with a peak learning rate of `1e-4`, weight decay `0.1`, batch size 48, and 40,690 optimizer steps on one NVIDIA H200. The complete corpus combines the following pinned public sources: - [FineWeb-Edu and Cosmopedia v2](https://huggingface.co/datasets/HuggingFaceTB/smollm-corpus) - [FineMath-4+](https://huggingface.co/datasets/HuggingFaceTB/finemath) - [DCLM-Baseline](https://huggingface.co/datasets/mlfoundations/dclm-baseline-1.0-parquet) - [CodeSearchNet Python](https://huggingface.co/datasets/code-search-net/code_search_net) - [CodeParrot Clean](https://huggingface.co/datasets/codeparrot/codeparrot-clean) Documents were deduplicated across stages before admission. Source revisions and upstream licensing notices are recorded in [`NOTICE`](NOTICE); no training data is redistributed in this repository or the model release. ## Release integrity | Artifact | SHA-256 | |---|---| | `model.safetensors` | `f2a7c88b9f2c2e3584809081407ab136795d82e30e89b730e007781c45d01447` | | `barun_config.json` | `9b3a1d71baa95a198744d250f9629231738d942570b8685c44307fd83dd33565` | | `tokenizer.json` | `70ded9605fccd09c2340ca7e225361eab0ae8b4dbbb0d6e26343ab5183979db6` | The checkpoint contains 35,072,768 unique trainable parameters. All stored floating-point tensors passed an independent finiteness and shape audit. ## Intended use and limitations BarunLM-35M is intended for research on compact language models, controlled text-generation experiments, education, and local prototyping. - It is a base model, not instruction-tuned, and should be prompted as a text continuation model. - Its 2,048-token context and 35M-parameter capacity limit factual recall, multi-step reasoning, instruction following, and long-context synthesis. - Training and evaluation are English-centric. - Outputs may be inaccurate, biased, unsafe, repetitive, or fabricated. - The model has not undergone a comprehensive safety evaluation and should not be used for medical, legal, financial, or other high-stakes decisions. Users should evaluate the model in their own domain and apply appropriate guardrails before deployment. ## Acknowledgements BarunLM builds on ideas developed across the open language-model ecosystem, including [grouped-query attention](https://arxiv.org/abs/2305.13245), [rotary position embeddings](https://arxiv.org/abs/2104.09864), and [SwiGLU](https://arxiv.org/abs/2002.05202). We thank the teams behind PyTorch, Hugging Face, LM Evaluation Harness, FineWeb-Edu, Cosmopedia, FineMath, DCLM, CodeSearchNet, and CodeParrot for the open infrastructure and data that made this release possible. ## License The source code and released weights are available under the [Apache License 2.0](LICENSE). Upstream datasets retain their own licenses and terms as described in [`NOTICE`](NOTICE).