Hardcore Reviews
Hardcore Reviews

Half the VRAM, Nothing Runs: Five Ways Out

A five-way comparison of routes for running large models when VRAM runs short, arranged by fit rather than a ranking: (1) layer-wise streaming (airllm - no quantization, no pruning, weights move in layer by layer, smallest VRAM footprint and slowest tokens); (2) GGUF quantization (Ollama / llama.cpp / LM Studio, trading model fidelity for VRAM, lossy but by far the most mature ecosystem); (3) CPU offload hybrids (layers split between VRAM and system RAM, speed bounded by PCIe and memory bandwidth); (4) distillation or simply smaller models (least engineering effort, largest quality loss); (5) hosted APIs (no VRAM problem at all, cost moved per token to a provider). Five axes: VRAM footprint, speed, quality loss, deployment complexity, who it suits. Every airllm figure is README-sourced with hardware attached (27B 3.33GB on RTX 3090, Flash-Next 125B 5.95GB on RTX 4090, Kimi K3 2.8T 3.72GB on RTX 6000 Ada, DeepSeek-V3 671B around 12GB - all vendor self-reported, not reproduced here); no cross-route speed benchmarks, only qualitative placement, and no tokens-per-second number is invented where none exists; Kimi K3 is 2.8T total with 104B active across 16 of 896 experts per token, under a modified (not standard) MIT license. Division of labor with our deployment-tool comparison is explicit: that piece compares tools, this one compares memory strategies - the tool is what executes the strategy. The real question is not which method is strongest, but whether you are short on VRAM, short on RAM, or short on speed.

Published October 12, 202610 min read
<!-- small-vram-llm-strategies-comparison-review | review | Half the VRAM, Nothing Runs: Five Ways Out -->

"Running out of VRAM and the model will not load" is the most common complaint in local LLM work in 2026. A 24G card barely fits a quantized 70B after squeezing. A 16G card starts warning at load time. An 8G card has about one option. So when VRAM runs short, is quantization the only move?

No, and the alternatives are real. Sorting through the paths the community has shipped, five distinct routes emerge: layer-wise streaming, GGUF quantization, CPU offload hybrids, distilled and small models, and remote APIs. None is strongest, because none solves the same problem. This review crowns no winner; it matches what you are short of to the route that solves it.

What We Compare, and What We Don't

First, this compares memory strategies, not deployment tools. A review of five deployment tools -- Ollama, LM Studio, vLLM, llama.cpp, and GPT4All -- already exists here: our local deployment tools comparison. That piece answers "which tool should I use," comparing interface shape, onboarding difficulty, concurrency, and measured throughput on one machine. This piece answers "which route to take when the card is too small." The two divide the work rather than repeat it: tools execute routes, and the streaming route may not use the tool stack you know.

Second, no cross-route speed benchmarks. These routes run on different hardware, models, and precision combinations, so tokens-per-second figures are not comparable on one scale. What follows is qualitative only: which route is slow by construction and which is fast. For same-tool numbers, the tools comparison above has tables.

Third, every VRAM figure carries its source. Wherever a gigabyte number appears, the source and hardware precondition are stated. All airllm numbers here follow the README wording -- self-reported figures from the project's own benchmark table, which we did not reproduce and do not treat as a common denominator. The thesis: the real choice is never "which method is strongest" but "what are you short of -- VRAM, RAM, or speed."

The Five-Axis Table

