Skip to main content
NVMe vs SATA SSD for Local LLM Model Libraries in 2026

NVMe vs SATA SSD for Local LLM Model Libraries in 2026

NVMe loads model files 5× faster than SATA — but doesn't touch tokens per second. Here's the storage stack a serious rig actually needs.

NVMe cold-loads a 20 GB local-LLM model in ~7 seconds; SATA takes ~40. Once weights are resident, storage is out of the loop. Here's the tiered stack that works.

Yes, an NVMe SSD loads local LLM model files roughly 4-5× faster than SATA on the cold read that actually happens once per session — the SAMSUNG 970 EVO Plus reads at ~3,500 MB/s, versus ~550 MB/s for a SATA III drive. It does not affect tokens per second during generation, because once weights are resident in VRAM or RAM, storage is out of the loop.

Storage is the forgotten half of a local-inference rig

A month of open-weight releases can push a serious model library past 300 GB. Pull the current-generation 70B GGUFs at a couple of quant levels, add three or four 32B specialists, keep a Whisper checkpoint, throw in a few embedding models, and the "big" boot drive you sized for a normal Linux install is full inside a week. Almost no local-inference guide talks about this because storage feels boring next to VRAM tables and quant math.

It matters for two very different reasons. The obvious one is capacity — a 500 GB library will not fit on a 500 GB drive. The less obvious one is cold-load time. Every session that starts with ollama run or llama-server --model ... pulls tens of gigabytes off the disk before the first token appears. On a fast NVMe that is ten seconds. On a SATA SSD it is forty. On a spinning disk it is unusable.

This piece is aimed at the person who has a working local-inference rig, has hit that first "no space left" error, and is trying to decide whether the fix is one big NVMe drive, tiered NVMe + SATA, or "just buy the cheapest terabyte I can find." We reference the SSDs in our catalog by tier: the Samsung 970 EVO Plus NVMe as the hot tier, the Samsung 870 EVO SATA as the warm tier, and the Crucial BX500 1TB and SanDisk SSD PLUS 480GB as bulk archive.

Key takeaways

  • Cold load time scales almost linearly with sequential read speed. NVMe Gen3 is 6-7× SATA III sequential; expect 5× real-world cold-load speedup.
  • Steady-state tokens per second are not affected by storage speed. Once weights are in VRAM or RAM, the disk is out of the loop.
  • SATA is fine for archive tiers. If you load a model once per session and keep it resident, the 30-40 second cold load is a rounding error on the day.
  • mmap changes the math but does not eliminate the read. First-time page-in still hits the disk; the second load is fast because of the OS page cache.
  • Capacity beats speed below a threshold. If your model library exceeds your drive, no NVMe generation-jump matters. Buy terabytes first, gigabytes-per-second second.

Step 0 — diagnose your actual bottleneck first

Before spending on storage, figure out which of three problems you have:

  1. Waiting on model load. You see llama-server sit on "loading tensors" for tens of seconds. Storage matters here — NVMe is the fix.
  2. Waiting on swap. You loaded a model that does not fit in RAM+VRAM together, so the OS is swapping. Storage speed helps a little; more RAM is the actual answer.
  3. Waiting on VRAM offload. You partially offloaded layers to CPU because the model does not fit in VRAM, and generation is CPU-bound. Storage does not matter at all — you need more VRAM, a smaller quant, or fewer layers.

The mistake I see most often is people spending on a faster SSD when the actual bottleneck is (2) or (3). If your tokens-per-second number is slow but the load happens fast, storage is not your problem and a new drive will not change it.

How does a GGUF actually get into VRAM?

Understanding what happens on llama-server --model foo.gguf matters, because the mental model that "faster SSD = faster inference" is almost entirely wrong.

Modern llama.cpp uses mmap by default. On startup, it maps the model file into the process's virtual address space, but does not read the bytes yet — the mapping is lazy. The first time each page of the file is touched, the OS pages it in from disk. When you pass -ngl N to offload layers to GPU, those tensors are read (via mmap, so via the page cache) and copied into VRAM. The remaining layers stay on disk-backed pages and are read on demand during CPU inference.

For a fully GPU-offloaded model (the common case on a 12 GB card running a Q4_K_M 7B or a Q3 32B), the pattern is: mmap the file, then read every byte exactly once as tensors are copied to VRAM. That is a sequential-read workload the size of the file, which is exactly what SSD sequential-read numbers describe. A 20 GB model on a Gen3 NVMe drive reading at 3,000 MB/s takes ~7 seconds; on a SATA drive reading at 500 MB/s it takes ~40 seconds. That factor of 5-6 is the whole storage story.

