Skip to content
Tech News
← Back to articles

Training a 3.8B LLM to 0.384 CORE for $998 – Hugo Vergnes

read original get NVIDIA GeForce RTX 5090 Founders Edition → more articles
Why This Matters

An independent developer trained a 3.8B-parameter language model to a 0.384 CORE score for under $1,000 in 43 hours on rented B200 GPUs, outperforming Karpathy's nanochat d32 at similar cost. It's a concrete data point that meaningful from-scratch LLM training is now within reach of individuals, not just labs, and that per-dollar capability keeps improving as hardware advances.

Key Takeaways
Worth a Look

NVIDIA GeForce RTX 5090 Founders Edition — The author debugged this whole from-scratch LLM run on a 5090 before renting cloud B200s — it's the local workstation card that makes iterating on training code at home realistic. With its huge memory pool and Blackwell tensor cores, it's the natural centerpiece for anyone wanting to watch language emerge from random weights on their own desk.

See NVIDIA GeForce RTX 5090 Founders Edition on Amazon → Affiliate link — we may earn a commission on purchases, at no extra cost to you. Product picked by AI based on this article; it is not a tested recommendation.

Somewhere between “nanoGPT toy” and “you need a research lab” there’s a large, under-described region where one person with a few thousand dollars can train a meaningful model.

I wanted to see language and understanding emerge from random weights for myself, and to learn the parts you can only learn by starting from scratch. This project was written in the evenings, debugged on a 5090 and finished on rented B200s. It was heavily inspired by Andrej Karpathy’s nanochat.

The result is a 3.8B-parameter model scoring 0.384 on CORE, trained on 65B tokens in 43 hours for $998.

What follows is what worked, what didn’t, and what I still don’t know.

Model Params Tokens Hardware Time Cost CORE GPT-2 (OpenAI) 1.5B — — — — 0.2565 nanochat d26 ~561M 11.2B 8× H100 ~3h — ~0.258 nanochat d32 ~1B — 8× H100 ~33h ~$1000 0.310 little-lm 3.8B (1024 ctx) 3.848B 57.3B 8× B200 35.9h $820 0.338 little-lm 3.8B (2048 ctx) 3.848B 65.3B 8× B200 43h $998 0.384

My model is larger than nanochat d32 and took similar wall-clock time. B200s were better value per unit of work than H100s. But for roughly the same money as nanochat’s $1,000 configuration, this lands meaningfully ahead of it. An encouraging data point about what’s reachable outside a lab or a mega company with millions in compute budget. As the frontier moves, $1,000 takes you further and further.

Setup

I’ve built little-lm as a config-driven framework for training small decoder-only LLMs. Every run is fully specified by a YAML file: model, dataset, optimizer, schedule, callbacks. Components self-register into a global registry and get resolved by name, so swapping an optimizer or a dataset is a one-line config change.

Good infrastructure pays for itself almost immediately. Ordinary software engineering discipline (Things like separation of concerns, clean interfaces, components you can swap in) matters a lot in AI work. It cost me a little at the start, and a couple more times afterward to fix bad contracts or suboptimalities. But this time investment pays for itself at the first convergence problem you encounter. I found that a great infra is the infra that almost never requires you to edit code manually. If you can read the config and understand exactly what happens, and there are no hidden mechanics, it means you have done a good job. The following report is the result of being able to express experiments as a three-line YAML diff rather than a branch.

The final model is Llama-style: RMSNorm, RoPE, GQA (24 query heads, 8 KV heads), relu² MLPs, QK-norm, logit softcap, per-layer learnable residual scalars, and ResFormer-style value embeddings.

... continue reading