<table> <thead> <tr><th>Axis</th><th>Layer-wise streaming</th><th>GGUF quantization</th><th>CPU offload hybrid</th><th>Distilled / small models</th><th>Remote API</th></tr> </thead> <tbody> <tr><td>VRAM footprint</td><td>Lowest: single-digit GB; README wording says 2.8T Kimi K3 runs under 4GB</td><td>Low to medium: falls with bit width, Q4 is the sweet spot</td><td>Low: only layers that fit stay on the card</td><td>Low: swap in a smaller model</td><td>Zero locally: provider-side compute</td></tr> <tr><td>Speed</td><td>Slowest by construction: layers stream from disk or RAM, slowness is design</td><td>Usable: model resident in VRAM or mapped in RAM</td><td>Hinges on PCIe and memory bandwidth</td><td>Fastest: lowest latency</td><td>Set by network and provider load</td></tr> <tr><td>Quality loss</td><td>None: README is explicit, no quantization, distillation, or pruning</td><td>Lossy: low-bit tiers degrade measurably</td><td>Weights untouched, theoretically lossless</td><td>Largest: swapping models swaps the ceiling</td><td>Choice-dependent: can reach flagship tiers</td></tr> <tr><td>Deployment complexity</td><td>Highest: triple-locked version matrix, terabyte-class disk gate</td><td>Lowest to medium: most mature ecosystem</td><td>Medium: you set the layer split</td><td>Lowest: usually a different model name</td><td>Lowest: sign up, key, pay per use</td></tr> <tr><td>Who it suits</td><td>Occasional oversized models, local 2.8T curiosity</td><td>The everyday majority; the default</td><td>Small card, ample RAM, latency tolerated</td><td>Simplicity above the ceiling</td><td>Non-sensitive data, quality and cost first</td></tr> </tbody> </table>

One methodological note beyond the table: read it across and you see five routes; read it down and you see five prices. Every route pays somewhere -- streaming in speed, quantization in quality, offload in latency, distillation in ceiling, API in data boundary and bill. No column wins outright, which is why no ranking exists.

Repository addresses, link and plain text: github.com/lyogavin/airllm (plain: github.com/lyogavin/airllm), github.com/ggerganov/llama.cpp (plain: github.com/ggerganov/llama.cpp), github.com/ollama/ollama (plain: github.com/ollama/ollama).

Route One: Layer-Wise Streaming, the VRAM Ceiling Bought with Speed

This is airllm's route, and the most counterintuitive of the five. Its README states the position plainly: no quantization, no distillation, no pruning -- instead it fits a 70B onto a single 4GB card through layer-wise streaming.

The mechanism is not hard to grasp. Inference proceeds layer by layer, and once a layer has been computed it no longer needs to stay resident in VRAM. airllm loads each layer in order, computes, then swaps in the next, so VRAM use depends on "one layer plus the resident set" rather than total parameters. That is why it claims Kimi K3 at 2.8T fits under 4GB.

Measured figures per README wording, all self-reported with hardware preconditions, none reproduced here:

  • 70B on a single 4GB card, the headline claim.
  • Qwen3.8-27B (dense VL, Gated DeltaNet plus Gated Attention) at 3.33GB VRAM, end-to-end on an RTX 3090.
  • Qwen3.8-Flash-Next (125B, including roughly 51B of n-gram embeddings) at 5.95GB VRAM, end-to-end on an RTX 4090.
  • Kimi K3 (2.8T parameters, 104 billion activated, 896 experts with 16 active per token) at 3.72GB VRAM, end-to-end on an RTX 6000 Ada, streaming per expert.
  • DeepSeek-V3 (671B) at roughly 12GB.

The Kimi K3 number deserves a pause. Running 2.8T parameters inside 3.72GB of VRAM looks like bending physics; it is not. The cost moved to disk and time: full weights of a 2.8T model are a terabyte-class disk burden, and its license is a modified MIT license, not standard MIT.

Three boundaries must ship with that number. First, the slowness is structural, not broken: every token generated walks the streaming path again, and since the project publishes no tokens-per-second figure, neither do we. Second, the version matrix is triple-locked -- a CUDA 12 torch build (flash-attn ships no CUDA 13 wheels), flash-attn itself, and the transformers branch each model demands: Qwen3.8-27B needs transformers 5.8+, Qwen3.8-Flash-Next needs the in-tree qwen4_exp, Kimi K3 needs 4.56.x plus compressed-tensors. Third, the ecosystem has potholes: GitHub API verified 2026-10-12 shows 36,747 stars and 160 open issues.

Who should take it: anyone who occasionally needs a model their card cannot hold, wants to see what a 2.8T feels like locally, and does not mind waiting. Turn-by-turn token conversation will hurt.

Route Two: GGUF Quantization, the Mature Default

