Skip to content
C.W.K.
Stream
Lesson 02 of 06 · published

M1 Was Designed Before ChatGPT

~13 min · mouse, history, m1, chatgpt, design-lead-time, model-sizes

Level 0Spec-Sheet Skimmer
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"Seven hundred and fifty days. That is how long the layout waited for the workload."

Two Years, Plus the Design Cycle

The M1 shipped on 2020-11-10. ChatGPT went public on 2022-11-30 — 750 days later, as the previous lesson's timeline computes. And a chip is not designed the year it ships: a processor of the M1's complexity is defined years before its release, so the decisions that gave the Mac a single memory pool were made when the largest language model in public view was a research paper. GPT-3 was described in May 2020, six months before the M1, and it was a 175-billion-parameter model that ran in a data centre; the idea that a 7-billion-parameter descendant would run on a laptop did not exist as an idea, because no such model had been released for anyone to run.

Apple's own machine-learning story in those years was on-device and small. The Neural Engine was pitched for camera processing and app-embedded models; Apple's 2022 research on running transformers on the Neural Engine targeted models that fit in a phone's memory. There is no Apple document from 2020 to 2023 that frames unified memory as a way to hold a large model. The framing arrives with MLX in December 2023, and it arrives after the community had already been doing it for nine months.

What Fit Where, When

The clearest way to see the accident is to line up memory capacities against model sizes by year. The table is public facts with public dates: consumer GPU memory, Mac unified memory, and the size of the openly available model people wanted to run.

YearLargest consumer GPU memoryLargest Mac unified memoryOpen model people wanted to run (bf16 size)Where it fitEvidence
202024 GB (RTX 3090)16 GB (M1)GPT-3 (not released; 175B ≈ 350 GB)nowhere on a deskvendor specs; OpenAI paper
202124 GB64 GB (M1 Max)vendor specs
202224 GB (RTX 4090)128 GB (M1 Ultra)vendor specs
202324 GB192 GB (M2 Ultra)LLaMA 65B ≈ 130 GB; 7B ≈ 14 GB7B on any card at 4 bits; 65B only in a Mac's poolMeta release; arithmetic
202424 GB192 GB (M2 Ultra)a 405B dense ≈ 810 GB; ≈ 243 GB at 4 bitsnowhere on a desk — the Mac lost this year toovendor specs; arithmetic
202532 GB (RTX 5090)512 GB (M3 Ultra)750B-class mixtures: GLM-5.3 (753B) ≈ 1.5 TB bf16, ≈ 450 GB at 4 bits; DeepSeek-V4.1-Flash 510 GB as shippedonly a 512 GB Mac, and narrowly — the 85% thumb says no, the big-models track's measured working set says yes — or a rackvendor specs; the household's store catalogue

Read the two memory columns. Consumer GPU memory sat at 24 GB for five years while the Mac's pool went from 16 to 512. Neither vendor was aiming at models — NVIDIA's consumer cards are gaming products, and Apple's pool grew for video and 3D — but when open models arrived in 2023 at sizes between the two, the machine whose memory had kept growing was the one they fit in. That is the mouse. It is visible in a table anyone could have drawn in 2022, and nobody did, because the row that made it interesting had not been released yet.

Code

what_fit_where.py — memory capacity vs open model size, by year·python
#!/usr/bin/env python3
"""Which desk-class machine could hold which open model, by year, at bf16 and
at 4 bits (~0.6 bytes/param). Public specs and release sizes; the point is
the shape, not the exact byte."""

GPU_GB = {2020: 24, 2021: 24, 2022: 24, 2023: 24, 2024: 24, 2025: 32}     # RTX 3090 / 4090 / 5090
MAC_GB = {2020: 16, 2021: 64, 2022: 128, 2023: 192, 2024: 192, 2025: 512}  # M1 / M1 Max / M1 Ultra / M2 Ultra / M3 Ultra
MODELS = [  # year available to run, name, parameters (B)
    (2023, "LLaMA 7B", 7), (2023, "LLaMA 65B", 65), (2024, "a 405B dense", 405), (2025, "a 753B mixture (GLM-5.3)", 753),
]

for year, name, params in MODELS:
    bf16, q4 = params * 2, params * 0.6
    gpu, mac = GPU_GB[year], MAC_GB[year]
    fit = lambda gb, cap: "fits" if gb <= cap * 0.85 else "no"
    print(f"{year} {name:16} bf16 {bf16:6.0f} GB  4-bit {q4:6.0f} GB | "
          f"GPU {gpu:3d} GB: bf16 {fit(bf16, gpu):4} 4-bit {fit(q4, gpu):4} | "
          f"Mac {mac:3d} GB: bf16 {fit(bf16, mac):4} 4-bit {fit(q4, mac):4}")

print("\nconsumer GPU memory 2020->2025: 24 -> 32 GB; Mac unified memory: 16 -> 512 GB")

External links

Exercise

Run what_fit_where.py and add a row for the year you bought your Mac: its pool size, the largest consumer GPU of that year, and the largest open model you actually wanted to run. Which column did your model fit in, and at what precision? Then write one sentence on whether you bought the machine for that model or found the model after.
Hint
Most owners' honest answer is 'found the model after' — which is the mouse at household scale. The founder's two 512 GB machines are the exception: bought in March 2025 for exactly the row that fits nowhere else, after the mouse was already visible.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.