Show HN: I ran a language model on a PS2

A developer has successfully ported a large language model to the 26-year-old PlayStation 2 console. By streaming model weights directly from the CD-ROM, the project overcomes the hardware's 32MB RAM limitation.
Running a large language model on a PlayStation 2.
This project started as an experiment born from two passions: retrogaming and LLMs. Having built a complete PS2 SDK from scratch (including tools that had to be rewritten due to incompatibilities with modern software and hardware), and having extensive experience working with language models, the question after seeing a team run an LLM on a Windows 98 PC was simple: "Can I run this on a 26-year-old game console?"
The answer is yes. The PS2's Emotion Engine (MIPS-III @ 294 MHz, 32 MB RAM) can run transformer inference by streaming model weights from CD-ROM one matrix at a time, keeping only activations and KV cache in memory. The current default model is brandon-tiny-10m-instruct, a custom 10M-parameter architecture running at Q8 precision.
The PS2 has 32 MB of RAM total. Model weights don't need to fit in memory -- the inference engine streams them from CD-ROM one matrix at a time during the forward pass. Only activations, KV cache, token embeddings, and RMS norms stay in RAM.
This means models much larger than 32 MB can run on the console. A 77 MB model works -- it just reads more from CD.
Several models were tested during development. The current default is brandon-tiny-10m (Q8, ~10.4 MB), chosen for its balance of speed and coherence on PS2 hardware.
| Model | HuggingFace | Quant | PSNT Size | Status | |---|---|---|---|---| | brandon-tiny-10m-instruct | xaskasdf/brandon-tiny-10m-instruct | Q8 | ~10.4 MB | Current default | | SmolLM2-135M-Instruct | HuggingFaceTB/SmolLM2-135M-Instruct | Q4 | ~77 MB | Tested (too slow, 30 layers) | | TinyLlama 110M | karpathy/tinyllamas | Q4 | ~30 MB | Tested | | TinyLlama 110M | karpathy/tinyllamas | Ternary | ~27 MB | Tested (poor quality) | | stories260K | karpathy/tinyllamas | float32 | ~1 MB | Early testing only |
Weights use the PSNT (PS Net) binary format, a compact quantized format designed for the PS2's constraints. Supports ternary (2-bit), Q4 (4-bit), and Q8 (8-bit) quantization.
Key components:
game_main.c: PS2 entry point, UI, controller input, CD-ROM streamingllama_ps2.c: Self-contained LLM inference enginetools/: Python conversion and verification scriptscd_rom/: Runtime data (models, tokenizers, IOP modules) burned to CD image
Source: Hacker News









