现在把开源模型拉到本地跑,几乎都走同一条路:从注册表下载一个已经量化好的文件直接用。GGUF 是 llama.cpp 的单文件格式,Ollama 就构建在它上面,那些标签是每个人拿到模型的第一站。
但这些文件下载下来,还真的能用吗?
一份 10 月 29 日更新到第三版的普查(论文)给出了不太好看的答案。
一次覆盖 305 个标签的普查
作者把 Ollama 官方模型库 15 条模型线里所有符合条件的代码类 GGUF 标签全拉了下来——305 个,其中 291 个是量化版本——再加上 Hugging Face 上 22 个热门社区文件,一共执行 327 个产物。
筛查分两步:先用 15 道代码题挑出可疑对象,再把这批对象拿到全部 164 道 HumanEval+ 任务上重跑。
结果:7 个官方标签完全跑不动,占 305 个的 2.3%,涉及 35 个模型变体里的 3 个。其中 6 个在 164 道题上一道都过不了,剩下的 llama3.2-1B q3_K_S 也只过了 6 道。这 7 个全是参数不超过 40 亿模型上的低比特量化版本。
作者还标注了一个下限:全量跑下来,在非可疑对象里又找出 8 个只解出 16 道题以内的产物。所以 2.3% 是下界。
关键反转:文件没有坏
怀疑者自然会往文件损坏上想。作者的做法是拿到原始 checkpoint,按文件元数据写的配方自己重量化一遍,逐张量对比。
四个 Qwen 标签在全部 434 个张量上与官方文件一致,phi3.5 那个在 197 个上一致,15 道题上两边输出逐字节相同。文件没被污染,也不是传输损坏。
论文原话:精确可复现并不等于功能正常。
三个更简单的解释被逐一排掉:对话模板——校准后的构建共用同样的模板,照样能跑;运行时——CUDA 和 Metal 上都复现,换机器、换更新的 Ollama 版本也复现;权重绑定——能正常工作的 1.5B 就是绑定的。
差的是校准这一步
补上重要性矩阵(llama.cpp 里的 imatrix)后,权重、工具链、张量布局全部不变,结果是:Qwen2.5-Coder-3B 的 q2_K 从 0 题变成 106–113 题,q3_K_M 从 0 变成 76–89,q3_K_L 从 0 变成 80–86。第三方 bartowski 的构建给出 104、81、77,Qwen 自己的 AWQ 文件是 102 和 125,彼此吻合。
但 q3_K_S 怎么校准都只有 13–30 题,救不回来。
更值得琢磨的是尺寸差:同一套没校准的配方用在 1.5B 上完全正常,338 个张量一致,15 道题能过 13–15 道。配方本身预测不了失败,尺寸才是关键变量。
不执行生成代码也能筛出来
困惑度是个便宜代理:五个被测出的不可用构建,WikiText-2 困惑度是各自 fp16 版本的 27 到 5,700 倍,而 4-bit 标签还在 fp16 的 5% 以内(4.2% 和 5.1%)。阈值设在 10 到 25 倍之间,不执行任何生成的代码就能把这五个全标出来。官方库 q2_K 那个文件的困惑度是 66,391。
代价也清楚:每个产物约 30 秒生成,66 个通过筛查的抽样标签里没有一个是非功能性的。工具已经放出来,叫 quantcheck。
同一堵墙,两个独立来源
这不是新现象。llama.cpp 仓库 2025 年 3 月的讨论 #12378 里,有人报告把 Qwen2.5-3B-Instruct 转成 Q2_K,在两台机器上输出都是胡言乱语——这条讨论至今没有解答。
Singh 等人的独立审计(arXiv:2610.04403,10 月 3 日提交)从另一个方向撞上同一堵墙:13 个家族、27 个量化产物,参数量 0.35B 到 14B,一路压到 Q2_K,用 429 个经频率校验的罕见英文词做探针。Q2 档出现三种命运——彻底塌掉不可用、子 2B 模型语义解离、3B 以上基本完好。破坏程度主要由参数量决定(rho=0.72),词表大小完全预测不了(rho=0.12)。
两边有一处张力值得留着:本文主张用困惑度倍数当廉价门,而 Singh 那份发现 WikiText-2 困惑度标定不了词义损伤——Q2 惩罚几乎一样(44.7% 和 47.6%)的两个产物,一个还保着词义(只掉 3.6%),另一个掉 43.6%。困惑度能筛出「塌了」,筛不出「说得出、但已经不懂在说什么」。
所以呢
论文引用了两项测量:全网扫描到超过 320,000 个公网可达的自托管 LLM 服务,其中 155,423 个是 Ollama 实例;另一项为期一年的测量记录到 152,137 个暴露 Ollama 的独立 IP。这套生态的默认假设一直是「下载即用」。
这次普查说明中间少了一环验收。30 秒生成筛查加一个重要性矩阵,就能把不可用标签挡在发布之前;论文的建议正是:低比特标签发布前先筛查,失败的校准或者不下发。
至于你自己——从 Ollama 拉下来的模型如果输出一片胡话,先别急着怀疑自己的显卡。