The second load in the same session is nearly instant, because the OS page cache still holds the tensors. Restart, reboot, or run a different model that evicts the cache, and you pay the cold-read cost again. On systems with abundant RAM (128 GB+), you can effectively pin your favorite model in cache after the first load; on 32 GB systems, cache eviction happens as soon as you touch the next model.

The reference behavior is documented in ggml-org/llama.cpp's README, and every wrapper (Ollama, LM Studio, KoboldCPP, text-generation-webui) inherits this pattern because they all use llama.cpp underneath.

Spec-delta table: NVMe Gen3 vs SATA III

The numbers to anchor on, drawn from Samsung's 970 EVO Plus product page and standard SATA III specifications:

MetricNVMe Gen3 (970 EVO Plus)SATA III (870 EVO)Ratio
Sequential read3,500 MB/s560 MB/s6.3×
Sequential write3,300 MB/s530 MB/s6.2×
Random 4K read (QD1)~60 MB/s~40 MB/s1.5×
Interface ceiling~3,940 MB/s (PCIe 3.0 x4)~600 MB/s6.6×
Typical $/TB (1TB, 2026)$70-100$60-90~1.15×
Cold-load time, 20 GB model~7 s~40 s5.7×

Three observations. First, the interface, not the NAND, is why SATA is slow — a modern SATA drive is bottlenecked by the 6 Gb/s link, not the flash underneath. Second, random-read performance is much closer between the two than sequential — LLM model loading is entirely sequential, so the sequential number is the only one that matters here. Third, the price gap between SATA and NVMe at 1 TB is now under 20 percent; there is little value case for SATA at the hot tier when NVMe is that close on cost.

Cold-load benchmarks by model size

Times below are cold reads (page cache flushed) with the model fully offloaded to GPU. Synthesized from user-reported measurements on r/LocalLLaMA and the llama.cpp discussion threads, sanity-checked against sequential-read specs.

Model + quantSize on diskNVMe Gen3 cold loadSATA III cold load
7B Q4_K_M4.3 GB~2 s~9 s
13B Q4_K_M7.6 GB~3 s~15 s
32B Q4_K_M19.5 GB~7 s~38 s
70B Q4_K_M40.5 GB~14 s~78 s
70B Q5_K_M48.8 GB~17 s~94 s

The 70B Q5 cold load on SATA — a minute and a half of waiting before the first token — is the point where storage speed genuinely matters to workflow. On NVMe it is 17 seconds and forgettable. Everything below 32B is a matter of "10 seconds versus 30 seconds," which is only relevant if you swap models frequently.

Which drive for which tier?

The pragmatic setup for a serious local-inference rig is tiered storage, not one drive.

Hot tier — NVMe. The model you actually use every day and cannot tolerate a slow load on. Put it on a Gen3 or better NVMe drive with capacity for two or three variants (e.g., a 7B for autocomplete, a 32B Q4 for main work, a 13B for embeddings). The SAMSUNG 970 EVO Plus is a well-supported baseline — Samsung's DRAM-buffered controller behaves predictably under sustained sequential reads, and endurance ratings are conservative but honest. Counter-case: if you already have a Gen4 or Gen5 slot free, buy Gen4 — the marginal cost is trivial and the ceiling is nearly double.

Warm tier — high-quality SATA. Models you load a few times a week but do not need instant. The Samsung 870 EVO is the reference SATA drive of the last several years and remains the correct call at this tier — DRAM cache, MJX controller, predictable behavior. A 40-second cold read on a model you load twice a week is not a problem worth spending on. Counter-case: if you swap models on this drive constantly (e.g., an autocomplete daemon that rotates through 5 different 7B fine-tunes), the loads add up and you belong on NVMe.

Bulk archive — value SATA or externally attached. The library of everything you have downloaded, quants you keep for testing, dataset artifacts, backup weights. The Crucial BX500 1TB is the honest value pick here — it is a DRAM-less QLC drive with modest sustained-write performance, but sequential reads at the top of its cache tier still land at SATA-III limits, which is all this workload needs. The SanDisk SSD PLUS 480GB fills the same role at a smaller size for legacy/testing setups. Counter-case: if you actively fine-tune and are writing tens of gigabytes daily, DRAM-less QLC will slow down badly once its SLC cache fills — buy the 870 EVO instead.

Quantization matrix — how much fits per terabyte?

The size question buyers ask most often. Rows below assume the standard llama.cpp k-quant sizing:

Modelfp16Q8_0Q6_KQ5_K_MQ4_K_MQ3_K_MQ2_K
7B~13 GB~7.2 GB~5.5 GB~4.8 GB~4.1 GB~3.3 GB~2.7 GB
13B~26 GB~13.8 GB~10.7 GB~9.2 GB~7.6 GB~6.3 GB~5.1 GB
32B~65 GB~35 GB~26 GB~23 GB~19.5 GB~16 GB~13 GB
70B~140 GB~75 GB~58 GB~49 GB~40.5 GB~34 GB~28 GB

Practical implications for a 1 TB drive: you can fit ~24 different 32B Q4 models, or ~50 different 13B Q4 models, or 2 fp16 70B checkpoints. A working library of 15-20 models at mixed sizes lands in the 200-400 GB range. Two terabytes is comfortable; one is the practical floor.

Prefill vs generation — which phase touches storage at all?

Model load is one thing. Inference is another. For the generation loop specifically:

  • Prefill (processing the prompt). Weights are already resident; this is compute-bound on the GPU. Storage is not touched.
  • Decode / token generation. Same story — weights resident, KV cache lives in VRAM or RAM. Storage is not touched.
  • Loading a new session's context (RAG). If the pipeline reads embedding indices or document chunks from disk on each query, that is a small random read, and it does not measurably benefit from faster storage past SATA levels.

The exception, and the reason to be nervous about "just use disk" advice: a partially offloaded model where some layers live on CPU-side pages that were paged out. In that case every forward pass may touch disk-backed memory. If you see per-token latency in the seconds on a small model, this is the reason and the fix is loading it fully into RAM, not a faster SSD.

Context length lives in VRAM, not on disk

A common misconception is that longer context lengths need faster storage. They do not. The KV cache for a running conversation lives in VRAM (or system RAM when explicitly offloaded), and its size scales with sequence length × hidden size × 2 (K and V) × precision. A 32K-context 7B model produces a KV cache in the low gigabytes; it is a VRAM sizing problem, not a storage problem.

The other way this misconception shows up: people assume that "reading a 128K-token document into context" is a disk-bound step. It is not — reading the raw text is trivial, and the actual work is the prefill compute to build the KV cache, which is GPU-bound.

Does the GPU change the answer?

Yes, in exactly one way. On a card with limited VRAM — the ZOTAC RTX 3060 Twin Edge 12GB is the reference here — you will hit the ceiling on how much model you can fit in VRAM at Q4/Q5 quants and end up swapping models more often. More frequent swaps means the cold-read cost matters more, which nudges the argument for NVMe at the hot tier.

On a 24 GB card (RTX 3090 / 4090), a serious 32B Q4 fits comfortably and you rarely swap in a session. On a 48 GB or 80 GB card, you swap essentially never. Storage speed matters least on the biggest cards.

The broader question of which GPU fits which workload is covered in Best Budget GPU for Local LLMs in 2026.

Write endurance and the model-churn problem

Consumer TLC drives are rated in the hundreds of terabytes written. Samsung's 970 EVO Plus 1TB is 600 TBW; the 870 EVO 1TB is also 600 TBW. Even an aggressive habit of downloading 40 GB of new weights every week — roughly 2 TB/year — leaves substantial headroom on either drive: 300 years for a 1 TB drive at that pace, well beyond MTBF.

QLC drives (BX500, SanDisk SSD PLUS) have lower endurance ratings — 120-180 TBW for a 1 TB QLC — but that is still 60-90 years at the 2 TB/year download pace. The realistic failure mode is not NAND wear; it is running out of free space and watching SLC-cache-backed write speeds collapse. Keep any consumer SSD below 80 percent full to preserve write performance.

Perf-per-dollar

Cost per second-of-cold-load-saved is the metric that actually matters here, and it does not favor Gen4 or Gen5 NVMe at all for this workload. From SATA (~$70/TB) to Gen3 NVMe (~$85/TB) saves ~30 seconds per 20 GB cold load, at a marginal cost of ~$15/TB. From Gen3 to Gen4 (~$100/TB) saves another 2-3 seconds per load, at $15 more per TB — a diminishing return.

The capacity-vs-speed threshold is clearer: below 500 GB, you will run out of space before speed matters. Above 2 TB, speed matters more than more capacity. The sweet spot for a serious local-inference storage stack in 2026 is a 1-2 TB Gen3/Gen4 NVMe for the hot tier and a 2-4 TB SATA drive for the archive.

Verdict matrix

  • Buy NVMe if: you swap models more than a couple of times per session, you dislike waiting on load, you have a free M.2 slot, or you are building fresh in 2026 where NVMe pricing has erased most of the SATA advantage.
  • Buy SATA if: you have a specific SATA-only workload (older systems, 2.5-inch bays, no free M.2), you use one model per session and keep it resident, or you need bulk capacity cheaply.
  • Buy both in tiers if: you have a library that spans "actively used" and "kept around" — which is most serious users. Hot on NVMe, archive on SATA is the durable pattern the community keeps converging on. Best Budget SSDs for Homelab and Proxmox Boot Drives covers the SATA side more thoroughly.

