NAS Drive Compatibility › AI on NAS › Ollama hardware requirements

Ollama hardware requirements on a NAS — the physics version

This is not a setup tutorial (QNAP already wrote the official one for Container Station). This is the hardware math: what RAM actually gets consumed, why the NPU marketing doesn't apply to LLMs, and which failure mode kills stock configurations.

The RAM math nobody escapes

Ollama's default downloads are 4-bit quantized. A model's stated size is the weight file; at runtime add KV-cache (grows with context length) and runtime overhead. Practical planning numbers:

Model classQ4 weightRuntime + KV-cache (8k ctx)Plan for
3B~2 GB~1-2 GB4-6 GB free
7-8B~4.5-5 GB~2-4 GB8-10 GB free
13-14B~8-9 GB~3-5 GB14-16 GB free
32B~19-20 GB~5-8 GB26-30 GB free
70B~40 GB~8-12 GB48 GB+ — not NAS territory

Sizes cross-checked against Ollama's public model library cards; your context length moves the KV-cache column. On a NAS, "free" means after the OS, file services, Docker and any photo-indexing jobs take theirs.

The NPU misconception

NAS marketing now puts NPUs on the spec sheet (QNAP TS-AI642: 6 TOPS). Those NPUs accelerate vision inference — face detection on camera streams, photo classification. Mainstream LLM runtimes don't target NAS-class NPUs: token generation is memory-bandwidth-bound, which is why the acceleration that actually helps is an iGPU with shared memory (Intel Iris Xe on UGREEN's i5 models) or a real GPU. Buy the TS-AI line for camera AI, not for chat models — QNAP AI explained.

Why stock 8 GB boxes die quietly

The failure signature: model loads, first response streams, then everything crawls and the container restarts. That's swap-death — the working set exceeded RAM and pages spilled to disk. LLM inference is the least swap-friendly workload there is: every token touches the whole model. Fixes, in order of effectiveness: smaller model → shorter context window → more RAM. Retrying does nothing.

This is why our model-fit table is conservative: a "tight" verdict on a stock 8 GB NAS means exactly this failure mode is one background reindex away.

What actually helps, ranked

  1. RAM capacity — the binding constraint on every closed NAS SKU. 16 GB turns 7-8B from tight to comfortable.
  2. iGPU with shared memory — Iris Xe-class iGPUs offload inference and share system RAM; the strongest iGPU commonly in a NAS today is in UGREEN's i5-1235U models (UGREEN AI).
  3. Memory bandwidth — DDR5 platforms feed tokens faster than DDR4 at the same model size.
  4. No vendor RAM lock — the DIY route (fnOS/FygoOS) is the only way past 14B without datacenter money.

FAQ

How much RAM does Ollama need?

Rule of thumb: Q4 model weight × 1.5-2 for comfortable headroom. A 4.7 GB 7B model wants 8-10 GB total; a 9 GB 14B wants 16 GB. On a NAS, subtract what the OS and file services use — a "16 GB NAS" does not have 16 GB free for models.

Does Ollama use the GPU on a NAS?

Only if one is visible to the container. Intel iGPUs (UHD/Iris Xe) work via iGPU passthrough on x86 NAS platforms and meaningfully help 7-8B inference. Discrete GPUs need a DIY build with a free slot. NPUs like the 6 TOPS unit in QNAP’s TS-AI line are not used by mainstream LLM runtimes.

Why does my model crash on an 8 GB NAS?

Almost always memory pressure into swap. When the model + KV-cache exceed free RAM, pages spill to disk; inference drops from tokens-per-second to tokens-per-minute and the container gets OOM-killed. The fix is a smaller model, shorter context, or more RAM — not retries.

Is NAS CPU inference usable?

For 3B models on modern NAS CPUs: yes, usable interactive speeds. For 7-8B: 3-8 tokens/s on CPU — fine for summaries and batch jobs, sluggish for chat. 14B+ on NAS CPUs is patience territory. This is physics (memory bandwidth), not something a settings tweak fixes.

Hardware requirements are stable physics; package names and version numbers change. For the deployment steps themselves, follow your vendor's official documentation — QNAP publishes an Ollama/Container Station tutorial; on other platforms the standard Ollama Docker docs apply.