Shrinking weights is the least revolutionary idea available. GGUF is the format the llama.cpp ecosystem pushed forward, spanning Q8 down through Q6, Q5, Q4 and below, and Ollama, LM Studio, and llama.cpp all consume it. Onboarding cost is close to zero, and the pitfalls and tier-selection details are in our Ollama local deployment SOP. The route's value is that it is the only route where everyday usability and ecosystem maturity hold simultaneously. No layer-loading concepts, no bus tuning, no version triple lock. The cost is equally plain: quantization is lossy, and low-bit tiers degrade measurably on long-chain reasoning, precise computation, and code generation. The memory you saved is not free -- compressing weights buys VRAM with output quality. The tools comparison puts it bluntly: a 7B at Q4 with 8G to spare feels comfortable; a 70B forced into 16G by quantizing ever harder feels like a slideshow.

Who should take it: the overwhelming majority of everyday local deployers. If the requirement is "install and it works, quality acceptable," quantization wins.

Route Three: CPU Offload Hybrids, for a Small Card and Plenty of RAM

This route neither compresses weights nor streams at crawl speed. It shares the load: layers that fit in VRAM stay there, layers that do not fall back to system RAM, and the runtime shuttles between the two.

Its behavior depends on two hardware parameters: PCIe link bandwidth and system memory bandwidth. A smaller card means more layers crossing the bus, and the speed penalty follows. System RAM capacity has to be genuinely sufficient, the most commonly missed precondition -- plenty of people discover the shortfall only after plugging things in, then get squeezed between OOM and swapping. Its distinct value is that it preserves original weight precision, theoretically lossless, a genuine difference from quantization. So when a task is precision-sensitive and the tier cannot go lower, offload is an overlooked middle option. The drawback is that you set the split.

Who should take it: people whose GPU spec is fixed, who have RAM to spare, and whose tasks are precision-sensitive.

Route Four: Distilled and Small Models, the Most Honest Surrender

This route stops talking about VRAM entirely and switches to a far smaller model, or a distilled version. It is the least engineering effort of the five: swap the model name and you are done, latency is the lowest, laptops run it happily. The cost is the largest and least negotiable: swapping models swaps the capability ceiling. This is not "the same model using less power" but "a different model answering." On complex reasoning, long-chain tasks, and domain questions, the gap to a flagship model does not close because deployment was convenient. The route is also most often misread into one of two extremes -- small means weak, or big is always better. In practice small models are steadier on narrow tasks such as extraction and classification, at a fraction of the cost. Our local coding model comparison breaks model choice down by task type, and one lightweight rollout is in the Mellum 2.1 SOP.

Who should take it: people who rank engineering simplicity above the ceiling, and whose tasks are narrow and stable.

Route Five: Remote APIs, Removing the VRAM Problem from the Table

This route is the simplest of the five: let the compute happen on someone else's machine. The VRAM problem does not exist here -- not solved, nonexistent. A tiny local GPU changes nothing, because the model was never loaded into your VRAM at all.

The cost transfers to two places. The data boundary: requests leave your machine over the public internet, cancelling the "data stays in-house" motive that is the core reason for local deployment. The cost structure: a one-time hardware investment becomes metered billing -- cheaper if usage is light, runaway if it is heavy, and you do not control pricing. The hosted tier of our Qwen3.8-Flash-Next SOP expands on this.

One more reason is easy to miss: when what you need is flagship capability, no local route is in the running at all. No amount of wrangling an 8G card reaches flagship quality, so the reframing runs from "how do I squeeze it into VRAM" to "who pays for the VRAM."

Who should take it: people whose data is not sensitive, who need no offline operation, and who care about quality and total cost.

Each in Its Rightful Place: A Five-Line Decision Guide

Every route here only gets the model running, and whether to trust it remains your call.

  • VRAM short by a wide margin, and you can wait: layer-wise streaming. Repository github.com/lyogavin/airllm, Apache-2.0, 36,747 stars (GitHub API, verified 2026-10-12); setup and pitfalls are in our airllm 4GB resource piece.
  • Short by a little, and you want everyday conversation: GGUF quantization. The default, most mature ecosystem.
  • Small card, plenty of RAM, precision-sensitive tasks: CPU offload. Keeps original weight precision, pays in latency.
  • Hopelessly short on VRAM and unwilling to tune: distilled or small models. Trade the ceiling for speed.
  • You want flagship capability, or the data is not sensitive: remote API. Cost plus data boundary move to the provider.

FAQ

