Local LLMs are a VRAM problem, not a model problem
|

Local LLMs are a VRAM problem, not a model problem

On this page

    Most guides to running local models start by comparing models. That is the wrong end of the problem. On your own hardware the question is not which model is best, it is which models fit, and everything else follows from that.

    The rule that matters: a model that does not fit entirely in memory is not slow, it is unusable. Spill even a few layers to system RAM and throughput falls off a cliff. There is no gentle degradation.

    The arithmetic

    At full precision, budget roughly 2 GB of VRAM per billion parameters. Quantisation cuts that down predictably, because it is just storing each weight in fewer bits.

    Ad space, reserved

    PrecisionBytes per parameterAn 8B model needs
    FP16~2~16 GB
    Q8~1~8 GB
    Q4_K_M~0.5~4.5 GB

    Add roughly 1 to 2 GB on top for the context window and general overhead. So an 8B model at Q4_K_M wants about 6 GB of headroom in practice, which is why 8 GB cards handle it comfortably and 6 GB cards do not quite.

    Q4_K_M is the default in Ollama for a reason. It is the point where the memory saving is large and the quality loss is small enough that most people cannot pick it out in normal use.

    What fits where

    VRAMRealistic ceilingWhat that gets you
    8 GB7B to 8B at Q4Summarising, classification, structured extraction. The workhorse tier.
    12 GB8B comfortably, 13B at Q4Same jobs with a much longer context window.
    16 to 24 GB30B class at Q4Noticeably better instruction following and longer reasoning chains.
    48 GB70B at Q4Approaching hosted-model quality, at workstation cost.

    The step everyone wants to skip is 8 GB to 24 GB, and it is worth being blunt: for the jobs a self-hoster actually automates, the 8B tier is usually enough. Summarising a transcript, extracting fields into JSON, classifying an inbox, drafting a first pass. None of those are reasoning-heavy, and a 70B model does them slightly better at several times the hardware cost.

    Check what is actually happening

    Ollama will silently split a model across GPU and CPU rather than refusing to load it. That is helpful and it is also how people end up concluding local models are hopeless. Check the split before you judge the speed.

    # What is loaded, and where
    ollama ps
    
    # PROCESSOR column tells you the truth:
    #   "100% GPU"          -> good
    #   "48%/52% CPU/GPU"   -> this is why it is slow

    If you see a CPU share, you have three options: a smaller model, a heavier quantisation, or a shorter context window. Context is the one people forget, and it is often the cheapest fix, because the KV cache grows with it.

    # Pin the context to something sane for the job
    ollama run llama3.1:8b
    
    >>> /set parameter num_ctx 4096
    >>> /save llama31-8b-4k

    A 4096 token context is plenty for summarising a lesson transcript. Loading a 128k context you never use costs real memory for nothing.

    Quantisation, honestly

    Going from FP16 to Q8 is close to free in quality terms. Q8 to Q4_K_M is a small, real loss that shows up mostly in long chains of reasoning and in exact recall of details buried in a long input. Below Q4 the losses stop being subtle.

    For structured extraction, which is most automation work, Q4_K_M is fine. The task is bounded, the output is schema-constrained, and errors are caught by validation rather than by the model being clever.

    For anything where the model has to hold a lot of context and reason across it, the quantisation drop is more noticeable than the parameter count. A 13B at Q8 will often beat a 30B at Q3 on the same hardware budget.

    When local is the wrong answer

    I run models locally for client work because footage and transcripts should not leave my network. That is a real constraint and it justifies the hardware.

    It is not automatically the right call otherwise. Local is worse when you need frontier-level quality, when your volume is low enough that hosted API costs are trivial, or when the work is bursty and a GPU would sit idle. Frontier model prices fell substantially through 2026, which moved that line further toward hosted than it was.

    The honest test: if the only reason you are self-hosting is cost, do the arithmetic including the hardware and the electricity. If the reason is that the data cannot leave, or that you want it to keep working without a subscription, the arithmetic stops mattering and local wins on its own terms.

    Where to start

    1. Install Ollama, pull an 8B instruct model at the default quantisation.
    2. Run ollama ps while it is working and confirm 100% GPU.
    3. Set num_ctx to the smallest value your job actually needs.
    4. Give it one real task from your own work, not a benchmark prompt.
    5. Only then decide whether you need more hardware.

    Most people who conclude local models are not good enough tested a model that was half on the CPU, with a context window ten times larger than the task needed. Fix those two things before you buy anything.

    Sources

    Ad space, reserved

    Similar Posts

    Leave a Reply

    Your email address will not be published. Required fields are marked *