拯救吃灰显卡!5060Ti 极限挑战 Qwen3.8-27B 记录
自从买了 5080 成了专属游戏站之后,手头这块 16G 显存的 RTX 5060 Ti 就彻底闲置吃灰了。最近看圈子里都在吹新出的 Qwen3.8-27B 模型推理能力强得离谱,我寻思着闲着也是闲着,干脆把这块 5060 Ti 拿出来部署个本地大模型玩玩。

不过 27B 参数量的模型可不是闹着玩的,就算不用笨重的 PyTorch 框架加载全精度权重(起码要大几十 G 内存),哪怕是用 4-bit 的 GGUF 格式配合量化,对显存的压力依然是地狱级的。我不仅要让它跑起来,还贪心地想保留超长的上下文窗口,这就意味着原本就不富裕的 16G 显存,还得划出一大块给 KV Cache 预留空间。为了腾出显存,我一开始只能卸载部分网络层到 GPU,把核心算力压力强行分摊给 CPU 和 PCIe 带宽,甚至连某些耗费算力的推理模式都被我强制禁用了。
Q4 真的太卡了

起初跑 API 测试,我用的策略还是相对保守的。挂载了 Q4 的量化模型,把大部分负载交给显卡,硬撑着拉满了一个 32K 的大上下文窗口。
说实话,为了让这个模型在 16 G 现存里转起来,我选用了基于 llama.cpp 的底层引擎。在编写启动配置时 ,我得小心翼翼地计算着显存的每一兆字节。强制剥离了模型的一部分网络结构,只敢将 48 层权重通过 ngpulayers 参数注入到 GPU 中,把剩下的运算逻辑甩给了 CPU。这意味着在推理过程中,激活张量不得不在主机内存和 GPU 显存之间,通过 PCIe 总线来回倒腾数据。不仅如此,为了给 32K 的超大上下文让路,思考模式都默认关闭了。
结果跑起来一测,直接给我泼了盆冷水,显存被吃干抹净,剩不到 1GB 的空余,而生成速度居然只有可怜的 5 tokens/s。这吐字速度卡得跟挤牙膏一样,流式输出一顿一顿的,作为日常辅助工具根本没法用,太影响写代码的心情了。
疯狂优化,在显存红线上反复横跳

为了把速度提上来,我开始了反复的调优折腾。想要速度快,我能想到的唯一的办法就是压榨 KV Cache 的空间占用,把更多模型层塞 16G 显存。
我先试着把 KV 压缩到 Q8 的低精度,打算往显存里多挤进几层。中间还被 Python API 的封装参数坑了一把,因为数据类型枚举不匹配,服务死活启动不了。一通修改后,速度勉强提到了 5 tokens/s。
然后是长文本的 Prefill 速度。写代码经常是几千行的长上下文扔进去,预填充慢了照样白搭。我大幅拉高了Batch 的吞吐参数,总算把 5K 长度输入的预填充耗时缩短了将近一半。最后我甚至丧心病狂地把 KV 进一步砍到 Q4 精度,强行把显存塞到仅剩两三百兆的崩溃边缘,短请求也才勉强跑到 8 tokens/s。
为了这可怜巴巴的几 tokens 提升,我最后走火入魔去重新用 CMake 编译了支持最新显卡微架构的底层环境,试图榨干最后一个算力单元。结果折腾半天,测试数据一出来,提速微乎其微。
我终于认清了现实:5060ti 跑这个体量模型的 Q4 量化版,还是太勉强了。只要模型无法完全装入显存,导致 PCIe 总线频繁在这头和那头搬运数据,速度根本起不来。
换装 Q3,终于达到可用程度

必须换思路!我果断放弃 Q4 权重,找了一个社区版的压缩率更高、体积在 14GB 内的 Q3 极端量化版。
这一次,16G 显存终于宽裕了,我直接把模型全层塞进了显存里奇迹出现了:没有任何额外的数据搬运开销,热生成速度直接狂飙到平均 25 tokens/s,5K 长文本进去,7 秒出头就能给出响应。
看到速度终于突破 20 tokens/s,我长舒一口气,终于达到了真正可用的程度,完全可以应对日常的高频调用了。
跨过大坑,一脚踢开 Python

虽然速度起飞了,但最后还碰到一个恶心的工具调用兼容性问题。新的模型模板在生成 XML 格式的外部工具请求时,被外层的 llama-cpp-python 当成了普通文本透传,在解析标准 JSON 映射时直接抛出字典结构报错。
我最开始尝试用 deepseek 强行改外层的 Python 源码打了补丁,但越想越憋屈,索性一不做二不休,直接抛弃 Python 服务端环境,换上了官方原生的 llama-server。
这下彻底清爽了,所有的流式、非流式工具调用,甚至多轮外部工具执行结果的复杂上下文注入,全部稳定执行完美通过。接上opencode,完美体验。 看着这块原本要积灰的 5060 Ti 现在不仅复工,还跑出了近 24 tokens/s 的成绩,这种硬核榨干每一滴硬件算力的感觉,才是折腾的动力。下一步,就等官方原生 MTP 投机解码架构组件跑通了,到时候还能再压榨一波。
