|
Download README.md from Compactbot/tinystories-24m: direct link, hf CLI and curl.
- Browser
- Download file 3.84 kB
-
https://huggingface.co/Compactbot/tinystories-24m/resolve/main/README.md
- Command line
-
hf download hf://Compactbot/tinystories-24m/README.md
-
curl -L -o README.md https://huggingface.co/Compactbot/tinystories-24m/resolve/main/README.md
3.84 kB
| license: apache-2.0 | |
| pipeline_tag: text-generation | |
| language: en | |
| tags: | |
| - tiny | |
| - tiny-lm | |
| - tiny-model | |
| - slm | |
| - small-language-model | |
| - from-scratch | |
| - tinystories | |
| - bpe | |
| - gpt | |
| datasets: | |
| - roneneldan/TinyStories | |
| metrics: | |
| - perplexity | |
| - accuracy | |
| # TinyStories-24m | |
| A **24.59M-parameter** BPE language model trained **from scratch** on | |
| [roneneldan/TinyStories](https://huggingface.co/datasets/roneneldan/TinyStories), | |
| producing coherent short stories with proper dialogue, names, punctuation and | |
| narrative flow. | |
| ## What it is | |
| - **Architecture:** decoder-only GPT, weight-tied embeddings, RMSNorm, fused | |
| qkv multi-head causal attention (SDPA), GELU FFN. | |
| - **Shape:** D=384, L=12 layers, H=8 heads, FFN=1536, SEQ=512, vocab=8192 (BPE). | |
| - **Params:** 24,585,600 (verified against the safetensors header). | |
| - **Data:** roneneldan/TinyStories β 447.8M train tokens, 2M held-out val. | |
| - **Training:** 1 epoch β 13,600 steps, AdamW, cosine LR 6e-4 + 500 warmup, | |
| bf16 autocast, on a single RTX 5090. | |
| ## Quality | |
| - **Val perplexity:** 8.76 (2.1618 nats/token, training-time fixed-window score). | |
| Full-split repro (100 random 512-token windows over the 4.5M-token val split): | |
| **12.39** (2.5172 nats/token). The gap is methodology (fixed window vs random | |
| windows), not a card error. | |
| - **Generation:** coherent. Sampled 9/9 seeded generations (3 seeds Γ 3 prompts) | |
| produce proper dialogue, character names (Ben, Lily, Mom, Tom, Sarah, Max), | |
| punctuation and narrative flow. This model is a story generator for its | |
| training domain β it is **not** a general-purpose assistant and will not | |
| answer questions it was not trained on. | |
| ### Benchmark results (zero-shot loglikelihood, 400 examples per task) | |
| | Task | Accuracy | Chance | Notes | | |
| |------|----------|--------|-------| | |
| | ARC-Easy | 13.3% | 25% | below chance | | |
| | ARC-Challenge | 12.5% | 25% | below chance | | |
| | HellaSwag | 25.0% | 25% | at chance | | |
| | SciQ | 25.0% | 25% | at chance | | |
| | PIQA | 50.0% | 50% | at chance | | |
| All results are at or below chance β expected for a 24M model trained exclusively | |
| on simple children's stories. The model has learned the distribution of story | |
| text but has no general reasoning, commonsense, or science knowledge. | |
| ## Honest caveats | |
| - **Divergence:** the full 13,600-step run diverged to NaN at step 9,350 (LR 6e-4 | |
| is too hot for a 24M model). The **best** checkpoint (step 6,000, val 2.1618) | |
| is what is published here β it is clean and coherent. The divergence is late, | |
| so a clean early checkpoint is the right artifact; always sample the best | |
| checkpoint, not the final one. | |
| - **Domain-bound:** trained only on TinyStories. Out-of-domain text (code, | |
| questions, general conversation) is out of scope. | |
| ## Usage | |
| Not a `transformers` model β load with the bundled `modeling.py`: | |
| ```python | |
| import sys, torch | |
| sys.path.insert(0, "path/to/this/repo") | |
| from modeling import TinyStoriesGPT | |
| from tokenizers import Tokenizer | |
| m = TinyStoriesGPT.from_pretrained("path/to/this/repo", device="cpu") | |
| tok = Tokenizer.from_file("path/to/this/repo/tokenizer.json") | |
| ids = tok.encode("Ben was playing in the park.", add_special_tokens=False).ids | |
| x = torch.tensor([ids], dtype=torch.long) | |
| with torch.no_grad(): | |
| for _ in range(80): | |
| logits = m(x[:, -512:])[:, -1] | |
| nxt = torch.multinomial(torch.softmax(logits / 0.8, -1), 1).item() | |
| ids.append(nxt) | |
| x = torch.tensor([ids[-512:]], dtype=torch.long) | |
| print(tok.decode(ids, skip_special_tokens=True)) | |
| ``` | |
| ## Files | |
| | file | bytes | what | | |
| |------|-------|------| | |
| | `model.safetensors` | 98,349,056 | 75 tensors, float32 | | |
| | `config.json` | β | architecture + training metadata | | |
| | `modeling.py` | β | the `TinyStoriesGPT` class (load with `from_pretrained`) | | |
| | `tokenizer.json` | 560,804 | BPE-8k tokenizer (HF `tokenizers` format) | |