--- license: apache-2.0 pipeline_tag: text-generation language: en tags: - tiny - tiny-lm - tiny-model - slm - SLM - small-language-model - from-scratch - llama datasets: - HuggingFaceFW/fineweb-edu - allenai/dclm-baseline metrics: - perplexity --- # LDT-10M A 10.28M-parameter LLaMA-style language model, trained from scratch on FineWeb-Edu + DCLM. **Requested by [DedeProGames](https://huggingface.co/DedeProGames) on the [model-requests board](https://huggingface.co/spaces/Compactbot/model-requests) (#12).** ## Architecture | Parameter | Value | |---|---| | Params | **10,284,480** | | Layers | 5 | | d_model | 320 | | Heads | 5 (MHA, GQA not used at this scale) | | FFN dim | 896 (SwiGLU) | | Vocab | 12,288 (gollem BPE) | | Context | 512 | | Embeddings | Tied (lm_head → tok.weight) | | Norm | RMSNorm (eps 1e-5) | | Attention | RoPE + causal SDPA | | Dtype | float32 | Standard LLaMA block: RMSNorm → MHA (RoPE) → residual → RMSNorm → SwiGLU FFN → residual. ## Training | | | |---|---| | Steps | 4,000 | | Batch size | 64 | | LR | 3e-4 → 3e-5 (cosine decay) | | Data | FineWeb-Edu (30.1M tok) + DCLM baseline (21.4M tok) = **~50.5M tokens** | | Tokens/param | **~4.9** | | Hardware | RTX 5090 (32 GB), GPU | | Final val loss | **4.6020** (ppl 99.68) | ### ⚠️ Honest caveat: undertrained and incoherent DedeProGames requested **2.6B tokens**. This checkpoint is at **50.5M tokens** — a ~50× shortfall. The GPU was occupied by other work for most of the training window, and the CPU was over-subscribed. At 4.9 tok/param the model has learned the **surface shape** of English — real words, parseable sentences, no token loops — but **not coherent meaning**. The val loss (4.602) is well below the 7.38 unigram floor, so it genuinely uses context rather than just reproducing the marginal word distribution; but the prose is **semantically incoherent** (word salad): grammatically plausible sentences that don't mean what they say. This is a **first checkpoint**, not the final deliverable. Continued training toward the 2.6B budget is planned. ## Eval (40 samples, 8 prompts × 5 seeds, temp 0.8, top-k 40) | Metric | Value | |---|---| | mean loop_frac | 0.042 | | max loop_frac | 1.0 (one sample) | | Degenerate? | **No** | | Below unigram floor? | **Yes** (4.602 < 7.38) | ### Sample outputs > "The cat sat on the earth and it will be asleep. It is also a little time to get up the world. So the world is a fancy mound, and it is a little more common one. The last thing about the world is a part of a real life. It would be a great place, like it and in the earth. The problem is, the old world will be a good idea. So the world is just a bit of a whole larvity." > "She opened the door and started her home and said she was in the room. The only time she wasn think she was being a young girl. She didn't have that. She was not like the kids that was the one who had been killed in the kitchen. She was in a house a few months later. She was a very small girl and she was at her friends." > "Once upon a time, the person will be sent to each other, or if you are going to go through it. So, you know, that's the question of what we are talking about. But a lot of people are going to have a good chance of a feeling. But that is, I do not know what they're going to do." > "def hello(): I can understand how to make a word. You can't find the word to say (they'll do anything) and try to explain it. I'm not sure if I can't read it, but I'm trying to figure out what to do to say, but I'm sure I'm using a code that I have to look at the other side of a computer." These are real outputs from the eval run (not hand-picked for coherence). The text is grammatically structured — real words, parseable sentences, no token loops, no broken tokens — but semantically incoherent. That is the honest state of a 10M model at 4.9 tok/param. ## Usage The model uses a custom `LDT` architecture (standard LLaMA block, no special tricks). The safetensors file contains 47 tensors with tied embeddings (lm_head is not stored separately; it shares `tok.weight`). To load with a custom model class, you need a small LLaMA-style implementation matching the config above. The training script (`train_ldt10m_fixed.py`) contains the full architecture definition. ## What this is NOT - Not a 2.6B-token model (that's the target; this is the 50.5M checkpoint) - Not a coherent-text model (it produces grammatically-structured word salad at this token budget) - Not a general-purpose assistant (it's a raw LM, no instruction tuning) - Not a replacement for anything larger — it's a research checkpoint in a from-scratch training run