关键要点
- vLLM和Hugging Face TGI是高吞吐量多租户服务领域最主流的两个开源推理服务器(Apache 2.0),两者都支持连续批处理和多GPU张量并行。
- NVIDIA NIM是一个付费的预构建微服务(NVIDIA AI Enterprise订阅),封装了TensorRT-LLM,在NVIDIA硬件上提供最高吞吐量,并有厂商SLA支持。
- Ollama并非为企业级多租户服务而设计——它是面向单节点、单用户的运行时;将其用于开发者笔记本电脑和边缘/部门级原型,而非生产API流量。
- Kubernetes部署成熟度差异明显:vLLM和TGI提供社区/官方Helm chart,NIM有NVIDIA自己的Operator,Ollama只有社区chart,没有原生自动扩缩容钩子。
- 许可协议决定总成本:vLLM和TGI免费且开源;NIM在GPU本身成本之上增加了按GPU计费的订阅费用,以换取支持和一体化优化。
- 可观测性差异明显:vLLM和TGI开箱即用地暴露Prometheus指标;NIM集成NVIDIA的DCGM/Base Command监控栈;Ollama内置遥测能力极简。
- 追求最佳开源性价比用vLLM,已在Hugging Face生态内用TGI,需要厂商支持且能负担费用用NIM,Ollama仅保留用于原型验证。
📍 简单一句话
对于企业级多GPU LLM服务,vLLM和Hugging Face TGI是两个生产级开源选项,NVIDIA NIM是付费的一体化替代方案,而Ollama是为单用户而非多租户设计的。
💬 简单来说
在自己笔记本电脑上运行一个AI模型,和从共享GPU池为数百名员工或客户提供服务,是两个不同的问题。vLLM和TGI是为第二个问题设计的免费软件。NVIDIA NIM以付费、预打包产品的形式完成同样的工作,背后有NVIDIA的支持。大多数人用来本地试用模型的Ollama,并未针对这么多并发用户设计。
什么是企业级LLM推理服务器
企业级LLM推理服务器是一个软件层,接受来自众多用户或应用的并发请求,并将其高效路由到共享GPU池中。 这与单用户运行时不同,后者只为一台机器上的一个进程加载一个模型。
企业级服务软件与笔记本电脑工具的三点区别:连续批处理(将多个进行中的请求打包到同一次GPU计算中)、多GPU并行(将一个模型拆分到多个GPU或节点)、以及平台团队可在Kubernetes中运行的生产级API接口(健康检查、指标、自动扩缩容钩子)。
vLLM、Hugging Face TGI和NVIDIA NIM从一开始就围绕这三项需求构建。基于llama.cpp的Ollama则是为单机的可移植性和易用性而设计——这是一个不同但同样合理的目标,却不是同一个目标。如果您真正想问的是"哪个工具最容易装在我的电脑上",请参阅我们的单用户引擎对比文章——本指南覆盖的是这一决策的另一端。
功能对比:vLLM对比TGI对比NVIDIA NIM对比Ollama
| 能力 | vLLM | TGI | NVIDIA NIM | Ollama |
|---|---|---|---|---|
| 许可协议 | Apache 2.0 / 免费 | Apache 2.0 / 免费 | NVIDIA AI Enterprise / 付费 | MIT / 免费 |
| 设计定位 | 高吞吐量GPU服务 | HF原生生产级服务 | 一体化企业NVIDIA技术栈 | 单用户,非多租户 |
| 多GPU | 张量+流水线并行 | 张量并行 | 张量并行(TensorRT-LLM) | 仅单节点 |
| 连续批处理 | 支持(PagedAttention) | 支持(Rust路由器) | 支持(Triton后端) | 有限/实验性 |
| 量化 | GPTQ / AWQ / FP8 / INT4 | GPTQ / AWQ / bitsandbytes | FP8 / INT4(TensorRT-LLM) | GGUF Q4-Q8 |
| Kubernetes部署 | Helm chart / KServe | 官方HF Helm chart | NIM Operator(官方) | 仅社区chart |
| 支持模式 | 社区 / GitHub | 社区 + HF合同 | SLA支持的NVIDIA服务 | 仅社区 |
| 可观测性 | 内置Prometheus指标 | Prometheus + OTel追踪 | NVIDIA DCGM + Prometheus | 极简/无内置 |
了解vLLM:开源吞吐量领导者
vLLM是专为多GPU高吞吐量服务而构建的开源推理服务器(Apache 2.0)。 它起源于UC伯克利的Sky Computing Lab,是生产级LLM API中部署最广泛的开源引擎之一。
- PagedAttention:以固定大小的块管理KV缓存,而非为每个请求分配连续内存,从而提高可达到的GPU内存利用率,让更多并发请求共享一块GPU。
- 连续批处理:新请求加入正在运行的批次,而非等待当前批次结束,从而在流量波动时保持GPU高利用率。
- 多GPU与多节点:张量并行将一个模型的层拆分到一个节点内的多块GPU上;流水线并行将模型拆分到多个节点上,以应对超出单节点合计显存的模型。
- 量化:GPTQ、AWQ、FP8和INT4格式降低每个副本的显存占用,让固定GPU集群能容纳更多并发模型副本。
- 兼容OpenAI的API:
vllm serve <model>提供OpenAI Chat Completions API的直接替代,最大限度减少应用端集成工作。 - vLLM提供官方Helm chart,并与KServe集成以实现Kubernetes原生的模型服务,自动扩缩容可依据请求队列深度或GPU利用率驱动。
# 在4块GPU上以张量并行方式部署模型
pip install vllm
vllm serve meta-llama/Llama-3.3-70B-Instruct \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.9 \
--host 0.0.0.0 --port 8000了解Hugging Face TGI:HF原生选项
Hugging Face Text Generation Inference(TGI)是Hugging Face为托管在Hugging Face Hub上的模型构建的开源(Apache 2.0)生产级推理服务器。 它支撑着Hugging Face自家的Inference Endpoints产品,因此已经在生产环境中处理企业级流量。
- 基于Rust的请求路由器:以比纯Python路由器更低的单请求开销处理排队和连续批处理。
- Flash Attention和Paged Attention:TGI采用了与vLLM相同的内存效率技术,在同等硬件上已基本消除了两者之间的大部分吞吐量差距。
- 张量并行:将一个模型拆分到一个节点内的多块GPU上;支持多节点服务,但自研工具链不如vLLM完善。
- 量化:支持bitsandbytes、GPTQ、AWQ和EETQ格式。
- 原生集成Hugging Face Hub:如果模型已托管在Hub上,获取模型、分词器和safetensors权重不需要任何手动转换步骤。
- 许可协议提醒:TGI在2023至2024年间曾短暂采用Hugging Face自定的限制性许可(HFOILv2),之后恢复为Apache 2.0——请确认部署清单中固定的许可版本,因为较旧的缓存镜像可能仍带有限制性标签。
了解NVIDIA NIM:厂商支持的选项
NVIDIA NIM(NVIDIA推理微服务)是一种付费的预构建容器,将NVIDIA的TensorRT-LLM推理引擎封装在标准化API之后,作为NVIDIA AI Enterprise订阅的一部分出售。 它用有支持、预先优化的部署,替代了vLLM和TGI的自行搭建工作。
- TensorRT-LLM优化容器:NVIDIA针对每个模型和每代GPU(H100、A100、L40S)预编译并调优推理内核,在NVIDIA硬件上通常能实现四者中每GPU最高的吞吐量。
- NVIDIA支持与SLA:相较开源选项的差异化优势——平台团队可以写入厂商合同的支持工单渠道和可用性承诺。
- 面向Kubernetes的NIM Operator:NVIDIA自有的基于Helm的Operator,用于在集群中部署、扩缩容和管理NIM容器,并集成NVIDIA自身的监控栈(DCGM Exporter、Base Command)。
- 模型目录:NVIDIA维护一套精选的开放权重模型,预打包为可直接拉取的NIM容器,并提供打包自有微调模型的途径。
- 代价是厂商锁定和许可成本:NIM只能在NVIDIA GPU上高效运行,订阅费用按GPU、按年计费,叠加在硬件成本之上——在编制预算前,请直接向NVIDIA AI Enterprise确认当前价格,因为企业软件订阅价格的调整往往没有太多公开预告。
为什么Ollama不是企业级服务引擎
Ollama并非为企业级多租户推理服务而设计,这是设计选择,而非缺陷。 Ollama用简单的REST API和一条命令的模型拉取封装了llama.cpp,针对在一台机器上运行一个模型的开发者进行了优化。
- 并发性:Ollama增加了基本的并行请求处理,但没有连续批处理或类似PagedAttention的内存管理,因此在同一块GPU上,面对大量并发用户时,其吞吐量下降速度比vLLM或TGI更快。
- 多GPU:Ollama可以在一台机器上将大模型拆分到多块GPU,但没有可与vLLM相媲美的原生张量并行或多节点分布式服务。
- Kubernetes:只有社区维护的Helm chart;没有自研的Kubernetes Operator、自动扩缩容器集成或厂商支持合同。
- 可观测性:内置指标极简——与vLLM和TGI不同,默认没有Prometheus端点。
- Ollama在企业内仍然适用的场景:开发者笔记本电脑、内部流量较小的部门级原型,或一次只服务一个用户的隔离边缘设备。一旦流量需要多租户并发能力,就应迁移到vLLM、TGI或NIM——关于这一迁移的硬件层面,请参阅本地LLM的多GPU配置。
单节点对比多节点的架构决策
第一个架构决策是单节点还是多节点,这取决于模型是否能装入单个节点的合计GPU显存,而不仅仅取决于流量大小。
- 单节点、多GPU:使用张量并行(vLLM的
--tensor-parallel-size,TGI的--num-shard)将一个模型的层拆分到一台服务器内的多块GPU上。这是能装入单节点合计显存的模型的默认方案。 - 多节点:一旦模型超出单节点GPU显存,或请求量超出单节点张量并行能承载的范围,就增加流水线并行。vLLM通过Ray支持此方案;NIM则通过其自有的多节点部署模板支持。
- 负载均衡:对于大小相同的副本,简单的轮询均衡器即可胜任,但感知KV缓存的路由——将同一对话的后续请求发回已缓存其上下文的副本——能显著降低聊天类工作负载的延迟。
- 模型路由:运行多个模型(例如一个编程模型和一个通用聊天模型)的企业,通常会在路由层后面为每个模型运行独立的副本池,而非共享一个池——GPU显存无法在差异很大的模型之间足够干净地分时共享,不值得为此增加复杂度。
- 自动扩缩容:根据请求队列深度或GPU利用率扩缩容,而非传统Kubernetes HPA默认的CPU指标——GPU推理Pod的CPU利用率几乎不随负载变化。搭配自定义Prometheus指标的KEDA是vLLM/TGI的常见模式;NIM的Operator已将其作为产品的一部分内置。关于这背后更广泛的容量规划,请参阅企业级本地LLM扩展。
如何部署多GPU推理栈
部署企业级推理栈遵循固定的顺序:定义SLA,评估集群规模,选择引擎,然后围绕它布置部署、路由和可观测性。
- 1在选择硬件前,先定义延迟和并发SLA。
- 2根据模型的显存占用和目标并发请求数评估GPU集群规模,而非仅根据模型参数量。
- 3选择服务引擎——追求开源灵活性选vLLM或TGI,追求厂商支持的一体化部署选NIM。
- 4将引擎容器化,并通过Helm(或NIM Operator)部署到您的Kubernetes集群。
- 5如模型需要,在节点内配置张量并行、跨节点配置流水线并行。
- 6在副本池前配置感知KV缓存的负载均衡或轮询均衡。
- 7将自动扩缩容接入请求队列深度或GPU利用率,而非CPU。
- 8添加Prometheus/OpenTelemetry可观测性,并在正式上线前以目标并发量进行负载测试。
许可协议与支持模式对比
许可协议是这四个选项中对总拥有成本影响最大的一项。 vLLM和Hugging Face TGI均采用Apache 2.0许可,任何规模下都免费——您只需支付底层GPU基础设施的费用。NVIDIA NIM在GPU本身成本之上,叠加按GPU、按年计费的订阅费用,以换取TensorRT-LLM优化的性能和厂商支持合同——请直接向NVIDIA确认当前每GPU价格,因为企业软件订阅价格并不像零售产品那样公开发布。Ollama采用MIT许可,免费,支持仅限于其社区GitHub和Discord——截至目前尚无付费的企业支持层级。
对生产系统而言,支持模式与许可成本同样重要:vLLM和TGI的支持来自GitHub issue和社区渠道(热门问题响应快,但无SLA),NIM附带NVIDIA支持合同和可用性承诺,而Ollama除社区渠道外没有任何支持途径。
生产级服务的可观测性接入点
**vLLM和TGI都开箱即用地暴露兼容Prometheus的/metrics端点,涵盖请求延迟、队列深度、GPU KV缓存利用率和token吞吐量。** 将其接入现有的Prometheus/Grafana技术栈,即可获得生产级仪表盘,无需自定义埋点。
NVIDIA NIM集成NVIDIA自身的监控栈——用于GPU层面指标(利用率、显存、温度、ECC错误)的DCGM Exporter,以及用于集群级可视化的Base Command Manager——如果其余基础设施已经以NVIDIA为中心,这种集成更合适。
Ollama内置遥测极简:默认没有Prometheus端点,这与其单用户设计定位一致,但如果您试图将其作为共享基础设施运行,并需要查看众多并发用户的单请求延迟,这就是一个实际短板。
该选择哪个推理服务器
综合最佳开源选择:vLLM——社区采用度最高,多GPU工具链最广泛,开发节奏活跃。
已在Hugging Face生态则最佳:TGI——原生Hub集成,与官方Inference Endpoints功能对等。
需要厂商支持则最佳:NVIDIA NIM——SLA支持,一体化,代价是订阅费用。
不适合生产多租户流量:Ollama——留给开发者机器和单用户边缘部署。
- 🧭 为多个团队运行共享内部LLM API的平台团队 → vLLM或TGI,在Kubernetes上自行托管。
- 🧭 需要支持合同和审计跟踪的受监管企业 → NVIDIA NIM。
- 🧭 已在Hugging Face Hub标准化模型托管的团队 → TGI。
- 🧭 在基础设施配置完成前构建概念验证的开发者 → 先用Ollama,一旦出现真实并发流量再迁移到vLLM/TGI。
- ❌ 如果预计并发用户超过少数几个,不要将Ollama部署在共享生产端点后面——改用vLLM或TGI。
- ❌ 如果需要根据请求负载进行Kubernetes原生自动扩缩容,Ollama没有类似KEDA按队列深度扩缩容的能力——改用vLLM、TGI或NIM。
评估企业推理基础设施规模时的常见错误
- 按参数量而非并发请求数评估GPU规模。 仅按一份模型副本能装入显存来评估的GPU集群,没有余量应对并发用户——先按峰值并发评估,再检查模型是否仍能装入。
- 将Ollama部署在共享生产负载均衡器后面。 在两个用户的演示中可以运行;但支撑不了面向数百用户设计的系统。
- 按CPU利用率扩缩容。 GPU推理Pod的CPU利用率几乎不随负载变化——应改为按队列深度或GPU利用率扩缩容。
- 忽略对TGI旧缓存镜像的许可检查。 请确认拉取的镜像标签对应Apache 2.0版本,而非缓存的HFOILv2时代构建。
- 未直接向NVIDIA确认当前每GPU价格就为NIM做预算。 企业软件订阅价格会变动;过时的报价不能作为预算依据。
资料来源
- vLLM官方文档 —— 官方vLLM文档:PagedAttention、连续批处理及多GPU/多节点部署指南。
- Hugging Face Text Generation Inference(GitHub) —— 官方TGI仓库:架构、支持的量化格式及许可协议历史。
- NVIDIA NIM官方文档 —— 官方NIM文档:支持的模型、TensorRT-LLM后端及面向Kubernetes的NIM Operator。
- Ollama GitHub —— 官方Ollama仓库及issue追踪,用于参考并发处理和部署行为。
- NVIDIA AI Enterprise —— NVIDIA针对NIM所依托的AI Enterprise订阅的产品页面。
常见问题
vLLM和NVIDIA NIM有什么区别?
vLLM是一个免费、开源(Apache 2.0)的推理服务器,由您自行托管和运维。NVIDIA NIM是NVIDIA提供的付费预构建容器,封装了TensorRT-LLM引擎,随按GPU计费的NVIDIA AI Enterprise订阅和厂商支持一起出售。由于NVIDIA预先调优了推理内核,NIM在NVIDIA硬件上通常能达到每GPU最高的吞吐量;vLLM提供更多控制权且无许可费用,代价是您需要自行完成这些调优和支持工作。
Ollama能用于企业级多用户推理服务吗?
不建议用于生产多租户流量。Ollama没有连续批处理或类似PagedAttention的内存管理,也没有Kubernetes原生自动扩缩容,因此在同一块GPU上,面对大量并发用户时其性能下降速度比vLLM、TGI或NIM更快。它更适合开发者机器、单用户边缘设备,或低流量的内部原型。
NVIDIA NIM相对于开源的vLLM或TGI,许可成本值得吗?
这取决于厂商支持合同和预先优化的吞吐量,对您而言是否值得订阅费用,相较于免费自行运维的基础设施。需要审计跟踪和SLA的受监管企业通常能证明这笔成本的合理性;拥有内部机器学习基础设施专长的团队,往往能用vLLM或TGI在没有许可费用的情况下获得相当的吞吐量。
如何在多块GPU和多个节点之间扩展LLM推理?
使用张量并行将一个模型的层拆分到同一节点内的多块GPU上,一旦模型超出单节点的合计GPU显存,再用流水线并行拆分到多个节点。vLLM原生支持两者(多节点通过Ray实现);TGI原生支持张量并行,但自研的多节点工具较少;NIM通过NVIDIA自有的多节点模板支持两者。
每个推理服务器支持哪些量化格式?
vLLM支持GPTQ、AWQ、FP8和INT4。TGI支持bitsandbytes、GPTQ、AWQ和EETQ。NVIDIA NIM使用TensorRT-LLM自有的FP8和INT4量化,并按GPU代际进行调优。Ollama使用GGUF格式,精度为Q4至Q8,目标是单机内存节省,而非多用户吞吐量。
如何在Kubernetes上部署vLLM或TGI?
两者都提供可部署的容器镜像和Helm chart——vLLM还与KServe集成以实现Kubernetes原生的模型服务,TGI则有官方的Hugging Face Helm chart。请根据您的GPU分配配置resource requests,将自动扩缩容设置为依据队列深度或GPU利用率而非CPU,并添加Prometheus ServiceMonitor以抓取内置的metrics端点。
什么是连续批处理,为什么它对企业服务很重要?
连续批处理允许新请求加入已经在运行的GPU批次,而不必等待当前批次结束才开始新批次。这在不规则的真实流量模式下保持GPU高利用率,因此在vLLM、TGI以及NIM的TensorRT-LLM后端中都是标准做法,也是这三者与Ollama这类单用户工具之间最大的吞吐量差异之一。
哪个推理服务器的可观测性最好?
vLLM和TGI都开箱即用地暴露兼容Prometheus的指标端点,涵盖延迟、队列深度和GPU KV缓存利用率——可直接对接现有的Prometheus/Grafana技术栈。NVIDIA NIM集成NVIDIA的DCGM Exporter和Base Command Manager,更适合以NVIDIA为中心的基础设施。Ollama内置遥测极简,且默认没有指标端点。
多个模型是否需要独立的GPU集群,还是可以共享一个池?
实践中,运行多个模型的企业通常会为每个模型运行独立的副本池,而非共享一个池,因为GPU显存无法在大小差异很大的模型之间干净地共享。应在应用层或网关层将请求路由到正确的池,而不是尝试将多个模型部署在相同的GPU副本上。
vLLM、TGI和NVIDIA NIM的许可协议有何不同?
vLLM和Hugging Face TGI均采用Apache 2.0许可,任何规模下都免费——您只需支付底层GPU基础设施费用。NVIDIA NIM需要付费的NVIDIA AI Enterprise订阅,按GPU、按年计费,叠加在GPU硬件成本之上;请直接向NVIDIA确认当前价格,而非依赖之前的报价。Ollama采用MIT许可,免费,仅有社区支持。