| --- |
| license: mit |
| pipeline_tag: text-generation |
| datasets: |
| - disco-jack-basement/byob-pd-book-corpus |
| language: |
| - en |
| - fr |
| - de |
| - it |
| - es |
| - pt |
| - nl |
| - sv |
| - da |
| - 'no' |
| - fi |
| - pl |
| - hu |
| - cs |
| - la |
| - el |
| - grc |
| - uk |
| tags: |
| - pytorch |
| - gpt |
| - transformer |
| - character-level |
| - language-model |
| - from-scratch |
| - public-domain |
| --- |
| |
| # letterpress - trained character-level GPTs |
|
|
| The trained checkpoints of [letterpress](https://github.com/Novotarskyi/letterpress), |
| a character-level GPT built from scratch in PyTorch (following Karpathy's "Let's |
| build GPT" lecture) and trained on nested tiers of a public-domain book corpus. |
| These are **base models**: they continue text in the style of the books they read, |
| one character at a time - they are not chatbots and do not follow instructions. |
|
|
| (The checkpoint files keep the model family's historical name `byob-lm` - the |
| letterpress repo was formerly `byob_llm` - so paths, benchmark reports, and the |
| companion dataset stay stable.) |
|
|
| ## Models |
|
|
| | tier | params | layers x width | context | vocab | best val loss | held-out bpc | wikitext bpc | file | |
| |---|--:|---|--:|--:|--:|--:|--:|---| |
| | `nano` | 0.82M | 4 x 128 | 128 | 65 | - | **2.68** | 4.09 | `nano/shakespeare-nano.pt` | |
| | `medium` | 25.4M | 8 x 512 | 256 | 97 | 1.2278 | **1.69** | 2.91 | `medium/byob-lm.best.pt` | |
| | `large` | 49.7M | 10 x 640 | 384 | 198 | 1.1111 | **1.57** | 2.30 | `large/byob-lm.best.pt` | |
| | `xlarge` | 99.9M | 14 x 768 | 512 | 199 | 0.9411 | **1.31** | 1.88 | `xlarge/byob-lm.best.pt` | |
| | `2xlarge` | 202M | 16 x 1024 | 512 | 204 | 0.8725 | **1.17** | 1.71 | `2xlarge/byob-lm.best.pt` | |
|
|
| Held-out bpc = bits-per-char on public-domain books absent from every training |
| tier; wikitext = out-of-domain. Both measured by the repo's bundled `lm_bench` |
| harness (seed 1337, byte-normalized); full scorecards live in the repo under |
| `lm_bench/benchmarks/`. Lower is better; the corpus tiers are nested, so every |
| gain down the table is scale, not data luck. |
|
|
| ## How to use |
|
|
| The checkpoints are self-describing (`{model, config, stoi, itos}`, optimizer |
| state stripped) but unpickle the letterpress `GPTConfig`, so you need the repo's |
| source next to them: |
|
|
| ```bash |
| git clone https://github.com/Novotarskyi/letterpress.git && cd letterpress |
| python3 -m venv .venv && .venv/bin/pip install -r requirements.txt |
| hf download disco-jack-basement/letterpress 2xlarge/byob-lm.best.pt --local-dir models |
| |
| .venv/bin/python -m inference.sample --ckpt models/2xlarge/byob-lm.best.pt --prompt "ROMEO:" |
| .venv/bin/python -m inference.interact --ckpt models/2xlarge/byob-lm.best.pt |
| cd lm_bench && ../.venv/bin/python -m lm_bench run --model byob:../models/2xlarge/byob-lm.best.pt --tasks core |
| ``` |
|
|
| ## Training provenance |
|
|
| - **nano** - Tiny Shakespeare (1.1M chars); the lecture demo, trained locally |
| - **medium** - medium tier (523M chars); Apple-Silicon MPS, ~1 h |
| - **large** - large tier (1.08B chars); Apple-Silicon MPS, ~3.5 h |
| - **xlarge** - xlarge tier (2.05B chars); rented H100 SXM, ~2.5 h |
| - **2xlarge** - 2xlarge tier (4.26B chars); rented H200, ~12.6 h |
|
|
| Each `<tier>/` folder here also carries the archive's provenance files |
| (context.md with the full hyperparameters and val curve, corpus_stats.txt, |
| corpus.lock.json, corpus_index.md) where the archive has them. |
|
|
| ## Data |
|
|
| Trained exclusively on the companion public-domain corpus |
| [`disco-jack-basement/byob-pd-book-corpus`](https://huggingface.co/datasets/disco-jack-basement/byob-pd-book-corpus) |
| (CC0; Project Gutenberg, Standard Ebooks, Internet Archive, Wikisource), curated |
| under a strict, code-enforced no-Russian-content rule. |
|
|
| ## License |
|
|
| Code and weights: MIT. The training corpus is CC0 and published separately. |
|
|