Skip to main content
Every local LLM deployment has 2 speeds that matter — and they respond differently to the precision knob. This page explains why dropping from FP16 to INT4 might triple your generation speed but barely move your prompt-processing time, and how to measure the trade-off on your own hardware.

Two speeds that matter

Decode throughput is how fast the model generates tokens after it starts answering, measured in tokens per second (tok/s). It determines how quickly a chat reply or code completion appears on screen. Prefill latency is how long the model takes to process your input before it generates the 1st token, measured in milliseconds per token (ms/token). It determines the pause between hitting Enter and seeing output start to stream. Different workloads care about different speeds:
Time-to-first-token (TTFT) combines prefill latency with any scheduling or queue delay. For a single user on local hardware, TTFT is roughly equal to prefill time. Under concurrent load, queuing adds to TTFT independently.

What precision means for speed

Precision controls how many bits represent each weight in the model. Fewer bits means smaller weights, which changes 2 things: how much memory the model occupies and how much data the GPU reads per token.
The quality column is approximate. Newer models trained with quantization-aware training (QAT) lose less quality at lower precisions. See QAT concepts for details.

How precision affects decode vs prefill differently

This is the key insight: decode and prefill hit different hardware bottlenecks, so the same precision change affects them unequally.

Decode is memory-bandwidth-bound

During decode, the model generates 1 token at a time. For each token, it reads the entire weight matrix from memory and performs a tiny amount of compute per weight. The GPU spends most of its time waiting for data to arrive from memory, not doing math. Smaller weights = less data to read = faster decode. The speedup is roughly proportional to the memory reduction:
  • FP16 → FP8: ~1.8-2.0x decode speedup
  • FP16 → INT4: ~2.5-3.5x decode speedup
  • FP16 → NVFP4: ~2.5-3.0x decode speedup

Prefill is compute-bound

During prefill, the model processes all input tokens in parallel. It reads the weights once but performs a large matrix multiplication across all prompt tokens. The GPU spends most of its time doing math, not waiting for memory. Quantization helps prefill less because the math is the bottleneck, not the weight reads:
  • FP16 → FP8: ~1.3-1.5x prefill speedup
  • FP16 → INT4: ~1.2-1.5x prefill speedup
  • FP16 → NVFP4: ~1.3-1.5x prefill speedup

Practical implication

As precision decreases, decode improves faster than prefill. At INT4, a model that felt sluggish at FP16 generates text rapidly but still pauses noticeably on long prompts. This asymmetry drives the workload-specific recommendations below.

Power draw across precision levels

Lower precision reduces power consumption for 2 reasons: fewer memory reads (memory access dominates energy cost) and simpler arithmetic (INT4 multiply costs less than FP16 multiply).

DGX Spark power envelope

DGX Spark’s GB10 chip has a ~40W TDP shared between Grace CPU and Blackwell GPU. Here are observed power ranges during inference:

Consumer GPU power expectations

Cost of 24/7 serving

For a DGX Spark running continuously at decode load: On a consumer GPU like the RTX 4090 at 10 hours/day:

Benchmark methodology

Run these tests on your own setup to see how precision affects your specific model and hardware.

Measure decode throughput

Generate a fixed number of output tokens from a short prompt and measure tokens per second.

Measure prefill latency

Time how long the model takes to produce its 1st token at varying prompt lengths.
Record time-to-first-token (TTFT) from the output. Repeat at 512, 1024, 4096, and 8192 input tokens.

Measure power draw

What to report

Fill in this table for each precision level you test:

Real-world decision table

Pick the row that matches your primary workload:
INT4 quantization (GPTQ, AWQ, Q4_K_M) reduces quality noticeably on smaller models and instruction-following tasks. On models under 13B parameters, the quality gap between FP16 and INT4 can degrade output. On 70B+ models, the gap narrows because the model has more capacity to absorb quantization noise. Test your specific model before committing.
Yes. FP8 KV cache (set with --kv-cache-dtype fp8 in vLLM) halves the KV cache memory independently of weight quantization. It has minimal impact on decode speed but lets you fit longer contexts or more concurrent users. See DGX Spark memory tuning for sizing tables.
Decode reads the entire KV cache on every token. Longer conversations build larger caches, so decode slows down as context grows. A model at 4K context may generate at 40 tok/s but drop to 25 tok/s at 32K context on the same hardware. See KV cache and context for the mechanics.

Quick benchmark commands

Use these as starting points to compare precisions on a single model.

vLLM benchmark suite

llama.cpp benchmark

llama.cpp prints a comparison table showing prompt processing (pp) and text generation (tg) speeds side by side.

Ollama built-in evaluation

Compare across precisions

Run the same prompt at each precision and record results in a table:
For the most reproducible results, warm up the model with 1 request before measuring, close other GPU workloads, and run at least 3 repetitions. Report the median value.

Next steps

DGX Spark memory tuning

KV cache sizing, batch trade-offs, and tuning parameters for 128GB unified memory.

vLLM on DGX Spark

Installation, NVFP4 configuration, and optimal launch commands.

Benchmark a deployment

End-to-end testing through Tokios — latency, streaming, and client comparison.

Quantization concepts

Deeper explanation of GPTQ, AWQ, GGUF, and quantization trade-offs.