The Mac mini M4 for Local LLM Inference, by the Numbers
9 min read · updated August 11, 2026
The Mac mini is the cheapest machine Apple sells that runs a useful local model, and the configuration decision is almost entirely a memory decision. Two published numbers per chip settle most of it.
What Apple publishes
Read from Apple’s Mac mini technical specifications on 11 August 2026:
M4 10-core CPU, 10-core GPU 120GB/s 16GB, configurable to 24GB
(a 24GB standard config also listed)
M4 Pro 12-core CPU, 16-core GPU 273GB/s 24GB, configurable to 48GB
configurable to 14-core CPU, 20-core GPUTwo figures from Apple’s announcements fill in the chip-level ceilings that the standard-configuration table does not show. The M4 Pro and M4 Max announcement states that M4 supports up to 32GB of unified memory and that M4 Pro supports up to 64GB with 273GB/s of memory bandwidth. So the chip admits more than the standard Mac mini configurations list, and the larger tiers are configurator options tied to the upgraded chip.
What fits
Model sizes below are exact safetensors byte counts read through the Hugging Face model API on 11 August 2026, not estimates. MLX 4-bit is 4.5 bits per weight — 4 bits plus an fp16 scale and bias per group of 64 — which the same three repositories confirm to three significant figures.
mlx-community/Llama-3.1-8B-Instruct-4bit 4.52 GB mlx-community/Qwen3-14B-4bit 8.31 GB mlx-community/Qwen3-30B-A3B-Instruct-2507-4bit 17.18 GB (MoE, ~3.3B active) mlx-community/Llama-3.3-70B-Instruct-4bit 39.69 GB
Against those, and remembering that the usable budget is Metal’s reported working set rather than installed RAM:
- 16 GB. An 8B at 4 bits, with room for context and a browser. A 14B at 4 bits is 8.3 GB and technically fits, but leaves little headroom on a machine that is also your desktop.
- 24 GB. A 14B at 4 bits comfortably, or an 8B at 8 bits (8.5 GB by the same arithmetic, at 8.5 bits per weight) if you would rather have precision than parameters.
- 48 GB. A 30B-class MoE at 17.2 GB with a long context, or a 32B dense at 4 bits, and a 70B only at 3 bits and only just.
- 64 GB, where the configurator offers it. A 70B at 4 bits, 39.7 GB of weights, with the twenty-odd gigabytes of headroom that makes it usable rather than marginal.
Run the working-set check from the 70B RAM page before committing to the tightest of these; the number that matters is the one your machine reports.
The decode ceiling per configuration
Decoding at batch size one is bandwidth-bound: the step reads the whole model once and does two floating-point operations per weight, which is nowhere near enough arithmetic to cover the fetch. So an upper bound on tokens per second is published bandwidth divided by bytes read per token.
8B @ 4-bit 14B @ 4-bit 30B-A3B MoE
4.52 GB 8.31 GB ~1.9 GB read/token
M4 120 GB/s 26.5 14.4 ~63
M4 Pro 273 GB/s 60.4 32.9 ~144
ceiling in tokens/second: batch one, short context, assuming
100% of Apple's published bandwidth, which no real kernel achievesThe MoE column is why 30B-class sparse models are so well suited to this machine: 17.18 GB must be resident, but only the routed experts and the shared attention weights are read per token, so the denominator is roughly the active-parameter share of the file rather than the whole of it. Capacity is charged at 30B and speed at something near 3B.
These are ceilings and not speeds — the derivation and its four assumptions are set out in unified memory bandwidth and tokens per second. For the real figure on your machine, run mlx_lm.generate --model <model> --prompt "..." and read the Generation: line it prints.
The number that is not bandwidth
Everything above concerns decode. Prefill — reading your prompt — is a different operation limited by a different resource, and on this machine it is the one more likely to disappoint, because it is the one a hosted provider is best at.
Prefill puts every prompt token through the model at once. That turns the matrix-vector products of decoding into matrix-matrix products, and it means the weights are read approximately once for the whole prompt rather than once per token. Bandwidth stops being the constraint and arithmetic becomes it. The work is roughly two floating-point operations per parameter per prompt token, so for a 14,768,307,200-parameter model and a 4,096-token prompt:
2 x 14,768,307,200 params x 4,096 tokens = 1.21e14 FLOPs = 121 TFLOPs for comparison, decoding 300 tokens of the same model reads 8.31 GB x 300 = 2.49 TB through memory and does 1/13th the arithmetic
Attention adds a term on top of that which grows with the square of the prompt length rather than linearly, so doubling a long prompt more than doubles its prefill. That quadratic component is small at a thousand tokens and is the dominant one by the time you are pasting in a large file.
Because the constraint is arithmetic, the relevant difference between the two Mac mini chips here is not the 120 against 273 GB/s that governed every table above — it is the GPU core count: 10 on the M4 against 16 on the M4 Pro, configurable to 20. Those two figures rank the configurations differently, and a workload of long prompts and short answers is the case where the bandwidth column actively misleads you.
Apple does not headline a floating-point throughput figure for these GPUs in the way it publishes memory bandwidth, so there is no equivalent table to derive here, and none is invented. The Prompt: line printed by mlx_lm.generate is the measurement, and running it once with a short prompt and once with several thousand tokens of prompt tells you more about this machine than any specification does.
Two consequences for anyone buying a mini expecting cloud-like responsiveness on a long prompt. First, that expectation is set by providers who prefill on datacentre accelerators built for exactly this operation, and it is the single axis on which the unified-memory argument offers no help at all — capacity and bandwidth do not substitute for arithmetic. A retrieval-augmented question with eight thousand tokens of retrieved context is mostly a prefill cost, and the time to first token is where the reader will feel the machine.
Second, that cost is the one you can most often avoid paying twice. Prefill over a fixed prefix is reusable: a prompt cache computes a long system prompt or a fixed document once and starts every later request from it, which is the same trick a hosted provider bills as prompt caching. mlx_lm.generate exposes it as --prompt-cache-file, and the library path is make_prompt_cache — covered in generating tokens from Python. On a RAG-shaped workload where the retrieved context changes but the instructions do not, this is a larger win than any hardware tier available on this product.
Which configuration
The memory tier decides what you can run at all and the bandwidth tier decides how fast it goes, and the first is much harder to work around than the second. A model that does not fit does not run slowly; it does not run. So spend on memory before bandwidth, and note that the two are coupled anyway — on this product line the larger memory tiers only exist on the chip with the higher bandwidth.
One more property of this machine is easy to miss and matters for anything left running. The mini has no battery and no thermal budget shared with a display, so sustained generation does not throttle the way a laptop’s does — a MacBook of the same chip generation will match it for a few minutes and then diverge. If the plan is a small model answering requests all day on a shelf, that is the real argument for this product over a laptop of nominally similar specification, and it does not appear anywhere in the numbers above. The general treatment of the power side is in on-device power.
Nothing here is upgradeable. Unified memory is on the package, so the configuration you order is the configuration you have for the life of the machine, which makes the one-tier-up decision worth more than it usually is. If you are weighing this against a Studio, the Mac Studio memory ceiling page covers the tiers above these; if you are weighing local against hosted at all, local versus API cost is the arithmetic for that.