大模型怎么塞进普通服务器?vLLM、Ollama 和模型量化(GGUF/AWQ)的黑科技
2026-08-14 · DevCraft Studio
动辄几十GB的开源大模型,凭什么能在你的显卡甚至CPU上跑起来?本文用大白话讲清模型量化为何能四两拨千斤、把FP16压成INT4,拆解vLLM的PagedAttention如何用显存分页消灭碎片,并手把手教你用Ollama加Open WebUI在VPS上一键搭建私有AI。读完你就明白为什么一张游戏显卡也能跑大模型,以及选VPS还是上云GPU最划算。
你有没有想过一个怪事:网上那些动辄几十 GB、几百 GB 的开源大模型,比如 Llama 3、DeepSeek、Qwen,明明是科技巨头用成千上万块显卡训练出来的,凭什么你花几百块租一台 VPS,或者干脆用自己的笔记本,就能把它们跑起来?这就像有人告诉你,一辆货真价实的大卡车,能被塞进你家楼下那个快递柜里。今天我们就掰开揉碎,聊聊背后那套"压缩与调度"的黑科技。
延伸阅读
更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用、Ollama AI系列(2):VPS上的AI推理与API应用、【CPU选型 01】搭载 AMD Ryzen 9950X 的 VPS、ARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?、Ollama AI系列(2):VPS上的AI推理与API应用。
一、模型到底有多大?先算一笔显存账
要理解大模型怎么变小,得先搞清楚它"大"在哪。一个大模型本质上就是一大堆数字,这些数字叫"参数"(权重)。一个 70B(700亿参数)的模型,训练时通常用 FP16(16位浮点数)来存每个参数,一个 FP16 数字占 2 个字节。那么 700 亿乘以 2 字节,等于 140 GB。这还没算推理时临时占用的那部分显存。
所以真相很直白:模型的体积,基本就是"参数数量 × 每个参数占的字节数"。一个 8B 模型在 FP16 下大约 16 GB,单张 16 GB 显存的入门显卡勉强能装下,但一跑推理、连上上下文,显存就爆了。这就是为什么普通玩家直接拿原始模型硬跑,十有八九会遇到"显存不足(OOM)"的报错。
那有没有办法把模型"减肥"?有,而且效果惊人。把每个参数从 2 字节压到 0.5 字节(也就是 4 比特),体积直接变成原来的四分之一。70B 模型从 140 GB 缩到约 35 GB,一张 80 GB 的 A100 就能装下,两块 24 GB 的 4090 也能凑合。这套减肥术,就是下面要讲的量化。
二、量化:把"胖子模型"压成"瘦子",靠的是精度换空间
量化的核心思想特别朴素:模型里的权重其实是一堆小数,比如 0.2371、-1.846、3.002。可是对推理来说,这些数字并不需要精确到小数点后第四位。就像你买菜算账,标价 3.002 元和 3.0 元,对你掏钱包几乎没区别。量化干的事,就是把高精度的小数,映射成低精度的整数。
用大白话讲 FP16 到 INT4 的变化:原本每个权重是一个 16 位的浮点数,现在改成用 0 到 15 这 16 个整数值来表示(4 比特能表示 2 的 4 次方 = 16 个等级)。那具体怎么映射?这里有个关键概念叫缩放因子(scale)和反量化。
打个比方:你有一把尺子,量程是 -10 到 +10 米,但你的记录本只能写 0 到 15 这 16 个整数格子。怎么办?你把真实长度除以一个"缩放因子"再四舍五入成整数存起来。比如缩放因子是 1.25,真实值 3.002 除以 1.25 约等于 2.4,四舍五入记成 2;要用的时候再乘回 1.25,得到 2.5。真实值 3.002 变成了存起来的 2,误差就这么产生了,但很小。
这就是"精度换空间":我们不再死记每个权重的精确小数,而是记一个缩放因子 + 一堆整数。整数占的空间小得多。实际部署时,计算可以就在低精度整数上做,或者临时反量化回接近原值的小数再算。代价是模型会损失一点点"聪明程度",但通常只在百分之几的水平。行业里有个经验法则:4 比特量化大概相当于"每 10 亿参数占 0.5 GB",所以 8B 模型压到 4 比特约 4 GB,13B 约 6.5 GB,70B 约 35 GB。
三、两大门派:GGUF 和 AWQ/GPTQ 怎么选
量化不是只有一种做法,生态里主要有两大家。第一大家是 GGUF,它是 llama.cpp 这套开源引擎的格式。GGUF 最大的本事是"啥都能跑":CPU 能跑、NVIDIA 显卡能跑、苹果芯片能跑、AMD 显卡也能跑,甚至在树莓派上都能跑。它还能把模型的一部分层放在显卡、一部分层放在内存(CPU),这叫"部分卸载",别的格式做不到。
GGUF 里常见的 Q4_K_M 是社区公认的平衡点:体积、速度、质量都还不错,一个 8B 模型大约 4.6 GB。你要是显存特别紧张,还有 Q3_K_M、Q2_K 这种更狠的压缩档;显存宽裕就上 Q5_K_M、Q6_K,质量更接近原版。GGUF 是个单文件,把权重、分词器、模型结构全塞在一起,搬到哪都能用。
第二大家是 AWQ 和 GPTQ,它们是为显卡推理而生的。AWQ 全称"激活感知权重量化",思路很巧妙:它先观察模型在处理真实数据(激活值)时,哪些权重通道最重要,然后给那大约 1% 的关键权重"开小灶"、少压缩一点,其余的一视同仁压成 4 比特。结果就是同样 4 比特,AWQ 的质量 retention 比 GPTQ 略高,大约能保住原模型 95% 的水平。
那怎么选?给你一句大白话结论:没有显卡、或者想在 CPU 上跑,闭眼选 GGUF;有 NVIDIA 显卡、要追求生产环境的速度和质量,选 AWQ。GPTQ 是更早的方案,兼容性广但正在被 AWQ 取代。再补一个尺寸对照思路(都是 4 比特左右):3B 模型约 2 GB、7B 约 4 GB、13B 约 8 GB、32B 约 20 GB、70B 约 40 GB——对照你机器的显存或内存,就知道能跑多大。
四、vLLM 的 PagedAttention:给显存"分页",治好碎片病
光把模型压小还不够。就算模型装得进显卡,真到了多用户同时提问的时候,显存还是会被一种叫 KV Cache 的东西撑爆。什么意思?大模型每生成一个字,都要回头看前面所有字的内容(这叫自注意力),它把这些"记忆"存在一个叫 KV Cache 的地方。每个用户开一个对话,就占一块 KV Cache。
传统推理框架的做法很笨:给每个请求预先划一整块连续的显存,按"可能的最长对话"来预留。结果就是两大致命浪费。第一,内部碎片:你预留了能装 2048 个字的显存,用户只聊了 30 个字,剩下 98% 全空着浪费了。实测里内部碎片能白白浪费 60% 到 80% 的显存。第二,外部碎片:请求来来去去,显存里留下很多不连续的空洞,总空闲很多,却找不到一块足够大的连续空间给新请求,新请求直接卡死。
vLLM 团队想出的解法叫 PagedAttention,灵感直接抄自操作系统的"虚拟内存分页"。它把 KV Cache 切成固定大小的小块(默认每块存 16 个 token),叫 block。再用一张"块表(block table)"记录:这个对话的第几个逻辑块,实际存在显存的哪个物理块上。物理块不需要挨在一起,哪有空位就塞哪。
这个设计的妙处,可以用停车场来理解。旧框架说:"每辆车必须预留一整排连号的停车位,按最大可能长度留。"于是 10 辆车留了 10 排,多数车位空着。PagedAttention 说:"车不用停一排,发你一本停车券,47 号、203 号、18 号,随便停;新车来了,哪有空位停哪;车开走了,车位立刻回收给别人。"管理员(注意力计算)知道哪辆车对应哪些车位,找车一样准。
效果立竿见影:碎片从 60%–80% 降到接近 0,显存利用率从 20%–40% 拉到接近 100%,同样的显卡能同时服务的并发量直接提升 2 到 4 倍。而且多个对话如果共用同一段系统提示词(system prompt),还能共享同一组物理块,进一步省显存。这就是为什么 vLLM 成了高并发生产环境的标配。
五、动手搭建:Ollama + Open WebUI 私有 AI
讲完原理,说点实在的。普通开发者想在自己 VPS 或本地服务器上拥有一套"私有 ChatGPT",最省事的组合就是 Ollama + Open WebUI。Ollama 是负责把模型跑起来的引擎,Open WebUI 是一个长得跟 ChatGPT 几乎一样的网页界面,数据全程不出你的服务器。
大致步骤就四步:第一步,装好 Docker(没有就去 docker.com 一键装)。第二步,用一条 docker compose 命令把 Ollama 和 Open WebUI 两个容器拉起来,Open WebUI 默认跑在 3000 端口。第三步,进网页建个管理员账号,然后在服务器上执行一条命令拉模型,比如 ollama pull llama3.1:8b,它会下载约 4.7 GB 的 GGUF 模型。第四步,刷新网页,下拉框里就能看到模型,开聊。
门槛高不高?给你一组对照:纯 CPU 跑的话,4 GB 内存 + 2 核就能跑 3B 小模型,写写东西够用;想要舒服的 7B 体验,配 8 GB 以上显存或内存;13B 建议 16 GB 显存,32B 要 24 GB 显存,70B 得上 64 GB 内存/显存的机器。一个常见的实惠方案是:租一台 16 GB 内存、4 核的 VPS(月费可能就一杯奶茶钱),CPU 跑 7B 模型,速度慢点但完全能用;要是手头有块 8 GB 显存的游戏显卡,本地跑 7B 能到每秒 30 到 50 个 token,体验已经很顺滑。
顺带提一句,Ollama 还有个贴心设置叫 OLLAMA_KEEP_ALIVE,控制模型加载后在内存里待多久。你要是频繁提问,就让它多待一会儿,省得每次提问都得重新加载、等那两三秒的"首 token 延迟"。
六、买 VPS 还是上云 GPU?性价比为王
最后聊点跟咱们 VPS-Craft 读者最相关的:到底怎么选硬件?一句话,小模型图省钱用 CPU 型 VPS,认真玩 AI 才考虑带显卡的机器。普通 VPS 没显卡,只能 CPU 推理,适合 3B、7B 这种小模型做写作辅助、代码 review、文档摘要;真要跑 13B 以上或者追求每秒几十 token 的爽快,就得上带 NVIDIA 显卡的云服务器,或者直接本地插一张 4090(24 GB 显存,能舒服跑 13B、勉强跑 32B)。
性价比怎么算?一张 4090 约一万出头,24 GB 显存,能跑绝大多数 4 比特模型;云上按需租 A100 80 GB 一小时几块钱到十几块,适合临时跑大模型做实验。对长期自用、又不想被 ChatGPT Plus 按月割韭菜的人来说,一台本地显卡机器 + Ollama,往往是几年下来最划算的账。
七、一图流总结
- 模型体积 = 参数数量 × 每参数字节数;FP16 下 70B 模型约 140 GB,4 比特量化后约 35 GB。
- 量化=用缩放因子把高精度小数压成低精度整数,精度换空间,质量通常只掉几个百分点。
- GGUF 通吃 CPU/GPU/苹果芯片,适合没显卡或 CPU 推理;AWQ 质量更好,适合 NVIDIA 显卡生产环境。
- vLLM 的 PagedAttention 借操作系统分页思想消灭显存碎片,并发能力直接翻 2 到 4 倍。
- Ollama + Open WebUI 四步搭建私有 AI,数据不出服务器,7B 模型约 4.7 GB。
- 硬件选法:省钱用 CPU 型 VPS 跑小模型,认真玩 AI 再上带显卡的云服务器或本地显卡。
常见问题 FAQ
问:普通 VPS 能跑多大的模型?? 取决于显存。7B 模型用 4-bit 量化(GGUF Q4)约 4–5GB 显存,消费级 8–24GB 显卡的 VPS 就能跑;70B 需多卡或 2-bit 量化才勉强。无 GPU 的纯 CPU 机器也能跑小模型,但速度很慢。先算显存账:参数数 × 每参数字节数 ≈ 最低显存,再留 20% 余量。
问:vLLM 和 Ollama 有什么区别?? Ollama 面向个人本地上手,开箱即用、自动选量化,适合单机玩模型;vLLM 面向高并发服务,靠 PagedAttention 做显存分页、吞吐高,适合做 API 网关。个人尝鲜用 Ollama,要对外提供稳定高 QPS 推理服务再上 vLLM。两者都能加载 GGUF/AWQ 权重。
问:量化会严重掉智能吗?? 会损失但可控。4-bit(Q4)在 7B–14B 上几乎感觉不到退化,70B 上更稳;低于 2-bit 或小模型做极量化会明显胡说。AWQ 比 GGUF 在同等比特下略优。选量化档位按「显存够用前提下尽量高比特」,优先 Q4_K_M 或 AWQ 4-bit 这类甜点档。