| --- |
| language: |
| - en |
| license: apache-2.0 |
| tags: |
| - pytorch |
| - gpt |
| - from-scratch |
| - small-lm |
| - fitness |
| pipeline_tag: text-generation |
| --- |
| |
| # Koachie 312M — a language model built from scratch for £60 |
|
|
| Koachie is a 312M-parameter GPT-style language model built entirely from |
| scratch by [Baller Knowledge](https://koachiefitai.co.uk) in Glasgow, Scotland |
| — own tokenizer, own architecture implementation, own training loop. It is not |
| a fine-tune of any existing model and no external model's weights were used at |
| any point. |
|
|
| Total pretraining cost was roughly **£60 of rented GPU time**. It serves real |
| users today at [koachiefitai.co.uk](https://koachiefitai.co.uk). |
|
|
| ## Architecture |
|
|
| | | | |
| |---|---| |
| | Parameters | 312.06M | |
| | Layers / width / heads | 24 × 1024d × 16h (head_dim 64) | |
| | Positions | RoPE | |
| | Norm / MLP | RMSNorm (pre-norm) / SwiGLU | |
| | Attention | fused flash attention (PyTorch SDPA) | |
| | Context | 512 tokens | |
| | Vocabulary | 8,000 (custom BPE, trained from the corpus) | |
| | Embeddings | tied | |
| |
| ## Training |
| |
| - **Data:** ~40B tokens, predominantly FineWeb-Edu, with Wikipedia, Project |
| Gutenberg, PubMed Central open-access and OASST/Dolly dialogue. Licence-aware |
| curation throughout (Reddit-derived data deliberately excluded). |
| - **Optimiser:** Muon (Newton–Schulz orthogonalised momentum) for hidden |
| matrices, AdamW for embeddings/norms; WSD (warmup–stable–decay) schedule. |
| - **Hardware:** single-GPU rentals (RTX 5090 class) plus a desktop RTX 3070; |
| DDP path written and measured at 137k tokens/sec on 4× RTX 5090. |
| - **A finding worth sharing:** Muon learning-rate stability followed a |
| reproducible law across two machines — each halving of LR extended the |
| stable training horizon roughly 8× (0.006 diverged near 2k steps, 0.003 |
| near 25k, 0.0015 near 40k, 0.00075 past 180k). |
| |
| ## Evaluation |
| |
| EleutherAI lm-evaluation-harness, **full test sets, no sampling**. Two |
| checkpoints: the pretrained base and the conversational SFT that serves the |
| live product. |
| |
| | task (acc, %) | base | SFT | |
| |---|---|---| |
| | SciQ | **71.9** | 66.2 | |
| | PIQA | 62.0 | 61.7 | |
| | WinoGrande | 50.4 | 51.4 | |
| | ARC-Easy | 45.7 | 45.2 | |
| | OpenBookQA (norm) | 31.8 | 31.8 | |
| | HellaSwag (norm) | 29.4 | 29.6 | |
| | ARC-Challenge (norm) | 22.9 | 25.3 | |
| | LAMBADA (ppl ↓) | **176.1** | 241.0 | |
| |
| Roughly GPT-2-class performance. The base is the stronger language model |
| (note the perplexity gap); the SFT trades some of that for conversational |
| behaviour, which is the expected pattern. |
| |
| ## Honest limitations |
| |
| This is a small model and it behaves like one. Closed-book, it will confidently |
| state wrong facts; ARC-Challenge is near chance. The production system around |
| it does not rely on the model's memory: factual questions are resolved against |
| Wikidata's structured records or answered by quoting a retrieved source |
| verbatim, generated answers are marked by a judge before they ship, and |
| medical red flags are intercepted and referred to a professional. The model is |
| the voice; verification is the product. |
| |
| ## Files |
| |
| - `koachie-312m-base.pt` — pretrained base checkpoint (step 304,000, ~40B tokens) |
| - `tokenizer.json` — the 8k custom BPE tokenizer |
| - `lm_eval_base.json` / `lm_eval_sft.json` — raw harness output for the table above |
| |
| Weights are a plain PyTorch `state_dict` under `model` with `model_config` |
| alongside; the reference implementation (model code, training loop, evaluation |
| adapters) lives in the project repository. |
| |
| ## Intended use |
| |
| Research into small-model training economics, retrieval-first product |
| architectures, and as evidence that a working language model is buildable at |
| consumer cost. Not a general-purpose assistant on its own. |
| |
| Built by Steven McKinney, Baller Knowledge UK Ltd, Glasgow. |
| |