Wink Pings

让Qwen3.8-27B画一只骑车的鹈鹕,它可能永远停不下来

同一个27B模型,短聊天正常,长思考却在GGUF上反复不收敛。测试者用一只骑自行车的鹈鹕,把问题指向量化结构,而不是运行时。

让模型画一只骑自行车的鹈鹕,是社区里一个有点荒诞的长思考测试。提示词要求生成完整HTML页面,用SVG动画让鹈鹕蹬车。任务够怪,也够长,能逼模型在thinking模式里连续推理几万token。Qwen3.8-27B的GGUF量化版本在这里暴露了问题:短聊天正常,长思考可能永远不结束。

关于Qwen3.8-27B长任务表现的截图

发帖人Jerryccccc在Hugging Face的unsloth/Qwen3.8-27B-GGUF讨论区记录了复现过程。测试机是2张RTX 5060 Ti 16GB,模型用UD-Q4_K_XL和UD-Q6_K_XL。thinking开启,reasoning_effort设为xhigh,温度1.0。判定标准很简单:模型应该在约15K到20K个thinking token内结束,输出一个能跑的HTML文件。

llama.cpp上的结果不乐观。UD-Q4_K_XL给32K预算,模型把预算全烧在thinking里,实际输出0个字符。UD-Q6_K_XL给76K预算,模型没有停,最后约2K字符里97%是重复的8-gram。强制使用GGUF内嵌聊天模板,也就是--jinja,仍然不终止。

为了排除运行时bug,测试者把同一个GGUF文件放到vLLM加官方vllm-gguf-plugin上。两条运行时的代码路径几乎不共享。结果依旧不收敛:一次运行在1325秒后HTTP 500,约30K token时引擎中途崩溃;另一次跑到28分钟约38K token,仍没有完成,最后被外层超时杀掉。

对照组是同一个27B模型的混合精度量化。NVFP4检查点把MLP和lm_head压到FP4,attention和Gated DeltaNet层保持FP8 W8A8,在SGLang上约17K thinking token就收敛,输出完整可用的SVG。同一台机器,同一个提示词,同一个thinking模式。

鹈鹕测试的对比图

发帖人的假设标得很清楚:这是推断,不是证明。Qwen3.8-27B是混合架构,带Gated DeltaNet线性注意力。这类模型有一个固定大小的循环状态,每生成一个token就更新一次。统一块量化会给每次状态转移乘上一点舍入误差。几百个token看不出来,几万个token的链式思考里,误差可能累积成退化吸引子:重复循环、拒绝收尾,甚至引擎不稳定。

这个假设解释了一个反常识现象。讨论里有网友引用量化对比表,说NVFP4的KLD比UD-Q4_K_XL差,甚至UD-Q3_K_XL的KLD还略好。KLD和困惑度是短上下文指标,teacher forcing几百个token。它们看不见循环状态在长链上的漂移。于是出现倒挂:KLD更差的混合精度量化能干净思考,KLD更好的统一GGUF在50K token内不吐结束符。发帖人的回应是,聚合散度不说明精度放在循环状态转移的哪个位置。

后续讨论补了质量证据。plain UD-Q6_K能收敛,但thinking预算比混合精度对照多1.3到1.6倍。UD-Q6_K_XL在llama.cpp和vLLM上0/5,45K到90K都不收敛,还有一次引擎崩溃。更细的检查发现,统一量化输出的SVG里,鹈鹕喙里的鱼被涂成接近喙的橙色,鱼在视觉上融进喙里;有AMD Vulkan用户的输出里,鱼贴在闭着的喙外面,从没被喉囊遮住。还有解剖问题:多个统一量化输出给鹈鹕画了人类膝盖,膝盖弯曲角度到102度,鸟的跗关节不可能这样。

Q6_K与NVFP4输出的鹈鹕对比

讨论里也有反例。网友jjanovsky用2张5060 Ti和Q6_K_L跑出了能收敛的结果,并贴了图。发帖人把源码拉下来审计,承认工程细节不错,但指出喙的喉囊被压成0.4px的线,腿的颜色和喙不在一个色系,膝盖仍是人类骑行姿势。反例没有推翻问题,反而补充了损坏类型:文件能跑,硬约束还在,需要理解主体是什么的部分在退化。

Q6_K_L输出图

影响面不小。讨论里有人统计,Qwen3.8-27B的1157个GGUF仓库过去30天有4160万次下载。如果长思考在统一整数量化下普遍出问题,很多人可能碰上了却没注意,因为短评测、困惑度、KLD都还是绿的。有人提到cdiamond的iMatrix-NVFP4-MTP-GGUF是混合精度GGUF,可以在llama.cpp上直接检验这个论点,但需要打它recipe目录里的补丁。MLX 4bit是否同样受影响,也有人在排队测试。

实用结论不复杂。消费级GPU上跑Qwen3.8-27B这类混合模型,如果在意thinking模式,优先选官方FP8或NVFP4混合量化,而不是统一GGUF。被GGUF生态或显存绑住,就关掉thinking,或者给thinking预算设硬上限,日常聊天确实没问题。筛量化时别只看困惑度和短上下文评测,用一个长程canary,比如鹈鹕测试,或者从1数到500再写整个文件,开着thinking看它能不能在预算内收尾。发帖人还留了一个待验证的机制测试:用--override-tensor把in_proj、conv、gates这些GDN相关层保持在f16或q8,MLP继续6bit。如果鹈鹕突然正常蹬车,机制就坐实了。

回复里有人提到,自己遇到过同样的思考循环,最后是harness把它拉出来的。这个细节值得记住。模型不收敛时,外层超时和预算限制在生产环境里就是安全带。

来源:
X帖子
Hugging Face讨论
Reddit讨论

发布时间: 2026-10-29 01:30