Q1: Which of the five routes is strongest? There is no strongest, because they do not optimize the same thing. Streaming pushes VRAM to the floor and pays in speed. Quantization solves VRAM and speed together and pays in quality. Offload preserves quality and pays in latency. Small models max out speed and pay in ceiling. API eliminates the VRAM problem and pays in data boundary and billing. The question worth asking is whether you are short VRAM, RAM, or speed.

Q2: Can airllm really run a 70B on a 4GB card? Per the official README wording, yes, via layer-wise streaming with no quantization, no distillation, and no pruning. Two preconditions matter. The official figure is a VRAM footprint number, not a speed number. And every airllm VRAM figure cited here is self-reported, tagged with the hardware it was measured on. We did not reproduce them and make no cross-route comparison; on speed the project publishes no figure, so neither do we.

Q3: How much quality does quantization cost? It depends on the tier and the task. Low-bit tiers show measurable loss on long-chain reasoning, precise computation, and code generation, while narrow work such as extraction or classification barely notices. There is no single answer, only a judgment about how precision-sensitive your task is. One point to restate: the memory quantization saves is paid for with output quality, not found in a drawer. For tiers see our Ollama SOP.

Q4: CPU offload or quantization -- which one? Depends on what you are short of. Quantization compresses VRAM and disk, is usually faster, and is the everyday default. Offload compresses VRAM alone while preserving original weight precision, at the cost of speed that hinges on PCIe and memory bandwidth. When a task is precision-sensitive and the tier cannot drop, offload wins.

Q5: Is a remote API cheating? It is not cheating, it is moving the problem. The VRAM problem genuinely does not exist there, but only because the compute never happens on your machine, and the cost lands on data leaving your host plus metered billing. If staying in-house is one of your core requirements, this route was never a candidate.

Closing

Rather than picking the strongest method, first work out what you are short of. Short by a wide margin and able to wait, take layer-wise streaming. Short by a little and want everyday usability, take quantization. Small card and big RAM, take offload. Unwilling to tune, take a small model. Want flagship quality with non-sensitive data, take the API.

How much VRAM do you have, and which route are you on? Tell us in the comments.

This article is AI-assisted and human-edited. Last updated: 2026-10-12

FAQ

Which of the five routes is strongest?
There is no strongest, because they do not optimize the same thing. Streaming pushes VRAM to the floor and pays in speed. Quantization solves VRAM and speed together and pays in quality. Offload preserves quality and pays in latency. Small models max out speed and pay in ceiling. API eliminates the VRAM problem and pays in data boundary and billing. The question worth asking is whether you are short VRAM, RAM, or speed.
Can airllm really run a 70B on a 4GB card?
Per the official README wording, yes, via layer-wise streaming with no quantization, no distillation, and no pruning. Two preconditions matter. The official figure is a **VRAM footprint** number, not a speed number. And every airllm VRAM figure cited here is self-reported, tagged with the hardware it was measured on. We did not reproduce them and make no cross-route comparison; on speed the project publishes no figure, so neither do we.
How much quality does quantization cost?
It depends on the tier and the task. Low-bit tiers show measurable loss on long-chain reasoning, precise computation, and code generation, while narrow work such as extraction or classification barely notices. There is no single answer, only a judgment about how precision-sensitive your task is. One point to restate: the memory quantization saves is paid for with output quality, not found in a drawer. For tiers see our [Ollama SOP](/en/posts/ollama-local-llm-deploy-sop).
CPU offload or quantization -- which one?
Depends on what you are short of. Quantization compresses VRAM and disk, is usually faster, and is the everyday default. Offload compresses VRAM alone while preserving original weight precision, at the cost of speed that hinges on PCIe and memory bandwidth. When a task is precision-sensitive and the tier cannot drop, offload wins.
Is a remote API cheating?
It is not cheating, it is moving the problem. The VRAM problem genuinely does not exist there, but only because the compute never happens on your machine, and the cost lands on data leaving your host plus metered billing. If staying in-house is one of your core requirements, this route was never a candidate.

Related

Field SOP

Running 27B on 4GB VRAM: Disk, Not VRAM, Stops You First

