--- license: mit language: - en tags: - causal-lm - from-scratch --- # OpenWebText 103M A 102.7M parameter decoder-only transformer trained from scratch on an OpenWebText sample, with a custom byte-level BPE tokenizer. No `transformers`, no pretrained components — every layer written from primitives. ## Results | | | |---|---| | Validation loss | 3.516 (perplexity 33.6) | | Parameters | 102.7M total, 56.6M non-embedding | | Training tokens | 819.2M | | Hardware | 1x A100 80GB, ~3.5 hours | Comparable in size to GPT-2 small (124M), which reaches ~2.85 on OpenWebText with substantially more training. This model saw 819M tokens against 102.7M parameters (~8:1, or ~14.5:1 excluding embeddings) — well under Chinchilla-optimal, a deliberate tradeoff against a fixed GPU-hour budget. ## Architecture Pre-norm decoder. RMSNorm, RoPE (theta=10000), SwiGLU FFN, causal multi-head attention. 8 layers, 12 heads, d_model 768, d_ff 2048, context 512, vocab 30000. Embeddings are untied and account for 45% of parameters. Trained with hand-written AdamW, cosine LR schedule with 700-step warmup, peak LR 6e-4, global-norm gradient clipping at 1.0, TF32 matmuls. ## Usage Not a `transformers` architecture. Requires `torch`, `einops`, `safetensors`. ```python import json, torch from safetensors.torch import load_file from model import TransformerLM from tokenizer import Tokenizer cfg = json.load(open("config.json")) model = TransformerLM( cfg["vocab_size"], cfg["context_length"], cfg["num_layers"], cfg["d_model"], cfg["num_heads"], cfg["d_ff"], cfg["theta"], ) model.load_state_dict(load_file("model.safetensors")) model.eval() tok = Tokenizer.from_file("owt_vocab.json", "owt_merges.txt", ["<|endoftext|>"]) ``` ## Limitations Learns register convincingly — encyclopedic prose, news style, quoted dialogue — with no factual grounding. Generates confident historical nonsense. Prone to repetition loops under low-entropy sampling. Prompt: `The history of the Roman Empire` > The history of the Roman Empire, however, is difficult to overstate. The > Medieval days in the Middle Ages and early in the Middle Ages, under the > pagan order, were filled with slaves who took advantage of the culture of > the Christian religion. [...] In 1791, an important Jewish uprising against > the Christian order was initiated. Structurally sound encyclopedia prose; every factual claim is invented.