把 Qwen3.8-27B 跑在自己机器上:部署方案与社区量化生态踩坑记
手头有一台双路 Xeon 工作站,插着两张 RTX 3090——48G 显存、128G 内存。我从今年年中开始把 Qwen3.8-27B 这个稠密模型往上面搬,初衷很简单:日常要跟大模型打交道,云 API 又贵又不放心,想让它常驻自己机器上。到今天这套系统已经稳定跑了三个多月,中间换过三套部署方案、试过五六种社区量化,踩的坑足够写一篇长的。
这篇专注讲 27B 本身的部署与量化选择;配套的模型路由器和 MoE 大模型是两个独立话题,各有一篇:自制路由器、125B MoE 实测。
先算显存账:27B 意味着什么
27B 稠密模型是个尴尬的体量。BF16 原版权重要 54G,两张 3090 加起来 48G 都装不下;FP8 压到 27G 左右,权重倒是能塞进去,但再想留几百 K 上下文的 KV cache 就捉襟见肘。所以现实的选择只剩量化:
4bit(AWQ/GPTQ 系)大约 16-24G,双卡放一份模型后还有大把空间给 KV;3bit 极限量化能压到 13G,单卡 24G 就能装下,另一张卡完全空闲。全精度不用想,4bit 起步,3bit 是甜点——这是后面所有方案的共同前提。
另一个背景:官方模型卡给的上下文窗口是 262K(原生 262,144,官方还背书了 YaRN 外推到 1M 的方案),长上下文是我很在意的使用场景,后面很多取舍都跟它有关。
第一阶段:vLLM,当服务跑
第一版用的是 vLLM 加 AWQ/INT4 量化权重。vLLM 的强项没什么争议:PagedAttention 把显存管理做成了虚拟内存那套逻辑,多路并发互不拖累,131K 上下文、四个并发请求一起打都没问题。如果目标是"部署给一群人当服务用",到今天我仍然认为 vLLM 是首选。
但一个人用的时候它的缺点就被放大了:容器镜像 30G 起步,冷启动 3 到 5 分钟,对驱动版本要求新。更麻烦的是显存排他——模型一旦加载就占满两张卡,我想同时干点别的(跑个视觉模型、测个新东西)都得先把它卸了。三个月里我逐渐意识到,个人工作站的场景和"服务部署"根本不是一回事:我要的不是吞吐,是快速切换。
顺带一提,vLLM 路线上社区最有用的变体是 Huihui 系列的去审查微调版。有个 TelperionAI 打包的混合量化版值得单独点名:attention 层和 top-8 的 MLP 保 INT8,其余 INT4,24G 单卡就能放,质量损失在感知阈值以下。这个版本后来成了我 vLLM 档位的常驻权重。
第二阶段:llama.cpp 与社区量化的深水区
转向 llama.cpp 的动机就是启动速度:167M 的二进制,秒级起停,权重是独立的 GGUF 文件。但真正让我花时间研究的是它的 GGUF 量化生态——同一个 27B,社区有好几种完全不同的压法,质量差异比参数表上的数字大得多。
GSQ-RCO:目前 3bit 的天花板
ISTA-DASLab 的 GSQ-RCO 是我测过最惊喜的量化。思路是非均匀量化:用 Gumbel-Softmax 加黎曼优化,逐张量搜索最优量化点,而不是均匀地砍比特。IQ3_S 档压出来 13G,官方口径 99.8% 能力保持——我本来不信,实际跑了长上下文大海捞针测试(NIAH,60K/122K/243K 三个深度各测),3/3 全过,针在 50% 深度的召回完全正常。
更难得的是兼容性:原版 llama.cpp 直接加载(IQ3_S 是标准 iQuant 格式),不需要任何 fork。如果配套的 MTP 投机解码可用,实测还能再加 22-31% 的生成速度。这是我如今的主力权重,没有之一。
Bonsai-2:三值化的启示与教训
Bonsai-2 走的是另一条极端路线:权重压到 ±1/0 三个值,1.72bpw,整个模型只有 6.2G。98.2% 的保持率听着也不错,但实际用出了问题——测试中它出现过一次地理常识错误(把一个注入位置说成黄海,实际不是)。98.2% 听着只比 99.8% 差 1.6 个百分点,但这 1.6% 恰好变成了会随机出现的幻觉,比"整体笨一点"危险得多。
还有生态锁定:Bonsai 的 Hadamard 变换没合并进上游,必须用 PrismML 的 fork。fork 里的 MTP 运行时确实是当时唯一能用的,我为了它专门在容器里从源码编译过一遍(详见路由器那篇)。但最终结论是:省 7G 磁盘,换质量风险加生态锁定,不值。Bonsai 的价值在于证明了三值化的下限在哪,以及催生了那个好用的 MTP 运行时。
AutoRound 系:先看 issue 再下载
Intel AutoRound 打包的几个版本,有的存在 packed embed_tokens 结构问题根本加载不了,有的 MTP 保留完整但实测零加速。不评价方法本身,只提醒一句:下载任何社区量化之前,先去 issue 区搜一圈。
三个月之后的取舍
回到最初的问题:27B 本地部署值不值得,怎么部署。三个月后的答案:
给一群人当服务,vLLM 加 4bit 混合量化,稳定省心;自己一个人用,llama.cpp 加 GSQ 3bit,配路由器按需切换,秒级响应;偶尔要喂整本手册级别的长文档,双卡层切分 262K(双卡怎么协作、路由器怎么管切换,见那篇)。
27B 这个体量在 48G 显存的机器上早已不是"能不能跑"的问题,而是"怎么组织"的问题——量化怎么选、切换怎么做、冷启动怎么压。这套东西组织好之后,它就是一台安静的、随叫随到的本地推理机。
参考与致谢
- vLLM — 高吞吐推理引擎,PagedAttention
- llama.cpp — GGUF 推理运行时
- ISTA-DASLab — GSQ-RCO 非均匀量化(99.8% 保持率的来源)
- PrismML llama.cpp fork — Bonsai 三值量化与 MTP 投机解码运行时
- Huihui-ai — 去审查微调系列模型
- Intel AutoRound — AutoRound 量化工具链
感谢这些项目的作者和社区。本地推理能到今天这个可用度,全靠他们在开源。