GGUF vs GPTQ vs AWQ vs EXL2: LLM Model Formats Explained (2026)
Source material Open source material ↗

Evidence at a glance

FP16为13.0GBEvidence
4.1GB,质量损失+1.68%Evidence

Separate the Two Layers That Are Often Confused

In its guide to GGUF, GPTQ, AWQ, EXL2, and EXL3, MarkTechPost addresses a practical engineering problem: why can the same model appear as safetensors, GGUF, GPTQ, AWQ, or EXL2, and why should these names not be placed on one format leaderboard? The key distinction is that a container determines how tensors are stored on disk, while a quantization method determines how weights are compressed into fewer bits. Safetensors, GGUF, and PyTorch .bin or .pt files belong to the first layer. GPTQ, AWQ, bitsandbytes NF4, and llama.cpp K-quants and I-quants belong to the second.

That distinction changes how engineers should troubleshoot deployments. A GPTQ model can be stored in a .safetensors file, and so can an AWQ model. The extension therefore does not identify the quantization algorithm or tell you which inference engine will work best. EXL2 and EXL3 are more tightly coupled because they combine a quantization method with a storage layout associated with ExLlama. The real choice is a combination of weight representation, metadata organization, and runtime, not an isolated filename extension.

The Memory Formula Narrows the Options, but It Is Not the Budget

A rough estimate is weight memory equal to parameter count multiplied by bits per weight and divided by eight. In the supplied examples, an 8B model requires about 16 GB at 16-bit precision and about 4.5 GB at roughly 4-bit precision. A 70B model falls from about 140 GB to about 39 GB. This arithmetic is useful for eliminating obviously impossible hardware configurations early in a project, but it covers weights only. KV cache and runtime overhead are additional costs.

So the statement that a 4-bit model fits on a particular card does not mean the service is ready. Context length, request concurrency, and cache policy continue to consume memory. In multi-user serving, weights are a mostly fixed cost, while KV cache grows with traffic and context. A capacity plan based only on file size may work for a single-user demonstration and fail under real concurrency.

GGUF’s Advantage Is Deployment Determinism, Not Just Compression

GGUF is a binary format designed for GGML and its successor ecosystem, most notably llama.cpp. It replaced GGML on August 21, 2023. The motivation was not simply better compression, but a more durable way to keep complete model information with the file. Older formats had difficulty identifying model architectures, and adding a new hyperparameter could break existing files. GGUF introduced typed key-value metadata so new fields could be added without invalidating older readers, while retaining goals such as single-file deployment, memory mapping, and straightforward loading.

More importantly, GGUF can store the tokenizer, special tokens, and a Jinja chat template alongside the weights. For Mac and local-device deployments, the deliverable is therefore not just a tensor file that some program can read. It also carries the information needed to run the conversation correctly, reducing the risk of version mismatches between weights, tokenizers, and templates. The trade-off is a stronger runtime relationship. The supplied material describes GGUF support in vLLM as limited and highly experimental, with additional plugins required, so portability should not be treated as proof of high-concurrency serving performance.

“4-Bit” Is Not a Uniform Quality Tier

Names such as Q4_K_M, Q5_K_M, and IQ4_XS in GGUF files do not describe the same compression scheme with different labels. Q4_K uses blocks and super-blocks with stored scales and minima, averaging about 4.5 bits per weight. Q4_K_M also uses Q6_K for parts of the attention.wv and feed_forward.w2 tensors while using Q4_K elsewhere. It is therefore a mixed-precision scheme, not strictly a 4-bit weight representation. The I-quant family introduces an importance matrix, so IQ4_XS, IQ3_XXS, and IQ2_XXS distribute quantization error differently even when their nominal bit-widths appear comparable.

The supplied reference table for a Llama-2-7B-class model shows the trade-off. FP16 is about 13.0 GB, Q8_0 about 7.0 GB with roughly +0.03% relative change from the baseline, Q6_K about 5.5 GB with +0.13%, Q5_K_M about 4.8 GB with +0.39%, and Q4_K_M about 4.1 GB with +1.68%. These are illustrative values for a specific older model, not universal benchmarks. They nevertheless show that file size, nominal bit-width, and quality loss do not form a simple linear relationship.

The Best Format Changes with the Serving Stack

GPTQ, AWQ, and EXL2/EXL3 represent different trade-off paths. GPTQ uses calibration and approximate second-order information to compress weights. The supplied research figures state that quantizing a 175B model took about four GPU hours and reported end-to-end speedups over FP16 of about 3.25 times on an A100 and 4.5 times on an A6000. AWQ focuses on preserving roughly 1% of salient weights. Its stated calibration time for an 8B model is about 10 minutes, compared with about 20 minutes for GPTQ. These figures reveal the engineering direction of each method, but they should not be treated as fixed performance guarantees across hardware and runtimes.

EXL2 and EXL3 invite a different calculation for single-user consumer NVIDIA devices. The supplied material says EXL3 can keep a 70B model coherent at 1.6 bpw and fit it into 16 GB of VRAM with a 4096 cache, while requiring CUDA 12.4 or newer and still lacking ROCm support. GGUF with llama.cpp instead emphasizes single-file delivery and local-device convenience. GPTQ and AWQ should be evaluated within a general GPU serving stack. For multi-user, high-concurrency serving, compatibility and optimization in frameworks such as vLLM may matter more than saving a few hundred additional megabytes in the model file.

Work Backward from the Deployment Path

If a model must be delivered to Mac users, local workstations, or an environment where the tokenizer and chat template should travel with the weights, GGUF and llama.cpp provide a clear path to evaluate. For low-memory, single-user inference on a consumer NVIDIA GPU, EXL2 or EXL3 can be considered, but only after checking the CUDA version, client maturity, and whether excluding AMD devices is acceptable. For GPU serving, GPTQ and AWQ should not be compared only by their advertised bit-width. The target runtime, calibration compatibility, and remaining memory for KV cache under concurrency all matter.

A practical decision sequence is to identify the device and runtime first, estimate the combined budget for weights, KV cache, and runtime overhead, and then compare quality and throughput under the same model, task, and context conditions. Do not assume that safetensors means unquantized, and do not treat Q4_K_M, AWQ 4-bit, and EXL3 4-bit as equivalent products. The boundary is straightforward: an extremely small file has no deployment value if the runtime cannot use it, and a capacity claim is incomplete if it proves only that the weights fit while ignoring cache and concurrency.