Coding Horizon

Local AI Hardware: The Spec Nobody Warns You About

Every figure, name, version and claim the finished picture puts on screen, chased to a primary source. Worked from the TEXT: lines in BEATS.md, so nothing on screen is missed.

This video’s script was written before any shot existed and was recorded word for word, so the narration cannot be corrected by editing a component. Where a figure could not be sourced it is listed under Not checked at the bottom rather than presented as a fact, and the shots that render those figures present them as worked examples of a mechanism rather than as measurements.


Tooling and system requirements

LM Studio recommends 16 GB of RAM, and at least 4 GB of dedicated VRAM on Windows. On macOS the guidance is “16GB+ RAM recommended”, with the note that “You may still be able to use LM Studio on 8GB Macs, but stick to smaller models and modest context sizes”. macOS requires Apple Silicon (M1/M2/M3/M4); Intel Macs are not supported. Windows is supported on x64 and ARM, Linux on x64 and ARM64.

Shots: 063-lm-studio-recommends, 064-eight-gb-tight-room, 178-pick-a-tool-run-it.

LM Studio runs a local server exposing OpenAI-style endpoints. The documentation describes “chat, responses, embeddings, and other familiar OpenAI-style endpoints”, started with lms server start --port 1234.

Shots: 128-lm-studio-approachable, 079-ollama-and-lm-studio-serve.

LM Studio ships an MLX engine for Apple Silicon alongside its llama.cpp/GGUF support. Version 0.3.4 “ships with an MLX engine for running on-device LLMs super efficiently on Apple Silicon Macs”, and users can “mix and match llama.cpp and MLX models”.

Shots: 114-what-a-mac-can-do, 138-model-formats.

Ollama exposes OpenAI-compatible endpoints on http://localhost:11434/v1. The documented endpoints are /v1/chat/completions, /v1/completions, /v1/models, /v1/embeddings and /v1/responses. The API key is required by the client but ignored.

Shots: 081-point-at-the-endpoint, 084-local-address-not-cloud, 130-pull-run-serve-connect, 136-a-local-endpoint, 137-connect-everything, 193-connect-what-you-use.

llama.cpp’s stated goal and its backends. The project aims “to enable LLM (and VLM) inference with minimal setup and state-of-the-art performance on a wide range of hardware”. The README lists CUDA (NVIDIA), Metal (Apple Silicon), HIP (AMD), Vulkan, SYCL (Intel) and a dependency-free CPU implementation, plus BLAS, CANN, MUSA, OpenCL and WebGPU.

Shots: 132-practical-across-machines, 056-nvidia-cuda, 057-amd-rocm, 043-offload-to-cpu.

llama.cpp supports 1.5-bit through 8-bit integer quantisation, “for faster inference and reduced memory use”, which is where the 4 bit, 5 bit and 8 bit names the script mentions come from.

Shots: 034-four-five-eight-bit, 032-quant-is-the-trick, 177-things-you-do-not-need.

GGUF is a single-file format for GGML-family executors. It is “designed for fast loading and saving of models, and for ease of reading”, supports memory-mapped loading, and is the successor to GGML, GGMF and GGJT, the last of which was what llama.cpp previously used.

Shots: 138-model-formats, 139-not-every-file-works.

Apple showed local agentic AI on the Mac using MLX at WWDC26. Session 232, “Run local agentic AI on the Mac using MLX”, describes a four-layer stack: MLX (the array framework for Apple silicon), MLX-LM (loading, running, quantising and fine-tuning models), MLX-LM Server (an OpenAI-compatible HTTP server with structured tool calling, described as a drop-in replacement for a cloud LLM API), and any agent framework that speaks the OpenAI chat completions protocol. Install is pip install mlx-lm.

Shots: 058-apple-mlx, 133-mlx-on-apple, 134-apple-agentic-mlx, 114-what-a-mac-can-do, 080-llamacpp-and-mlx-serve.

The KV cache is a real memory cost that grows with context. Hugging Face’s Transformers documentation states that “The KV cache can occupy a significant portion of memory and become a bottleneck for long-context generation”, and that the default dynamic cache “allows the cache size to grow dynamically in order to store an increasing number of keys and values as generation progresses”. Offloading it to CPU is offered specifically for small-GPU out-of-memory cases, and quantised caches trade quality for size.

Shots: 025-context-size, 087-kv-cache-costs, 088-fits-until-you-ask, 086-context-needs-room.


Model sizes on screen

Ollama’s published download sizes for the models the shots name by name:

Model Published size
qwen3:4b 2.5 GB
qwen3:14b 9.3 GB
qwen3:30b 19 GB

Shots: 062-install-and-talk, 104-storage-matters, 105-the-model-shelf, 130-pull-run-serve-connect, 140-let-the-tool-download, 160-download-and-keep-modest, 178-pick-a-tool-run-it, 191-models-with-jobs, 195-no-job-no-space, 077-stronger-and-real-work, 088-fits-until-you-ask, 043-offload-to-cpu, 034-four-five-eight-bit.

The 7B / 14B / 30B / 70B memory line is a derivation, and says so. ch1-memory.tsx computes each figure as parameters × 0.606 + 0.81 GB. The two constants are fitted to the two published points above (14B at 9.3 GB and 30B at 19 GB), so the 7B (5.1 GB) and 70B (43.2 GB) figures sit on the same line as real, checkable sizes rather than on chosen numbers. It is an approximation of 4 bit quantised weights, not a spec for any one model.

Shots: 024-mental-model, 028-seven-and-fourteen-b, 029-thirty-b, 030-seventy-b, 179-not-the-largest-model.


Not checked

Everything below appears on screen as a worked example of a mechanism, not as a measured or sourced figure. The script asserts the shape of each of these and the picture illustrates it; none of them could be chased to a primary source, because each depends on a specific machine, model, quantisation and workload.