Common pitfalls

Five specific failure modes worth flagging:

  1. Buying a QLC NVMe as your only drive. The DRAM-less QLC NVMes (e.g., budget WD SN570 variants) look fast on paper but collapse on sustained writes when the SLC cache fills — which is exactly what happens when you download 40 GB of new weights in one sitting. If you buy one NVMe, buy DRAM-buffered TLC.
  2. Sizing based on today's library. Model releases have compounded through 2024-2026. Whatever library you have now will double in a year if you stay engaged. Buy 2× what you think you need.
  3. Putting models on a network drive. SMB/NFS mounts saturate somewhere between 100 and 250 MB/s on typical 1GbE setups, worse than any modern SSD. Model loads over network are painful. 10GbE NAS is fine; 1GbE is not.
  4. Confusing model load with prompt processing. If your first token appears slowly on a huge prompt, that is not storage — it is prefill compute. A new SSD will not fix it.
  5. Assuming higher context needs bigger SSD. Context lives in VRAM. See section above.

Bottom line

For a serious local-inference rig in 2026, the right storage stack is a 1-2 TB DRAM-buffered NVMe drive at the hot tier (Samsung 970 EVO Plus or better) plus a 2-4 TB high-quality SATA drive (Samsung 870 EVO) as an archive. QLC value drives (Crucial BX500, SanDisk SSD PLUS) belong in the archive slot, not the boot slot. If you are choosing one drive only, choose NVMe — the price gap over SATA in 2026 is small enough that the SATA argument now only holds for legacy hardware. And remember: none of this affects tokens per second once your model is loaded. Storage buys you faster cold starts and enough capacity to keep a growing library, nothing more.

Related guides

Citations and sources

This piece is editorial synthesis based on publicly available information. No independent first-party benchmarking is reported.

Products mentioned in this article

Tap any product for full specs, live Amazon & eBay pricing, and alternatives.

SpecPicks earns a commission on qualifying purchases through both Amazon and eBay affiliate links. Prices and stock update independently.

Frequently asked questions

Does a faster SSD increase tokens per second during generation?
No, not once the weights are resident in VRAM or system RAM. Storage speed determines how long you wait for the model to load, not how fast it decodes afterwards. The exception is a partially offloaded model where layers stream from disk on every forward pass, which is a configuration to avoid entirely — if you are hitting disk during generation, the fix is fewer layers, a smaller quant, or more VRAM, not a faster drive.
How much storage do I actually need for a serious model library?
Plan on roughly 4-5 GB per 7B model at Q4, 8-9 GB per 13B, 20 GB per 32B, and 40 GB or more per 70B at the same quantization. A working library of a dozen models across sizes lands between 250 GB and 500 GB, and anyone experimenting with multiple quants of the same weights doubles that. One terabyte is the practical floor for a rig you intend to keep for a year.
Is a SATA SSD fast enough for local inference at all?
Yes, for most single-user workflows. SATA III caps near 550 MB/s sequential, so a 20 GB model takes on the order of 40 seconds to load cold versus roughly 10 seconds on a Gen3 NVMe drive. If you load one model at the start of a session and keep it resident, that difference is irrelevant. It becomes painful only if you hot-swap models repeatedly, which is a workflow, not a hardware, decision.
Will constantly downloading and deleting models wear out the drive?
Consumer TLC drives are rated in the hundreds of terabytes written, and even an aggressive habit of pulling 40 GB of new weights weekly amounts to roughly 2 TB per year. That leaves substantial margin on a 1 TB-class drive's endurance rating. The realistic failure mode for a heavily used model library is running out of free capacity, which degrades SLC-cache behavior and write speed, long before the NAND itself wears out.
Should I put models on the same drive as my operating system?
Only if capacity allows comfortably. A separate drive for weights keeps the boot volume from filling, makes reinstalls painless, and lets you pair a small fast NVMe boot drive with a large inexpensive SATA archive. The tiered approach is what most sustained local-inference setups converge on: hot models on NVMe, everything else on bulk SATA storage, with symlinks or a configured model directory pointing at the archive.

Sources

— SpecPicks Editorial · Last verified 2026-08-08

More guides & deep dives from the SpecPicks archive

Browse all articles & guides →

More reviews from the SpecPicks archive

Browse all reviews →

More buying guides from SpecPicks

Browse all buying guides →