你手里有一张卡、一个模型权重,准备在本地跑起来,结果一搜发现 ollama、vllm、llama.cpp 三个名字到处出现,教程互相打架:有人说 ollama 一行命令就完事,有人说并发一上来就得换 vllm,还有人抱着 llama.cpp 不放。这篇不评谁更强,只按你的使用人数、硬件型号和要不要改代码,给一张能直接照着选的对照表,以及选完之后怎么验证自己没选错。
你手里有一张卡、一个模型权重,准备在本地跑起来,结果一搜发现 ollama、vllm、llama.cpp 三个名字到处出现,教程互相打架:有人说 ollama 一行命令就完事,有人说并发一上来就得换 vllm,还有人抱着 llama.cpp 不放。这篇不评谁更强,只按你的使用人数、硬件型号和要不要改代码,给你一张能直接照着选的对照表,以及选完之后怎么验证自己没选错。
十分钟内定下来这件事是可以做到的,前提是你先别问「哪个引擎快」,先问「同一分钟里有几个请求、卡是什么卡、应用代码能不能改」。这三问答完,引擎基本就定了,剩下的都是验证工作。
先看谁在用这个服务,再看引擎
引擎的差别在低负载下几乎看不出来,三个都能对话。真正分叉的地方是并发。所以第一步不是比引擎,是把你的使用场景写下来:是只有你自己在调,还是同事几个人一起用,还是有个程序在后台按批处理调。
- 单人调试验证:只求跑起来、换模型快、装完就能对话,这类需求对吞吐几乎没要求,随便选一个能跑通的都行
- 多人或程序高频调用:关注同时几个请求进来会不会排队、会不会显存炸掉,这才是引擎分水岭
- 判断依据是「同一分钟里有几个请求」,不是「模型多大」;一个很大的模型只有一个用户,压力可能比小模型十个用户还小
- 把预估并发写下来再去对照,卡数不够的话换引擎也救不了,可以到 几张卡够用:按模型算一遍(/compute/sizing) 先估一遍
三个引擎各自的取舍点
这一段不排名次,只讲每个引擎把复杂度放在了哪。你把复杂度接得住,那个引擎对你就是对的选择。
| 引擎 | 强项 | 代价 |
|---|---|---|
| ollama | 安装和模型拉取最省事,适合先证明这条路能走通 | 可调参数少,高并发下不好细抠 |
| vllm | 为服务化设计,吞吐和批量调度是强项 | 环境依赖重,报错信息不友好,小显存机器上不一定跑得动 |
| llama.cpp | 对量化格式和 CPU、混合推理最宽容 | 搭服务和接多路请求要自己写 |
三者不是替代关系,很多团队是「llama.cpp 或 ollama 试水,上线换 vllm」,分层用完全正常。你要避免的是拿单人调试的体验去判断多人并发下的表现,反过来也一样。
硬件先过筛,别让软件选型背锅
很多人换引擎换了一大圈,最后发现是显存装不下。先过硬件这一关,再谈软件。
- 确认显存装得下先确定你要的量化档位能不能装进现有显存,装不下换引擎也没用。量化档位怎么选见 量化档位怎么选(/guides/quantization-tier-choice)
- 看有没有独立显卡没有独显、只有集显或纯 CPU:优先考虑 llama.cpp 这条路,再考虑 ollama 的 CPU 模式
- 单卡显存偏紧时别急着上 vllm,先用小量化档位跑通,再决定要不要为了并发换卡
- 算长期账要长期跑服务还得看电费和整机成本,参考 买卡还是租卡:三年账怎么算(/compute/tco)
这一步做完,候选引擎通常只剩一两个。剩下那个如果还跑不起来,问题多半不在引擎,而在权重格式或驱动版本。
选完先验三件事,别等上线才发现
选型只是假设,验证才是结论。下面三件事按顺序做,任何一件不过,先换档位或换引擎,不要硬调参数。
- 跑一个真实长度的输入,看首字延迟能不能忍;短提示词的测试结果会骗你
- 按你预估的并发数同时打几个请求,观察是排队变慢还是直接报显存错误
- 确认模型许可和权重的使用边界,商用时踩这条线最亏,见 超长上下文旗舰模型的官方通道(/official-api/providers/llama) 之类官方说明
三项都过了再谈调优。如果并发测试里出现排队但不报错,说明硬件够、引擎也够,只是调度没配好;如果直接显存错误,那就是档位或卡的问题,调参数没用。
换引擎的代价提前算
换引擎不是重装一遍就完事,有三层成本,提前估一下,避免上线前一天才发现要改代码。
- 接口层
- 如果应用是按 OpenAI 兼容格式写的,换引擎往往只改地址和模型名,成本低
- 提示词层
- 不同引擎的默认上下文长度、截断方式和采样默认值不一致,同一段提示词效果会有出入
- 排查层
- 换完之后如果输出变差,先怀疑上下文被截断和采样参数,而不是模型本身
第三层最容易被误判成「换了引擎模型变笨了」。遇到输出变短、答非所问,可对照 提示与调参术语速查(/ai-dict/category/tips) 逐项核对,多半是某个默认值不同。
下一步拿不准选哪个,先去站内把候选引擎的实测环境和你的场景对一遍,再回来看这张对照表。→常见问题
我就一个人用,是不是直接用 ollama 就行?
多数情况下可以。单人调试对吞吐没要求,ollama 装完能跑、换模型快,省下的时间比抠参数值钱。但如果你后面要把它变成同事共用的服务,或者要接进一个会并发请求的程序,那就早点按服务的标准选,省得中途搬一次家。
llama.cpp 是不是已经过时了,现在都该上 vllm?
不是一回事。vllm 依赖较重的运行时和较新的显卡环境,老机器、纯 CPU、Mac 这些场景它不一定跑得动,而 llama.cpp 对量化格式的宽容度更高。所以判断标准是「你的机器能不能跑 vllm」,能跑再谈要不要为了吞吐换过去。
三个引擎跑同一个模型,输出质量会不一样吗?
同一份权重、同一个量化档位,理论上质量接近,差异主要来自默认采样参数、上下文截断方式和推理实现对精度的处理。如果你换了引擎发现回答明显变差,先核对上下文长度和温度这类参数,再怀疑引擎,具体参数含义可以去术语词典查。