A five-step SOP for layer-wise inference with airllm (October 12, 2026; figures are vendor self-reported): (1) respect the triple version lock - torch must be a CUDA 12 build (no prebuilt flash-attn wheel for CUDA 13), plus flash-attn, plus a transformers branch that depends on the model (4.56.x for Kimi K3, 5.8+ for Qwen3.8-27B, an in-tree qwen4_exp build for Flash-Next), verified with both nvidia-smi and torch.cuda.is_available(); (2) pick a tier from the README measurements - the most realistic entry point is Qwen3.8-27B at 3.33GB (RTX 3090); (3) the first run pays for the download (Flash-Next checkpoint around 360GB, K3 in the TB class), finish it once and keep the cache directory, and reclaim pre-split originals with delete_original=True; (4) watch VRAM peaks with nvidia-smi and manage expectations - layer-wise streaming moves far more bytes than it computes, the vendor publishes no tokens-per-second figure so none is invented here, and slow is the design, not a bug; (5) wire it into agent or API workflows: fine for one-shot task-shaped work, wrong for token-by-token interactivity; training takes a different path (frozen weights streamed layer by layer, adapters kept on GPU). Five dedicated trap sections: the version matrix, the hundred-GB-to-TB first download that stalls, the hidden disk and host-RAM gates (64GB-class RAM to start), structurally slow output, and K3's hard flash-attn plus CUDA 12 constraints. Repo: github.com/lyogavin/airllm (Apache-2.0).

Oct 12, 202610 min read
Open Source

4GB VRAM Holds 2.8 Trillion Parameters

AirLLM (lyogavin/airllm) takes the opposite approach: instead of quantizing, distilling or pruning weights, it streams them layer by layer into VRAM, trading speed for capacity. Verified via GitHub API on October 12, 2026: 36,747 stars, 3,829 forks, Apache-2.0, created 2023-06-12, pushed 2026-10-12, 160 open issues, primary language Jupyter Notebook - which makes it more of a research tool than a production component. Repo: github.com/lyogavin/airllm. README measurements (vendor self-reported, not reproduced here): Qwen3.8-27B dense VL in 3.33GB (RTX 3090 end-to-end, needs transformers 5.8+); Qwen3.8-Flash-Next 125B in 5.95GB (RTX 4090, n-gram table file-mapped to host, ~64GB-class RAM, ~360GB checkpoint); Kimi K3 2.8T in 3.72GB (RTX 6000 Ada, per-expert streaming by token routing, requires compressed-tensors + flash-attn + a CUDA 12 torch build + transformers 4.56.x); DeepSeek-V3 671B around 12GB; training support since September 2026 runs 125B under 6GB (RTX 3060 Ti). Honest limits: the headline 70B-in-4GB claim carries no hardware; the README publishes no tokens-per-second figure, so none is invented here; layer-wise streaming means interactive token-by-token use stays awkward; disk and host RAM are the real gates; and Kimi K3 weights use a modified MIT license, not the standard one - read the LICENSE before commercial use. Positioning: our existing tool comparison covers deployment tools, this piece covers the memory-strategy dimension.

Oct 12, 202610 min read
Hardcore Reviews

Agent Eats Binaries: Reverse Engineering Tools Reviewed

A four-way comparison of reverse-engineering tools, by fit rather than a winner-take-all ranking: REA (morluto/rea, 84,088 stars MIT, GitHub API verified 2026-10-11) is the agent orchestration layer that hooks Ghidra/IDA/Hopper/JADX into your coding agent to automate the decompile-trace-recreate loop; Ghidra (NSA-built, 83,007 stars Apache-2.0, latest 12.1.4_build released 2026-09-21 per GitHub Releases) is the free hand-analysis authority and the de-facto GUI standard, also one of REA's native backends; Cutter (19,977 stars GPL-3.0, powered by Rizin) is the lightweight open-source GUI for a quick look; IDA Free (Hex-Rays' official free edition, terms per hex-rays.com) is the free entry to commercial-grade decompilation. Five axes: onboarding floor, automation depth, analysis coverage, license and price, and evidence credibility (whether conclusions ship with evidence). Verdicts by scenario: automated investigation picks REA (you must wire the backends and lean on evidence chains to tame hallucination), hand-grinding hard functions picks Ghidra, quick looks pick Cutter, commercial-grade quality picks IDA. All star counts dated to the GitHub API; no cross-tool benchmarks.

Oct 11, 20269 min read