
同一个模型在不同硬件和软件上跑,输出会悄悄跑偏,甚至搞砸工具调用。
论坛上天天有人吹「某模型炸裂强」,下载下来一用却「就这?」。其实往往不是模型差,而是本地跑的那个版本,和官方跑的根本不是一回事。
同一个权重,在不同 GPU、不同软件栈、不同 CUDA 内核上,算出来的下一个词会不一样。作者管这叫「实现差异」。
1. 换个注意力内核,工具箱就翻车
作者拿 Qwen3.6-27B 做测试,只把 vLLM 的注意力后端从 FlashAttention 2 换成 Flash Inference,其他全不变。结果呢?同一个 Cisco 命令,FA2 把 `GigabitEthernet0/0/1.201` 错成 `GigabitEthernet0/1/4`,然后一路错下去,本来该 `show mac address-table`,它却 `show run`。换个内核,工具调用就废了。
2. KV 缓存一缩水,记忆越长越糊涂
把 KV 缓存从 BF16 压到 INT8,还能勉强救回来;压到 INT4,超过 40k 上下文后,工具调用直接裂开。上下文越长,误差越攒越多,模型越「健忘」。
3. 量化省显存,也削智力
对比官方 BF16、FP8、INT8、NVFP4、AWQ 四种量化,结果把 NVIDIA 的 NVFP4 排最后——跑到 88k 上下文时,一半的下一词都变了。NVFP4 和 AWQ 把 Cisco 命令 `show arp` 执行成了 `show run`。倒是 INT8 和 FP8 稳住了。
一句话总结:本地模型和官方模型之间的差距,硬件软件都得背锅;跑分之前,先看清楚跑的是谁的实现。