用 Ollama 试推理模型很省事,但真要做多人并发的接口,很多人会转向 vLLM。麻烦通常不是「装不上」,而是权重加载报错、显存不够、参数不知道改哪个、起来之后吞吐还不如预期。这篇按上线顺序走一遍:先定硬件与权重形态,再起服务,最后给出一个从日志到参数的排查顺序,顺带说明什么情况下你其实不该用 vLLM。
用 Ollama 试推理模型确实省事,一条命令拉下来就能聊。但真要做成多人并发的接口,很多人会转向 vLLM,因为它在批量调度和显存利用上更适合长驻服务。麻烦通常不是「装不上」,而是权重加载报错、显存不够、参数不知道改哪个、起来之后吞吐还不如预期。这篇按上线顺序走一遍:先定硬件与权重形态,再起服务,最后给出排查顺序,顺带说明什么情况下你其实不该用 vLLM。
先提醒一句:下面涉及具体数字的地方都不写死,因为你手上的卡、量化档位、上下文长度不同,结论会差很多。参数含义和折算去站内工具页对照,价格和型号资料到模型库核对,别照抄别人的配置单。
动手前先确认三件事:权重、显存、并发预期
权重形态是第一道坎。先分清你拿到的是原始权重、量化权重还是别人转过的格式,vLLM 对权重格式和分词器文件有明确要求,缺配置文件或分词器时加载阶段就会挂,而且报错信息往往不直接指向根因。下载完先列一遍目录,确认配置、分词器、权重文件都在,再谈启动。
- 原始权重
- 未量化的完整权重,精度高但显存占用最大,适合显存充裕且要最好效果的场景
- 量化权重
- 用低比特表示权重,显存占用明显下降,代价是效果和兼容性要自己验证
- 转换过的格式
- 第三方转出的格式,优先确认来源和完整性,否则加载失败很难定位
- 显存按参数量加量化档位估,单卡放不下就要提前决定张量并行还是换量化,别启动失败才想这件事;具体型号怎么折算去 /models/deploy 按你手上的卡算一遍
- 先写下你要的并发数和可接受的首字延迟,这两个数决定后面所有参数值,没有它调参就是瞎调;参考基线可以到 /tools/speed-test 量一个
- 确认服务是内网自用还是对外提供,这决定监听地址怎么设、要不要加一层网关,暴露范围的判断参考 /safety
起服务的顺序:先把单卡跑通,再加并行和参数
第一步只用最简参数起服务,能出结果再谈优化。很多人一上来就把显存占用比例、最大上下文、并行度全堆上去,结果启动失败,连是哪个参数导致的分不清。参数含义先对照 /tools 里的换算工具理解,不要照抄别人的配置单。
- 最简参数起服务只指定模型路径和必要项,发一条最短请求确认能出结果,验证方式是看返回内容是否正常而不是只看进程活着
- 逐项加参数依次加显存占用比例、最大上下文长度、并行度,每加一项跑一次短请求,出问题立刻知道是哪一项引起的
- 设监听地址对外提供接口时按内网需要设置监听地址和端口,别默认暴露到公网,暴露范围与风险判断参考 /safety
- 量基线再压测并发和长度上限别一次拉满,先按 /tools/speed-test 量一个基线,再决定往上加的幅度
| 参数类别 | 先设成什么 | 什么时候再调 |
|---|---|---|
| 显存占用比例 | 留出余量,别贴上限 | 确认能稳定出结果之后再往上加 |
| 最大上下文长度 | 先按主要使用场景设一个够用的值 | 出现截断或显存爆掉时再调 |
| 并行度 | 单卡够用就先不动 | 单卡放不下或吞吐不足时再开 |
| 并发与批处理 | 保守起步 | 基线量完、确认延迟可接受后再加压 |
排查顺序:从加载失败到跑起来慢,一类一类排
出问题别乱改参数,按阶段分类排效率最高。加载阶段的问题和运行阶段的问题根因完全不同,混在一起改只会把能用的配置也改坏。下面按从启动到运行、从报错到变慢的顺序给一个排查路径。
- 加载阶段报错:先查权重完整性和版本匹配,再查显存是否被别的进程占着,最后才怀疑驱动和框架版本
- 能起但请求报错:先确认客户端发的字段和服务端预期结构是否一致,再用最短请求复现,排除是请求内容触发的问题
- 跑得慢:先分清是卡在排队还是卡在生成,前者调并发与批处理相关参数,后者看量化档位和上下文长度
- 显存随请求增长直到爆掉:通常是长上下文加高并发叠出来的,压一压最大长度观察是否还复现,通用思路见 /tools/quality-monitor
排查时每改一个变量就复测一次,并且记录改动,否则改到最后自己都不记得初始配置是什么。如果是多人共用一台机器,先确认没有别人同时在跑任务抢显存。
什么情况下别用 vLLM
vLLM 不是所有场景的最优解。它的优势在多人并发和长驻服务,代价是部署链条更长、有版本升级和参数调整的维护量。如果你的场景不匹配,硬上只会多花时间。
| 你的情况 | 更合适的做法 | 判断依据 |
|---|---|---|
| 单人本地试玩、经常换模型 | 用部署链条更短的方案 | 换模型的频率高于调优频率 |
| 单卡显存连量化后都放不下 | 换更小的模型或上多卡并行 | 本地先把权重和显存对齐再决定 |
| 团队没人愿意长期管服务 | 先评维护人力再决定 | 长驻服务有升级与调参的持续投入 |
评估维护人力比评估性能更重要,一个跑得飞快但没人管得动的服务,最后往往是被关掉的那个。下一步先按你手上的卡到部署页核对权重形态和显存折算,再回速度测试页量一个基线,最后决定要不要加并行。→
常见问题
vLLM 部署 DeepSeek-R1,显存要留多少余量?
不能只看权重占用,还要给 KV 缓存留空间,而 KV 缓存跟上下文长度和并发数直接相关。做法是先按权重估一个下限,再把显存占用比例设得保守一些跑通,然后逐步加压直到出现分配失败为止,取那个临界值往下退一档作为长期值。具体到你手上的卡怎么折算,去 /models/deploy 算一遍更靠谱。
服务起得来但请求一直转圈,先查什么?
先分清是排队还是卡住。用最短的提示词、单个请求试,如果很快返回,说明是并发被其他长请求占住了,调小并发或调大批处理相关参数;如果单请求也慢,就看生成阶段,通常是上下文长度设得过大或量化档位太保守。先量一个基线速度再改参数,别一次改好几项。
用 vLLM 起服务和用 Ollama 跑同一个模型,差别在哪?
主要差别在定位:Ollama 偏个人本地随手用,换模型、拉模型都简单;vLLM 偏对外提供接口,能细致控制并发、批处理和显存占用,代价是启动和调参更麻烦。如果只是自己一个人问问题,vLLM 的收益不明显;如果是要接多个客户端、扛并发,才值得投入这份维护成本。