Broken on Arrival: Non-Functional Quantized LLM Artifacts in Public Model Registries and How to Catch Them
Organizations: Independent Researcher
Abstract
Developers download quantized large language models (LLMs) from public registries to run them locally. None of the registries we examined documented functional testing of their files. We tested all 305 eligible code-capable GGUF tags (the llama.cpp format) across 15 model lines in the official Ollama library, plus 22 popular Hugging Face community files. A 15-task code screen identified suspects, which we retested on all 164 HumanEval+ tasks. Seven official tags (2.3%) solved at most six of them. All were low-bit quantizations of models with at most four billion parameters. We rebuilt five suspect files from the original weights. All five registry files matched our uncalibrated rebuilds tensor for tensor, so none was corrupted. Exact reproducibility did not imply function. With the weights, toolchain and tensor mix held fixed, adding an importance matrix raised Qwen2.5-Coder-3B scores at three quantization levels from zero to 76-113 of 164 tasks. The same uncalibrated recipe left the smaller Qwen2.5-Coder-1.5B functional, showing that the recipe alone does not predict failure. None of 66 sampled tags that passed the screen was non-functional. We release the audit data and the quantcheck tool and recommend screening low-bit tags before publication, then calibrating or withholding failures.
Figures & tables
| Work | Object executed | Census | Recipe | Cause |
|---|---|---|---|---|
| Gao et al. [ 29 ] | API endpoints | – | – | – |
| Cai et al. [ 30 ] | simulated substitution | – | – | – |
| Kimi Vendor Verifier [ 31 ] | vendor deployments | – | – | – |
| Kadasi et al. [ 32 ] | hub task models | – | – | – |
| Husom et al. [ 34 ] | Ollama tags (edge) | – | – | – |
| Kurt [ 35 ] | own conversions | – | ✓ | – |
| Generation | Ollama 0.32.6 [ 56 ] (bundled llama.cpp 96278e3 ), pinned for all generation runs |
|---|---|
| Rebuilds | llama.cpp v0.7.0 ( 620d222 ) [ 3 ] on CPU: conversion, quantization, imatrix and perplexity |
| Checkpoints | Qwen2.5-Coder-3B/1.5B/0.5B-Instruct [ 49 ] and Phi-3.5-mini-instruct [ 57 ] at pinned revisions |
| Backends | NVIDIA RTX 4090 with CUDA (census, reruns); Apple M2 with Metal (replication) |
| Decoding | greedy, seed 42, context 2,048, at most 768 new tokens |
| Scoring | EvalPlus 0.3.1, HumanEval+ plus-tests, one evaluation at a time |
| Calibration | imatrix from 100 chunks of 512 tokens of WikiText-2 train [ 58 ] , or of 1.5 MB of Python source from the llama.cpp repository |
| Class | Count |
|---|---|
| Healthy (at least 60% of group baseline) | 271 |
| Degraded (below 60%, baseline at least 8) | 2 |
| Low baseline (baseline below 8 of 15) | 6 |
| Suspect (at most 2 of 15, baseline at least 8) | 7 |
| No in-frame baseline | 19 |
| Library tag | Library | Library /164 | Plain | Own imatrix | Third party | Qwen AWQ | Best cal. /164 | Verdict |
|---|---|---|---|---|---|---|---|---|
| qwen2.5-coder:3b q2_K | 0 | 0 | 0 | 15, 15 | 15 | 14 | 113 | collapse, rescued by calibration |
| qwen2.5-coder:3b q3_K_S | 0 | 0 | 0 | 2, 4 | 4 | – | 30 | collapse, rescue rule not met |
| qwen2.5-coder:3b q3_K_M | 0 | 0 | 0 | 9, 8 | 10 | 15 | 125 | collapse, rescued by calibration |
| qwen2.5-coder:3b q3_K_L | 0 | 0 | 0 | 7, 8 | 9 | – | 86 | collapse, rescued by calibration |
| phi3.5:3.8b q2_K | 0 | 0 | 0 (4) | 9, 8 | 7 | – | 37 | collapse, rescued by calibration |
| llama3.2:1b q2_K | 0 | 0 | – | – | (1) | – | – | not attributed (no rebuild) |
| Tag | Output |
|---|---|
| Qwen-3B q2_K | program9 demon1 bil mess(bil is sports Audi program program program… (to the token cap) |
| Qwen-3B q3_K_S | python def strlen(s >>> strlen('') ``` |
| Qwen-3B q3_K_M | . To calculate the length of a given string in Python, . You can use the . Here's a simple function… def strlen(string: str) """Calculate and return the length… |
| phi3.5 q2_K | import str("This is a Python script that solves the following problem in various ways."))) |
| Level | 1.5B | 3B |
|---|---|---|
| q2_K | 13 / 13 / 12 | 0 / 0 / 15 |
| q3_K_S | 15 / 15 / 14 | 0 / 0 / 2 |
| q3_K_M | 15 / 15 / 15 | 0 / 0 / 9 |
| q3_K_L | 15 / 15 / 14 | 0 / 0 / 7 |
| Build | Qwen2.5-Coder-3B | phi3.5-mini |
|---|---|---|
| fp16 | 11.5 | 6.9 |
| Library q4_K_M | 12.1 | 7.2 |
| Library q2_K | 66,391 | 184.1 |
| Library q3_K_S , _M , _L | 920, 333, 373 | – |
| Plain rebuild Q2_K , current mix | = library | 12.3 |
| Own imatrix Q2_K (W / C) | 14.4 / 14.9 | 10.4 / 10.5 |
| Build | Base | Ctx 4k | Ctx 8k | Cap 2k | T0.2 |
|---|---|---|---|---|---|
| Lib. suspects, plain Qwen-3B | 0 | 0 | 0 | 0 | 0, 0, 0 |
| Plain phi3.5 Q2_K (current mix) | 4 | 4 | 0 | 2 | 3, 4, 3 |
| Lib. Qwen-3B q4_K_M | 15 | 15 | 15 | 15 | 15, 15, 15 |
| Lib. phi3.5 q4_K_M | 11 | 11 | 11 | 9 | 11, 11, 11 |
LLM Reliability
Large language model reliability studies whether outputs remain correct, calibrated, robust, and controllable across prompts, contexts, and deployment conditions.
See all 802 papers