Principais conclusões
- vLLM e Hugging Face TGI são os dois servidores de inferência open source (Apache 2.0) dominantes para serving multi-tenant de alto throughput; ambos suportam continuous batching e paralelismo tensor multi-GPU.
- NVIDIA NIM é um microsserviço pago e pré-construído (assinatura NVIDIA AI Enterprise) que empacota o TensorRT-LLM para o maior throughput em hardware NVIDIA, com suporte respaldado por SLA.
- Ollama não foi feito para serving corporativo multi-tenant -- é um runtime orientado a um único nó e um único usuário; use-o em notebooks de desenvolvedores e protótipos de edge/departamento, não em tráfego de API em produção.
- A maturidade em Kubernetes difere: vLLM e TGI trazem Helm charts comunitários/oficiais, NIM tem seu próprio Operator da NVIDIA, Ollama só tem charts comunitários, sem ganchos nativos de autoscaling.
- O licenciamento decide o custo total: vLLM e TGI são gratuitos e open source; NIM adiciona um custo de assinatura por GPU além da própria GPU, em troca de suporte e otimização pronta.
- A observabilidade difere bastante: vLLM e TGI expõem métricas Prometheus prontas de fábrica; NIM se integra à stack de monitoramento DCGM/Base Command da NVIDIA; Ollama tem telemetria embutida mínima.
- Use vLLM para o melhor custo-benefício open source, TGI se já estiver no ecossistema Hugging Face, NIM se precisar de suporte do fabricante e puder pagar, e reserve o Ollama para prototipagem.
📍 Em uma frase
Para serving corporativo de LLM multi-GPU, vLLM e Hugging Face TGI são as duas opções open source prontas para produção, NVIDIA NIM é a alternativa paga e pronta para uso, e Ollama é feito para um único usuário, não para multi-tenant.
💬 Em termos simples
Rodar um modelo de IA no seu notebook é um problema diferente de atender centenas de funcionários ou clientes a partir de um pool de GPU compartilhado. vLLM e TGI são softwares gratuitos feitos para o segundo problema. O NVIDIA NIM faz o mesmo trabalho como produto pago e já empacotado, com suporte da NVIDIA por trás. O Ollama, a ferramenta que a maioria usa para testar um modelo localmente, não foi projetado para tantos usuários simultâneos.
O que é um servidor de inferência LLM corporativo?
Um servidor de inferência LLM corporativo é a camada de software que recebe requisições concorrentes de muitos usuários ou aplicações e as roteia eficientemente por um pool de GPU compartilhado. Isso é diferente de um runtime de um único usuário, que carrega um modelo para um único processo em uma única máquina.
Três coisas separam um software de serving de nível corporativo de uma ferramenta de notebook: continuous batching (agrupar várias requisições em andamento no mesmo passo de GPU), paralelismo multi-GPU (dividir um modelo entre várias GPUs ou nós), e uma superfície de API de produção (health checks, métricas, ganchos de autoscaling) que um time de plataforma consegue operar dentro do Kubernetes.
vLLM, Hugging Face TGI e NVIDIA NIM foram construídos desde o início em torno desses três requisitos. O Ollama, construído sobre o llama.cpp, foi projetado para portabilidade e simplicidade em uma única máquina -- um objetivo diferente e válido, mas não o mesmo. Veja nossa comparação de motores para um único usuário se a pergunta real for "o que instala mais fácil no meu PC" -- este guia cobre o outro extremo dessa decisão.
Comparativo: vLLM vs TGI vs NVIDIA NIM vs Ollama
| Capacidade | vLLM | TGI | NVIDIA NIM | Ollama |
|---|---|---|---|---|
| Licença | Apache 2.0 / Gratuito | Apache 2.0 / Gratuito | NVIDIA AI Enterprise / Pago | MIT / Gratuito |
| Feito para | Serving de GPU alto throughput | Serving de produção nativo HF | Stack corporativo NVIDIA pronto | Um usuário, não multi-tenant |
| Multi-GPU | Tensor + pipeline paralelo | Tensor paralelo | Tensor paralelo (TensorRT-LLM) | Só um nó |
| Continuous batching | Sim (PagedAttention) | Sim (roteador Rust) | Sim (backend Triton) | Limitado / experimental |
| Quantização | GPTQ / AWQ / FP8 / INT4 | GPTQ / AWQ / bitsandbytes | FP8 / INT4 (TensorRT-LLM) | GGUF Q4-Q8 |
| Deploy Kubernetes | Helm chart / KServe | Helm chart oficial da HF | NIM Operator (oficial) | Só charts da comunidade |
| Modelo de suporte | Comunidade / GitHub | Comunidade + contratos HF | Suporte NVIDIA com SLA | Só comunidade |
| Observabilidade | Métricas Prometheus embutidas | Prometheus + traces OTel | NVIDIA DCGM + Prometheus | Mínima / nenhuma embutida |
Entendendo o vLLM: o líder open source em throughput
vLLM é um servidor de inferência open source (Apache 2.0) construído especificamente para serving multi-GPU de alto throughput. Surgiu do Sky Computing Lab da UC Berkeley e é uma das engines open source mais implantadas para APIs de LLM em produção.
- PagedAttention: gerencia o cache KV em blocos de tamanho fixo em vez de uma alocação contígua por requisição, o que eleva a utilização de memória de GPU alcançável e permite mais requisições concorrentes compartilhando uma GPU.
- Continuous batching: novas requisições entram em um batch já em execução em vez de esperar o batch atual terminar, mantendo a utilização de GPU alta sob tráfego variável.
- Multi-GPU e multi-node: o paralelismo tensor divide as camadas de um modelo entre GPUs de um nó; o paralelismo de pipeline divide entre nós para modelos grandes demais para a VRAM combinada de um nó.
- Quantização: formatos GPTQ, AWQ, FP8 e INT4 reduzem o consumo de VRAM por réplica, aumentando o número de réplicas simultâneas que uma frota fixa de GPUs comporta.
- API compatível com OpenAI:
vllm serve <model>expõe um substituto direto da API OpenAI Chat Completions, minimizando o trabalho de integração no lado da aplicação. - vLLM traz um Helm chart oficial e se integra ao KServe para serving de modelos nativo do Kubernetes, com autoscaling orientado por profundidade de fila de requisições ou utilização de GPU.
# Servir um modelo com paralelismo tensor em 4 GPUs
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 8000Entendendo o Hugging Face TGI: a opção nativa Hugging Face
Hugging Face Text Generation Inference (TGI) é um servidor de inferência open source (Apache 2.0) construído pela Hugging Face para deploy em produção de modelos hospedados no Hugging Face Hub. Ele alimenta o próprio produto Inference Endpoints da Hugging Face, então já roda tráfego em escala corporativa em produção.
- Roteador de requisições em Rust: gerencia filas e continuous batching com menos overhead por requisição do que um roteador puramente em Python.
- Flash Attention e Paged Attention: TGI adotou as mesmas técnicas de eficiência de memória do vLLM, fechando a maior parte da diferença de throughput entre os dois em hardware comparável.
- Paralelismo tensor: divide um modelo entre várias GPUs de um nó; serving multi-node é suportado, mas com menos ferramental próprio do que o vLLM.
- Quantização: formatos bitsandbytes, GPTQ, AWQ e EETQ.
- Integração nativa com o Hugging Face Hub: baixar um modelo, seu tokenizer e pesos safetensors não exige nenhuma conversão manual se o modelo já estiver hospedado no Hub.
- Nota sobre licença: o TGI foi brevemente distribuído sob uma licença mais restritiva escrita pela própria Hugging Face (HFOILv2) em 2023-2024 antes de voltar para Apache 2.0 -- confirme a versão de licença fixada no seu manifesto de deploy, já que uma imagem antiga em cache ainda pode carregar o marcador restritivo.
Entendendo o NVIDIA NIM: a opção com suporte do fabricante
NVIDIA NIM (NVIDIA Inference Microservices) é um container pago e pré-construído que empacota a engine de inferência TensorRT-LLM da NVIDIA atrás de uma API padronizada, vendido como parte da assinatura NVIDIA AI Enterprise. Ele troca a configuração manual do vLLM e do TGI por um deploy respaldado e já otimizado.
- Containers otimizados com TensorRT-LLM: a NVIDIA pré-compila e ajusta os kernels de inferência por modelo e por geração de GPU (H100, A100, L40S), o que costuma render o maior throughput por GPU das quatro opções especificamente em hardware NVIDIA.
- Suporte e SLA respaldados pela NVIDIA: o diferencial em relação às opções open source -- um caminho de tickets de suporte e compromissos de disponibilidade que um time de plataforma pode colocar em contrato com o fornecedor.
- NIM Operator para Kubernetes: o operador próprio da NVIDIA baseado em Helm para implantar, escalar e gerenciar containers NIM em um cluster, incluindo integração com a própria stack de monitoramento da NVIDIA (DCGM Exporter, Base Command).
- Catálogo de modelos: a NVIDIA mantém um conjunto curado de modelos de pesos abertos pré-empacotados como containers NIM prontos para uso, além de um caminho para empacotar modelos afinados próprios.
- A contrapartida é o lock-in de fornecedor e o custo de licença: o NIM só roda eficientemente em GPUs NVIDIA, e a assinatura é cobrada por GPU e por ano, além do custo do próprio hardware -- confirme os preços atuais diretamente com a NVIDIA AI Enterprise antes de orçar, já que os preços de assinatura de software corporativo mudam sem muito aviso público.
Por que o Ollama não é um motor de serving corporativo
O Ollama não foi feito para serving corporativo multi-tenant, e isso é uma decisão de design, não um defeito. O Ollama empacota o llama.cpp com uma API REST simples e download de modelo em um único comando, otimizado para um desenvolvedor rodando um modelo em uma máquina.
- Concorrência: o Ollama adicionou tratamento básico de requisições paralelas, mas não tem continuous batching nem gerenciamento de memória no estilo PagedAttention, então o throughput degrada mais rápido sob muitos usuários simultâneos do que o vLLM ou o TGI na mesma GPU.
- Multi-GPU: o Ollama consegue dividir um modelo grande entre GPUs de uma máquina, mas não tem serving nativo tensor-paralelo ou multi-node comparável ao do vLLM.
- Kubernetes: só existem Helm charts mantidos pela comunidade; não há operador Kubernetes próprio, integração com autoscaler ou contrato de suporte do fabricante.
- Observabilidade: métricas embutidas mínimas -- sem endpoint Prometheus por padrão, ao contrário do vLLM e do TGI.
- Onde o Ollama ainda é a ferramenta certa em uma empresa: notebooks de desenvolvedores, um protótipo departamental com pouco tráfego interno, ou um dispositivo de edge isolado atendendo um usuário por vez. Assim que o tráfego exigir concorrência multi-tenant, migre para vLLM, TGI ou NIM -- veja configurações multi-GPU para LLMs locais para o lado de hardware dessa mudança.
Decisões de arquitetura: um nó vs multi-node
A primeira decisão de arquitetura é um único nó versus multi-node, e ela é definida por o modelo caber ou não na memória de GPU combinada de um nó, não apenas pelo volume de tráfego.
- Um nó, multi-GPU: use paralelismo tensor (
--tensor-parallel-sizeno vLLM,--num-shardno TGI) para dividir as camadas de um modelo entre as GPUs de um servidor. É o padrão para modelos que cabem na VRAM combinada de um nó. - Multi-node: adicione paralelismo de pipeline assim que um modelo exceder a memória de GPU de um nó, ou o volume de requisições exceder o que o paralelismo tensor em um nó consegue atender. O vLLM suporta isso via Ray; o NIM via seus próprios templates de deploy multi-node.
- Balanceamento de carga: um balanceador round-robin simples funciona para réplicas de tamanho idêntico, mas o roteamento consciente do cache KV -- enviar uma requisição de continuação da mesma conversa de volta para a réplica que já tem seu contexto em cache -- reduz a latência de forma significativa em cargas de trabalho tipo chat.
- Roteamento de modelos: empresas que rodam mais de um modelo (por exemplo, um modelo de código e um modelo de chat geral) costumam manter pools de réplicas separados por modelo atrás de uma camada de roteamento, em vez de um pool compartilhado -- a memória de GPU não se divide de forma limpa o suficiente entre modelos muito diferentes para justificar a complexidade.
- Autoscaling: escale pela profundidade da fila de requisições ou pela utilização de GPU, não pela CPU (o padrão clássico do HPA do Kubernetes) -- a utilização de CPU de um pod de inferência em GPU mal se move independente da carga. O KEDA com uma métrica Prometheus customizada é o padrão comum para vLLM/TGI; o Operator do NIM já cabeia isso como parte do produto. Veja escalando LLMs locais para empresas para o planejamento de capacidade mais amplo por trás disso.
Como implantar um stack de inferência multi-GPU
Implantar um stack de inferência corporativo segue uma sequência fixa: definir o SLA, dimensionar a frota, escolher a engine, e então conectar deploy, roteamento e observabilidade em torno disso.
- 1Defina seu SLA de latência e concorrência antes de escolher o hardware.
- 2Dimensione a frota de GPU pelo consumo de VRAM do modelo e pela meta de requisições concorrentes, não apenas pela contagem de parâmetros do modelo.
- 3Escolha a engine de serving -- vLLM ou TGI para flexibilidade open source, NIM para deploy pronto com suporte do fabricante.
- 4Containerize a engine e implante via Helm (ou o NIM Operator) no seu cluster Kubernetes.
- 5Configure paralelismo tensor dentro de um nó e paralelismo de pipeline entre nós, se o modelo exigir.
- 6Configure balanceamento de carga consciente do cache KV ou round-robin na frente do pool de réplicas.
- 7Conecte o autoscaling à profundidade da fila de requisições ou à utilização de GPU, não à CPU.
- 8Adicione observabilidade Prometheus/OpenTelemetry e faça teste de carga na concorrência alvo antes de ir para produção.
Licenciamento e modelo de suporte comparados
O licenciamento é o item que mais muda o custo total de propriedade entre essas quatro opções. vLLM e Hugging Face TGI são ambos licenciados sob Apache 2.0 e gratuitos em qualquer escala -- você paga apenas pela infraestrutura de GPU subjacente. NVIDIA NIM adiciona uma assinatura por GPU e por ano além do custo da própria GPU, em troca de performance otimizada com TensorRT-LLM e um contrato de suporte do fabricante -- confirme os preços atuais por GPU diretamente com a NVIDIA, já que preços de assinatura de software corporativo não são publicados como os de um produto de varejo. Ollama é licenciado sob MIT e gratuito, com suporte limitado à sua comunidade no GitHub e Discord -- não existe um nível de suporte corporativo pago até o momento.
O modelo de suporte importa tanto quanto o custo de licença para um sistema em produção: o suporte de vLLM e TGI vem de issues no GitHub e canais comunitários (rápido em problemas populares, sem SLA), o NIM vem com um contrato de suporte da NVIDIA e compromissos de disponibilidade, e o Ollama não tem nenhum caminho de suporte além dos canais comunitários.
Pontos de observabilidade para serving em produção
**vLLM e TGI expõem de fábrica um endpoint /metrics compatível com Prometheus, cobrindo latência de requisição, profundidade de fila, utilização de cache KV de GPU e throughput de tokens.** Conecte isso a uma stack Prometheus/Grafana existente para dashboards de nível de produção sem instrumentação customizada.
NVIDIA NIM se integra à própria stack de monitoramento da NVIDIA -- DCGM Exporter para métricas em nível de GPU (utilização, memória, temperatura, erros ECC) e Base Command Manager para visibilidade em nível de frota -- um encaixe mais forte se o resto da infraestrutura já for centrada em NVIDIA.
Ollama tem telemetria embutida mínima: sem endpoint Prometheus por padrão, consistente com seu design de único usuário, mas uma lacuna real se você tentar operá-lo como infraestrutura compartilhada e precisar ver latência por requisição entre muitos usuários simultâneos.
Qual servidor de inferência escolher?
Melhor escolha geral open source: vLLM -- maior adoção pela comunidade, ferramental multi-GPU mais amplo, ritmo de desenvolvimento ativo.
Melhor escolha se já usa Hugging Face: TGI -- integração nativa com o Hub, paridade com Inference Endpoints oficial.
Melhor escolha se precisa de suporte do fabricante: NVIDIA NIM -- respaldado por SLA, pronto para uso, a um custo de assinatura.
Não para tráfego de produção multi-tenant: Ollama -- reserve para máquinas de desenvolvedores e deploys de edge de único usuário.
- 🧭 Time de plataforma rodando uma API LLM interna compartilhada para vários times → vLLM ou TGI, auto-hospedados no Kubernetes.
- 🧭 Empresa regulada precisando de contrato de suporte e trilha de auditoria → NVIDIA NIM.
- 🧭 Time já padronizado no Hugging Face Hub para hospedar modelos → TGI.
- 🧭 Desenvolvedores construindo uma prova de conceito antes da infraestrutura ser provisionada → Ollama, migrando para vLLM/TGI assim que o tráfego concorrente for real.
- ❌ Se você espera mais que um punhado de usuários concorrentes, não coloque o Ollama atrás de um endpoint de produção compartilhado -- use vLLM ou TGI.
- ❌ Se precisa de autoscaling nativo do Kubernetes por carga de requisições, o Ollama não tem equivalente ao scaling por profundidade de fila do KEDA -- use vLLM, TGI ou NIM.
Erros comuns ao dimensionar infraestrutura de inferência corporativa
- Dimensionar GPUs pela contagem de parâmetros em vez da contagem de requisições concorrentes. Uma frota de GPU dimensionada só para uma cópia do modelo caber na VRAM não tem margem para usuários concorrentes -- dimensione pela concorrência de pico e depois verifique se o modelo ainda cabe.
- Implantar o Ollama atrás de um load balancer de produção compartilhado. Funciona em uma demo com dois usuários; não aguenta em um design pensado para centenas.
- Escalar pela utilização de CPU. Pods de inferência em GPU mal movem a CPU independente da carga -- escale pela profundidade da fila ou pela utilização de GPU.
- Ignorar a checagem de licença em imagens antigas do TGI em cache. Confirme se a tag de imagem baixada corresponde à versão Apache 2.0, não a um build da era HFOILv2 em cache.
- Orçar o NIM sem confirmar os preços atuais por GPU diretamente com a NVIDIA. Preços de assinatura de software corporativo mudam; uma cotação antiga não é base de orçamento.
Fontes
- Documentação do vLLM -- Docs oficiais do vLLM: PagedAttention, continuous batching e guias de deploy multi-GPU/multi-node.
- Hugging Face Text Generation Inference (GitHub) -- Repositório oficial do TGI: arquitetura, formatos de quantização suportados e histórico de licença.
- Documentação do NVIDIA NIM -- Docs oficiais do NIM: modelos suportados, backend TensorRT-LLM e o NIM Operator para Kubernetes.
- Ollama GitHub -- Repositório oficial do Ollama e rastreador de issues, referenciado para comportamento de concorrência e deploy.
- NVIDIA AI Enterprise -- Página de produto da NVIDIA para a assinatura AI Enterprise sob a qual o NIM é distribuído.
Perguntas frequentes
Qual é a diferença entre vLLM e NVIDIA NIM?
vLLM é um servidor de inferência gratuito e open source (Apache 2.0) que você auto-hospeda e opera. NVIDIA NIM é um container pago e pré-construído da NVIDIA que empacota a engine TensorRT-LLM, vendido com uma assinatura NVIDIA AI Enterprise por GPU e suporte do fabricante. O NIM costuma atingir o maior throughput por GPU em hardware NVIDIA porque a NVIDIA pré-ajusta os kernels de inferência; o vLLM dá mais controle e nenhuma taxa de licença, ao custo de você mesmo fazer esse ajuste e suporte.
O Ollama pode ser usado para serving de inferência multiusuário corporativo?
Não recomendado para tráfego de produção multi-tenant. O Ollama não tem continuous batching nem gerenciamento de memória no estilo PagedAttention, e não tem autoscaling nativo do Kubernetes, então degrada mais rápido sob carga concorrente do que vLLM, TGI ou NIM na mesma GPU. Ele encaixa bem em máquinas de desenvolvedores, dispositivos de edge de único usuário, ou protótipos internos de baixo tráfego.
Vale a pena o custo de licença do NVIDIA NIM frente ao vLLM ou TGI open source?
Depende de se o contrato de suporte do fabricante e o throughput pré-otimizado valem o custo da assinatura para você, versus manter a infraestrutura gratuita e operá-la você mesmo. Empresas reguladas que precisam de trilha de auditoria e SLA costumam justificar o custo; times com expertise interna em infraestrutura de ML costumam obter throughput comparável com vLLM ou TGI sem custo de licença.
Como escalar a inferência de LLM entre várias GPUs e nós?
Use paralelismo tensor para dividir as camadas de um modelo entre as GPUs de um mesmo nó, e paralelismo de pipeline para dividir entre vários nós assim que o modelo exceder a memória de GPU combinada de um nó. O vLLM suporta ambos nativamente (multi-node via Ray); o TGI suporta paralelismo tensor nativamente, com menos ferramental multi-node próprio; o NIM suporta ambos através dos próprios templates multi-node da NVIDIA.
Quais formatos de quantização cada servidor de inferência suporta?
O vLLM suporta GPTQ, AWQ, FP8 e INT4. O TGI suporta bitsandbytes, GPTQ, AWQ e EETQ. O NVIDIA NIM usa a quantização FP8 e INT4 própria do TensorRT-LLM, ajustada por geração de GPU. O Ollama usa o formato GGUF em precisão Q4 a Q8, voltado à economia de memória em uma única máquina em vez de throughput multiusuário.
Como implantar vLLM ou TGI no Kubernetes?
Ambos oferecem imagens de container implantáveis e Helm charts -- o vLLM também se integra ao KServe para serving de modelos nativo do Kubernetes, e o TGI tem um Helm chart oficial da Hugging Face. Configure resource requests de acordo com sua alocação de GPU, ajuste o autoscaling pela profundidade da fila ou utilização de GPU em vez de CPU, e adicione um ServiceMonitor do Prometheus para ler o endpoint de métricas embutido.
O que é continuous batching e por que importa para serving corporativo?
Continuous batching permite que novas requisições entrem em um batch de GPU já em execução, em vez de esperar o batch atual terminar antes de iniciar um novo. Isso mantém a utilização de GPU alta sob padrões de tráfego real irregulares, por isso é padrão no vLLM, TGI e no backend TensorRT-LLM do NIM, e é uma das maiores diferenças de throughput frente a uma ferramenta de único usuário como o Ollama.
Qual servidor de inferência tem a melhor observabilidade?
vLLM e TGI expõem de fábrica um endpoint de métricas compatível com Prometheus, cobrindo latência, profundidade de fila e utilização de cache KV de GPU -- um encaixe direto com uma stack Prometheus/Grafana existente. NVIDIA NIM se integra ao DCGM Exporter e ao Base Command Manager da NVIDIA, um encaixe mais forte para infraestrutura centrada em NVIDIA. Ollama tem telemetria embutida mínima e nenhum endpoint de métricas por padrão.
Vários modelos precisam de frotas de GPU separadas, ou podem compartilhar um mesmo pool?
Na prática, empresas rodando mais de um modelo costumam manter pools de réplicas separados por modelo em vez de compartilhar um pool, porque a memória de GPU não se divide de forma limpa entre modelos de tamanhos muito diferentes. Roteie as requisições para o pool correto na camada de aplicação ou gateway, em vez de tentar colocar vários modelos nas mesmas réplicas de GPU.
Como o licenciamento difere entre vLLM, TGI e NVIDIA NIM?
vLLM e Hugging Face TGI são ambos licenciados sob Apache 2.0 e gratuitos em qualquer escala -- você paga apenas pela infraestrutura de GPU subjacente. O NVIDIA NIM exige uma assinatura paga NVIDIA AI Enterprise, cobrada por GPU e por ano, além do custo do hardware de GPU; confirme os preços atuais diretamente com a NVIDIA em vez de confiar em uma cotação anterior. O Ollama é licenciado sob MIT e gratuito, com suporte apenas comunitário.