Como dimensionar GPU para inferência de modelos de IA

/* ── Base ── */
*, *::before, *::after { box-sizing: border-box; }
:root {
–orange: #F47721;
–orange-lt: #FF9A45;
–dark: #0F1117;
–text: #1A1D2E;
–text2: #4A5070;
–card: #F8F9FC;
–border:#D8DCE8;
–green: #1A7F4B;
–yellow:#8B6A00;
–red: #B91C1C;
–blue: #1D4ED8;
–radius:8px;
–font: -apple-system, BlinkMacSystemFont, “Segoe UI”, system-ui, sans-serif;
–mono: “SF Mono”, “Fira Code”, Menlo, Consolas, monospace;
}
body { font-family: var(–font); color: var(–text); line-height: 1.65; max-width: 780px; margin: 0 auto; padding: 0 20px 80px; }

/* Typography */
h1 { font-size: 2rem; font-weight: 800; line-height: 1.2; margin: 0 0 .5rem; text-wrap: balance; }
h2 { font-size: 1.3rem; font-weight: 700; margin: 2.5rem 0 .75rem; padding-top: .25rem; line-height: 1.3; }
h3 { font-size: 1.05rem; font-weight: 700; margin: 1.75rem 0 .5rem; color: var(–text); }
p { margin: 0 0 1rem; }
ul, ol { margin: 0 0 1rem; padding-left: 1.4rem; }
li { margin-bottom: .4rem; }
strong { font-weight: 700; }
code { font-family: var(–mono); font-size: .85em; background: #EEF0F8; padding: 1px 5px; border-radius: 3px; }
a { color: var(–orange); text-decoration: none; }
a:hover { text-decoration: underline; }

/* Breadcrumb */
.breadcrumb { font-size: .78rem; color: var(–text2); margin-bottom: 1.5rem; }
.breadcrumb a { color: var(–text2); }
.breadcrumb span { margin: 0 .4rem; }

/* Meta */
.meta-bar { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; font-size: .78rem; color: var(–text2); margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 1px solid var(–border); }
.meta-bar .author { font-weight: 600; color: var(–text); }

/* Lead / chapeau */
.lead { font-size: 1.1rem; color: var(–text2); line-height: 1.65; margin-bottom: 1.5rem; }

/* CTA box */
.cta-box {
background: linear-gradient(135deg, #FFF3E8 0%, #FFF8F0 100%);
border: 1px solid rgba(244,119,33,.3); border-left: 4px solid var(–orange);
border-radius: var(–radius); padding: 18px 20px; margin: 2rem 0;
}
.cta-box p { margin: 0 0 .5rem; font-size: .9rem; }
.cta-box p:last-child { margin: 0; }
.cta-btn {
display: inline-block; background: var(–orange); color: #fff;
padding: 10px 20px; border-radius: 6px; font-weight: 700; font-size: .88rem;
text-decoration: none; margin-top: 10px;
}
.cta-btn:hover { background: #D96A1E; text-decoration: none; }

/* TOC */
.toc {
background: var(–card); border: 1px solid var(–border);
border-radius: var(–radius); padding: 18px 22px; margin: 2rem 0;
}
.toc h2 { margin: 0 0 .75rem; font-size: 1rem; }
.toc ol { margin: 0; padding-left: 1.2rem; }
.toc li { margin-bottom: .3rem; font-size: .88rem; }
.toc a { color: var(–text2); }

/* Tables */
.tbl-wrap { overflow-x: auto; margin: 1.5rem 0; border-radius: var(–radius); border: 1px solid var(–border); }
table { width: 100%; border-collapse: collapse; font-size: .85rem; }
th { background: #EEF0F8; padding: 9px 12px; text-align: left; font-weight: 700; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; color: var(–text2); border-bottom: 1px solid var(–border); white-space: nowrap; }
td { padding: 9px 12px; border-bottom: 1px solid var(–border); vertical-align: top; }
tbody tr:last-child td { border-bottom: none; }
tbody tr:nth-child(even) td { background: #FAFBFE; }
td.num { font-variant-numeric: tabular-nums; text-align: right; font-family: var(–mono); font-size: .82rem; }
.ok { color: var(–green); font-weight: 700; }
.warn { color: var(–yellow); font-weight: 700; }
.no { color: var(–red); font-weight: 700; }

/* Callouts */
.note {
padding: 13px 16px; border-radius: var(–radius); margin: 1.5rem 0;
display: flex; gap: 10px; align-items: flex-start; font-size: .88rem; line-height: 1.55;
}
.note-warn { background: #FFFBEB; border-left: 4px solid #D97706; }
.note-info { background: #EFF6FF; border-left: 4px solid #3B82F6; }
.note-tech { background: #F0FDF4; border-left: 4px solid #16A34A; }
.note span:first-child { font-size: 1.1rem; flex-shrink: 0; }
.note p { margin: 0; }

/* Checklist */
.checklist { list-style: none; padding: 0; }
.checklist li { padding: .4rem 0 .4rem 1.8rem; position: relative; border-bottom: 1px solid var(–border); font-size: .9rem; }
.checklist li::before { content: “✓”; position: absolute; left: 0; color: var(–green); font-weight: 700; }
.checklist li:last-child { border-bottom: none; }

/* Formula box */
.formula {
background: #F0F4FF; border: 1px solid #C7D2FE;
border-radius: var(–radius); padding: 14px 18px; margin: 1.5rem 0;
font-family: var(–mono); font-size: .9rem; line-height: 1.8;
}
.formula .label { font-family: var(–font); font-size: .78rem; text-transform: uppercase; letter-spacing: .06em; color: var(–text2); font-weight: 700; margin-bottom: 8px; display: block; }

/* Scenario cards */
.scenario-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; margin: 1.5rem 0; }
.scenario-card { background: var(–card); border: 1px solid var(–border); border-radius: var(–radius); padding: 14px 16px; }
.scenario-card .name { font-weight: 700; font-size: .9rem; color: var(–text); margin-bottom: 8px; border-bottom: 1px solid var(–border); padding-bottom: 6px; }
.scenario-card .row { display: flex; justify-content: space-between; font-size: .8rem; padding: 3px 0; color: var(–text2); }
.scenario-card .row strong { color: var(–text); }
.scenario-card .gpu-rec { margin-top: 8px; padding: 5px 10px; background: rgba(244,119,33,.1); border-radius: 4px; font-size: .8rem; font-weight: 700; color: var(–orange); text-align: center; }

/* FAQ */
.faq { margin: 1.5rem 0; }
.faq-item { border-bottom: 1px solid var(–border); }
.faq-q { font-weight: 700; font-size: .95rem; padding: 14px 0 10px; color: var(–text); cursor: pointer; display: flex; justify-content: space-between; align-items: center; }
.faq-q::after { content: “+”; font-size: 1.2rem; color: var(–orange); flex-shrink: 0; }
.faq-item.open .faq-q::after { content: “−”; }
.faq-a { display: none; font-size: .88rem; color: var(–text2); padding-bottom: 14px; line-height: 1.6; }
.faq-item.open .faq-a { display: block; }

/* Section divider */
.divider { border: none; border-top: 1px solid var(–border); margin: 2rem 0; }

/* Source note */
.source { font-size: .72rem; color: var(–text2); margin-top: -.5rem; margin-bottom: 1rem; }

/* Related */
.related-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 1.5rem 0; }
.related-card { border: 1px solid var(–border); border-radius: var(–radius); padding: 12px 14px; }
.related-card a { font-weight: 600; font-size: .9rem; color: var(–text); display: block; margin-bottom: 4px; }
.related-card span { font-size: .78rem; color: var(–text2); }

@media (max-width: 600px) {
h1 { font-size: 1.5rem; }
.related-grid { grid-template-columns: 1fr; }
.scenario-grid { grid-template-columns: 1fr; }
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
:root:not([data-theme=”light”]) {
–text: #E8ECF5; –text2: #9AA0BC; –card: #1C2030;
–border: #2A2F45; –dark: #0F1117;
}
body { background: #0F1117; }
code { background: #22273A; }
th { background: #1C2030; }
tbody tr:nth-child(even) td { background: rgba(255,255,255,.02); }
.toc { background: #1C2030; }
.note-warn { background: #2D2000; }
.note-info { background: #0A1628; }
.note-tech { background: #0A1F12; }
.formula { background: #0D1530; border-color: #2A3A6A; }
.scenario-card { background: #1C2030; }
.related-card { background: #1C2030; }
.cta-box { background: linear-gradient(135deg, #2D1A08 0%, #3D2410 100%); }
}
[data-theme=”light”] body { background: #fff; }
[data-theme=”dark”] body { background: #0F1117; }

Como dimensionar GPU para inferência de modelos de IA

Por [Autor]
·
Revisão técnica: [Revisor]
·
Publicado em agosto de 2026
·
Atualizado em agosto de 2026
·
⏱ 14 min de leitura

Inferência é o uso real do modelo: cada resposta gerada, cada embedding calculado, cada classificação feita. O dimensionamento correto da GPU define se a aplicação responde em menos de um segundo ou trava sob carga. Esta página explica como calcular VRAM, contexto, KV cache, usuários simultâneos e throughput — sem inventar benchmarks.

Tem um projeto de inferência em andamento?

Informe modelo, número de usuários e carga esperada para receber uma estimativa inicial de GPU e infraestrutura de suporte.

Solicitar estimativa de GPU


1. O que é inferência de IA

Inferência é a etapa em que um modelo treinado executa predições sobre dados novos. Em LLMs (modelos de linguagem de grande porte), cada vez que um usuário envia uma mensagem e recebe uma resposta, o modelo está executando inferência. Em visão computacional, é o momento em que uma imagem é classificada ou um objeto é detectado.

Do ponto de vista de infraestrutura, inferência é diferente do treinamento em três aspectos críticos:

  • Carga imprevisível: o treinamento tem carga constante e previsível; a inferência depende do comportamento dos usuários.
  • Latência importa: usuários esperam resposta em milissegundos a poucos segundos; o treinamento pode durar horas.
  • Modelo fixo em execução: os pesos do modelo ficam carregados na VRAM o tempo todo; isso define o piso de memória independentemente da carga.
ℹ️

Escopo desta página: LLMs autogressivos (geração de texto) e modelos de embedding. Visão computacional e outros domínios compartilham os princípios de VRAM e GPU, mas têm métricas específicas não cobertas aqui.

2. Modelo e número de parâmetros

O primeiro fator que determina a GPU necessária é o modelo escolhido — especificamente o número de parâmetros. Parâmetros são os pesos aprendidos durante o treinamento. Cada parâmetro ocupa espaço na VRAM quando o modelo é carregado.

Modelos comuns em inferência corporativa (agosto de 2026):

Modelo Parâmetros Licença Uso típico
Llama 3.1 8B 8B Meta Community License Chat, RAG, classificação
Llama 3.1 70B 70B Meta Community License Chat avançado, raciocínio
Llama 3.1 405B 405B Meta Community License Casos de uso de alta complexidade
Mistral 7B v0.3 7B Apache 2.0 Chat leve, edge
Mixtral 8×7B ~46B ativo: ~13B Apache 2.0 Chat com MoE
Qwen 2.5 72B 72B Apache 2.0 Multilingual, código
Gemma 2 9B 9B Gemma Terms Chat, classificação
DeepSeek-R1 70B 70B MIT Raciocínio

Fonte: repositórios oficiais Hugging Face e Meta AI Research, consultados em agosto de 2026.

⚠️

O número de parâmetros informa o tamanho do modelo, mas não o throughput. Um modelo com 8B parâmetros em FP16 ocupa mais VRAM do que o mesmo modelo em INT4 — e entrega menor throughput por VRAM. A quantização (seção 3) muda o balanço.

3. Quantização e impacto na VRAM

Quantização reduz a precisão numérica dos pesos do modelo, diminuindo o espaço em VRAM e, em geral, aumentando o throughput por unidade de memória. A perda de qualidade varia conforme o método e o modelo.

Precisão Bytes/parâmetro VRAM (7B) VRAM (70B) Impacto na qualidade
FP32 4 bytes ~28 GB ~280 GB Referência (raro em inferência)
BF16 / FP16 2 bytes ~14 GB ~140 GB Sem degradação perceptível
INT8 (GPTQ / bitsandbytes) 1 byte ~7 GB ~70 GB Leve, depende do modelo
Q4_K_M (GGUF) ~0,5 bytes ~4–5 GB ~38–42 GB Moderada — recomendada para edge
Q4_0 / Q2_K <0,5 bytes <4 GB <30 GB Degradação notável em tarefas complexas

Referência: documentação llama.cpp (GGUF quantization), Hugging Face Transformers (bitsandbytes), GPTQ. Valores são estimativas — o modelo específico pode variar ±10%.

Para produção corporativa com LLMs: BF16 quando VRAM permite; INT8 como compromisso razoável; Q4_K_M para cenários com restrição severa de VRAM. Evitar Q2 em aplicações onde qualidade é crítica.

4. Como calcular a VRAM necessária

A VRAM total em uma configuração de inferência tem três componentes:

Fórmula de VRAM para inferência
VRAM total ≈ VRAM dos pesos + VRAM do KV cache + overhead do framework

VRAM dos pesos = parâmetros × bytes_por_parâmetro
(ex.: 8B params × 2 bytes = 16 GB em FP16)

VRAM do KV cache = f(contexto, batch, camadas, dimensão das heads)
(ver seção 5)

Overhead do framework ≈ 1–3 GB (CUDA context, activations, buffers temporários)

Exemplo prático para Llama 3.1 8B em FP16:

Componente Cálculo Resultado
Pesos do modelo 8B × 2 bytes ~16 GB
KV cache (10 usuários, 2k tokens) estimativa (ver seção 5) ~2–4 GB
Overhead do framework vLLM / Ollama ~1–2 GB
Total estimado ~19–22 GB

Estimativa baseada em documentação vLLM e observações públicas da comunidade. Não constitui benchmark oficial.

Conclusão: uma GPU de 16 GB (como a NVIDIA T4) não suporta Llama 3.1 8B em FP16 com folga de KV cache. Seria necessária uma GPU de 24 GB (L4) ou quantização para INT8.

5. Contexto e KV cache

O KV cache (Key-Value cache) armazena os estados de atenção de todos os tokens já processados na conversa. Quanto maior o contexto suportado e mais usuários simultâneos, mais VRAM é consumida pelo KV cache — mesmo que o modelo em si não mude.

Por que o KV cache importa

Em modelos transformer, cada token gerado precisa “ver” todos os tokens anteriores da conversa. O KV cache evita recalcular esses estados a cada novo token. Sem ele, o custo computacional cresceria quadraticamente com o comprimento da conversa. Com ele, cresce linearmente — mas em memória.

Estimativa de VRAM do KV cache por usuário
VRAM_KV ≈ 2 × dtype_bytes × num_layers × num_kv_heads × head_dim × context_length

Exemplo: Llama 3.1 8B, FP16, 32 camadas, 8 KV heads, head_dim 128, 4096 tokens:
≈ 2 × 2 × 32 × 8 × 128 × 4096 ≈ ~537 MB por usuário

Para 20 usuários simultâneos:
20 × 537 MB ≈ ~10,7 GB adicionais

Parâmetros baseados em documentação oficial Llama 3 (Meta AI, 2024). Cálculo é estimativa — frameworks modernos como vLLM usam PagedAttention para gerenciar KV cache de forma mais eficiente.

ℹ️

PagedAttention (vLLM): o vLLM usa uma técnica chamada PagedAttention que gerencia o KV cache em “páginas” de memória, similar à memória virtual em sistemas operacionais. Isso permite utilizar quase 100% da VRAM para KV cache sem desperdiçar blocos reservados antecipadamente — resultado: maior throughput para o mesmo hardware.

6. Usuários simultâneos e batch

O número de usuários simultâneos é a variável que mais impacta os requisitos de VRAM além dos pesos do modelo. Cada usuário com uma conversa ativa mantém seu próprio KV cache na memória.

Concorrência vs. batch

Usuários simultâneos são sessões ativas ao mesmo tempo — cada uma com seu próprio contexto e KV cache. Batch é o agrupamento de múltiplas requisições em uma única passagem pela GPU para aumentar eficiência.

Cenário Usuários simultâneos Contexto médio VRAM KV cache adicional¹
Protótipo interno 1–5 2.048 tokens ~0,5–2 GB
Equipe pequena 10–20 4.096 tokens ~5–12 GB
Departamento 50–100 4.096 tokens ~25–55 GB
Aplicação corporativa 200–500 8.192 tokens >100 GB → múltiplas GPUs

¹ Estimativa para Llama 3.1 8B em FP16 com vLLM. Valores reais dependem do modelo específico e da implementação.

⚠️

Pico de carga: dimensionar para a média é insuficiente. Avalie o percentil 95 de usuários simultâneos nos horários de pico. Um serviço de RH terá pico no início da manhã e horário de almoço; um chatbot B2C terá padrão diferente. Dimensionar para o pico ou implementar filas de espera.

7. Tokens por segundo e latência

Throughput e latência são métricas opostas que precisam ser balanceadas. GPUs com maior largura de banda de memória entregam mais tokens por segundo; frameworks com continuous batching reduzem tempo ocioso.

Métricas principais

Métrica O que mede Meta típica
TTFT (Time to First Token) Tempo até o primeiro token aparecer <500ms para chat interativo
Tokens/s por usuário Velocidade de geração percebida >30 tok/s para leitura confortável
Throughput total Tokens/s para todos os usuários combinados Depende do SLA do serviço
P95 latência Latência no percentil 95 Referência de confiabilidade
⚠️

Benchmarks públicos: existem benchmarks publicados para vLLM, TensorRT-LLM e outros frameworks, mas os resultados variam significativamente conforme modelo, quantização, hardware, versão do software, contexto e carga. Antes de dimensionar para produção, realize seus próprios testes com o modelo e a carga reais. Não use benchmarks de terceiros como contrato de SLA.

Largura de banda de memória e throughput

Em inferência de LLMs com batch pequeno, o gargalo é quase sempre a largura de banda de memória (GB/s), não o poder de computação FLOPS. Isso explica por que uma GPU com memória HBM (como A100/H100) entrega mais throughput em inferência do que uma GPU com mais TFLOPS mas memória GDDR6 com menor banda.

8. CPU, RAM e storage

A GPU é o componente central, mas não é suficiente sozinha. Os demais componentes do servidor influenciam o desempenho da inferência de formas específicas.

CPU

Em inferência com LLMs, a CPU não executa o modelo — a GPU faz isso. A CPU gerencia a fila de requisições, o pré-processamento (tokenização), o pós-processamento (decodificação) e a comunicação de rede. Para a maioria dos cenários, um CPU moderno de 16–32 núcleos é suficiente. Cenários com alta taxa de requisições por segundo (RPS) ou uso de múltiplos modelos em paralelo podem exigir mais núcleos.

RAM (sistema)

A RAM do sistema não é usada para os pesos do modelo em inferência normal — esses ficam na VRAM. A RAM é necessária para:

  • Sistema operacional e frameworks (~4–8 GB base);
  • Buffers de I/O para streaming de respostas;
  • Modelos de embedding ou reranking que rodam em CPU;
  • Offloading parcial em cenários de restrição severa de VRAM (com impacto severo em throughput).

Recomendação mínima: 2× a VRAM total da GPU. Exemplo: servidor com GPU de 48 GB → ao menos 96 GB de RAM do sistema.

Storage

O storage não impacta o throughput de inferência em execução, mas impacta o tempo de carregamento do modelo. Um modelo de 70B em BF16 (~140 GB) carregado de um SSD NVMe PCIe 4.0 (6 GB/s) leva cerca de 23 segundos. Em um HDD, o mesmo processo levaria vários minutos — inaceitável para reinicializações frequentes.

Componente Mínimo para inferência Recomendado Gargalo se ausente
CPU 8 núcleos 16–32 núcleos Fila de requisições / tokenização
RAM 32 GB 2× VRAM total Offloading forçado / crash
Storage SSD SATA NVMe PCIe 4.0 Tempo de carregamento do modelo
Rede 1 GbE 10 GbE+ Latência de entrega do token ao cliente

9. Uma GPU maior ou múltiplas GPUs menores

Quando o modelo não cabe em uma única GPU, existem duas abordagens: distribuir o modelo entre múltiplas GPUs (tensor parallelism ou pipeline parallelism) ou escolher uma GPU com VRAM suficiente.

Quando uma GPU maior é melhor

  • Menor complexidade operacional — sem NVLink ou rede de alta velocidade entre GPUs;
  • Menor latência — sem overhead de comunicação entre GPUs;
  • Frameworks mais simples de configurar e monitorar.

Quando múltiplas GPUs fazem sentido

  • O modelo não cabe em uma única GPU (ex.: Llama 3.1 405B exige múltiplas GPUs);
  • Escalabilidade horizontal de throughput — múltiplas réplicas do mesmo modelo;
  • Redundância — falha de uma GPU não elimina o serviço completamente.
⚠️

Tensor parallelism tem custo de comunicação: dividir um modelo entre 2 GPUs via NVLink pode entregar ~1,7× o throughput de 1 GPU (não 2×) devido ao overhead de comunicação entre as GPUs. Via rede (Ethernet) em vez de NVLink, o overhead é maior ainda. Isso não é uma falha — é o custo esperado do paralelismo.

Seu modelo não cabe em uma GPU?

Dimensione uma infraestrutura dedicada com múltiplas GPUs, NVLink e storage NVMe para sua aplicação de inferência.

Falar com especialista em GPU

10. Frameworks de inferência

O framework de inferência impacta diretamente o throughput, a latência e a complexidade de operação. As principais opções abertas em agosto de 2026:

Framework Melhor para Throughput Complexidade Licença
vLLM Produção, alto throughput, LLMs Alto Média Apache 2.0
Ollama Desenvolvimento, uso interno leve Moderado Baixa MIT
llama.cpp CPU+GPU, GGUF, edge Moderado Baixa MIT
TensorRT-LLM Máximo desempenho em GPUs NVIDIA Muito alto Alta Apache 2.0
Hugging Face TGI Flexibilidade de modelos, API OpenAI-compat. Moderado/Alto Média Apache 2.0

Referências: documentação oficial vLLM (docs.vllm.ai), Ollama (ollama.com), llama.cpp (GitHub), TensorRT-LLM (NVIDIA), Text Generation Inference (Hugging Face), agosto de 2026.

11. GPUs disponíveis para inferência corporativa

GPU VRAM Memória Banda (GB/s) TDP (W) Adequada para
NVIDIA T4 16 GB GDDR6 320 70 7B INT8, 7B Q4, modelos leves
NVIDIA L4 24 GB GDDR6 300 72 7B FP16, 13B INT8, edge eficiente
NVIDIA L40S 48 GB GDDR6 864 350 13B FP16, 34B INT8, 70B Q4
NVIDIA A100 40GB 40 GB HBM2 1.555 400 13B FP16, alto throughput
NVIDIA A100 80GB 80 GB HBM2e 2.000 400 70B FP16, produção exigente
NVIDIA H100 SXM 80 GB HBM3 3.350 700 70B+ FP16, throughput máximo

Fonte: especificações oficiais NVIDIA (nvidia.com/en-us/data-center/), agosto de 2026. TDP pode variar conforme configuração do servidor.

Largura de banda importa mais que TFLOPS em inferência: A100 80GB e H100 têm largura de banda HBM significativamente superior à L40S (GDDR6). Para inferência de LLMs grandes com batch pequeno, isso se traduz em mais tokens por segundo. A L40S se destaca em eficiência energética para modelos menores.

12. Cenários práticos

Chatbot interno — equipe pequena
ModeloLlama 3.1 8B INT8
Usuários simultâneos5–10
Contexto2.048 tokens
VRAM estimada~10–12 GB
NVIDIA L4 (24 GB)

RAG corporativo — departamento
ModeloLlama 3.1 70B INT8
Usuários simultâneos20–50
Contexto4.096 tokens
VRAM estimada~85–110 GB
2× NVIDIA A100 80GB ou 1× H100

API de inferência — SaaS
ModeloMixtral 8×7B FP16
Usuários simultâneos100+
Contexto8.192 tokens
VRAM estimada>100 GB
Múltiplas GPUs / scaling horizontal

Modelo leve — edge / restrição energética
ModeloGemma 2 9B Q4_K_M
Usuários simultâneos1–3
Contexto2.048 tokens
VRAM estimada~6–8 GB
NVIDIA T4 (16 GB) — 70W

⚠️

Premissas dos cenários: os valores acima são estimativas baseadas nos modelos e frameworks citados. Cada modelo tem arquitetura específica que afeta o KV cache. Contexto, batch e versão do framework alteram os resultados. Valide com testes no hardware e modelo reais antes de finalizar o dimensionamento.

13. Escalabilidade e filas

Um serviço de inferência sob carga variável precisa de uma estratégia para lidar com picos sem degradar a qualidade da resposta.

Filas de requisições

Quando o número de requisições simultâneas excede a capacidade de processamento paralelo da GPU, as requisições extras são enfileiradas. Frameworks como vLLM gerenciam isso internamente com continuous batching. O dimensionamento da fila deve considerar o tempo máximo de espera aceitável pelo usuário.

Scaling horizontal

A forma mais direta de escalar inferência é adicionar réplicas do mesmo modelo em GPUs diferentes. Cada réplica atende um conjunto de usuários. Um load balancer distribui as requisições. Essa abordagem exige mais hardware mas mantém a latência previsível.

Scaling vertical

Substituir uma GPU menor por uma maior (ex.: L4 → A100) aumenta tanto o número máximo de usuários simultâneos (mais VRAM para KV cache) quanto o throughput por usuário (maior largura de banda). Tem limite físico — uma GPU tem tamanho máximo de VRAM.

14. Monitoramento em produção

Um serviço de inferência precisa de observabilidade contínua. Os indicadores essenciais:

  • Utilização da GPU (%) — deve ser alta (>80%) sem saturar; utilização próxima a 100% constante indica underprovisioning.
  • VRAM utilizada (GB) — monitorar para evitar OOM (Out of Memory) que derruba o processo.
  • Throughput (tokens/s) — degradação indica problema de software, temperatura ou contenção.
  • TTFT (ms) — aumento indica fila crescendo ou problema de latência na rede.
  • Comprimento da fila — fila crescente é sinal antecipado de necessidade de escala.
  • Temperatura da GPU (°C) — throttling térmico reduz throughput silenciosamente.
  • Erros de CUDA / OOM — indicam dimensionamento insuficiente de VRAM.

Para monitorar métricas de GPU NVIDIA, o ponto de partida é nvidia-smi e a biblioteca DCGM (Data Center GPU Manager), que expõe métricas para Prometheus / Grafana.

15. Checklist de dimensionamento

  • Modelo definido: nome, versão e número de parâmetros confirmados
  • Precisão escolhida: FP16, INT8 ou quantização Q4 — e impacto na qualidade validado
  • VRAM dos pesos calculada: parâmetros × bytes por precisão
  • Contexto máximo definido: quantos tokens por conversa
  • KV cache estimado: usuários simultâneos × contexto × arquitetura do modelo
  • Overhead do framework considerado: +1–3 GB
  • VRAM total calculada: pesos + KV cache + overhead com margem de 15%
  • GPU selecionada com VRAM suficiente
  • CPU: mínimo 16 núcleos para serviços de produção
  • RAM: ao menos 2× VRAM total da GPU
  • Storage: NVMe PCIe 4.0 para tempo de carregamento aceitável
  • Framework definido: vLLM para produção, Ollama para desenvolvimento
  • Pico de carga considerado (P95 de usuários simultâneos)
  • Estratégia de fila ou scaling definida para picos
  • Monitoramento configurado: VRAM, temperatura, throughput, fila, TTFT
  • Testes de carga realizados com modelo e dados reais antes de produção

Pronto para dimensionar sua infraestrutura de GPU?

Compartilhe o modelo, o número de usuários e o contexto esperado. Nossa equipe valida o sizing e apresenta as opções de GPU dedicada disponíveis.

Dimensionar GPU para inferência


Conteúdos relacionados


Perguntas frequentes

Qual GPU mínima para rodar Llama 3 8B em produção?
Depende da precisão e do número de usuários simultâneos. Em FP16, o modelo ocupa cerca de 16 GB de VRAM — uma L4 (24 GB) serve para até ~10 usuários simultâneos com contexto de 2k tokens. Em INT8 (~8 GB), a T4 (16 GB) pode ser suficiente para uso interno leve. Para produção com picos, considere margem de ao menos 20% de VRAM livre.

Posso rodar um modelo de 70B em uma única GPU?
Em FP16, um modelo de 70B ocupa ~140 GB de VRAM — impossível em uma única GPU disponível comercialmente. Em INT8, ~70 GB — possível em dois A100 80GB (160 GB combinados). Em Q4_K_M, ~38–42 GB — possível em uma L40S (48 GB) com pouco espaço para KV cache. A quantização mais agressiva viabiliza a execução, mas pode degradar qualidade em tarefas exigentes.

CPU pode substituir GPU para inferência de LLMs?
Tecnicamente sim, com frameworks como llama.cpp rodando em CPU. Na prática, a geração em CPU é 10–50× mais lenta que em GPU para os mesmos modelos. Para uso pessoal ou desenvolvimento, pode ser aceitável. Para produção com múltiplos usuários e requisitos de latência, CPU é inviável para LLMs maiores que 7B.

O que é TTFT e por que importa?
TTFT (Time to First Token) é o tempo entre o envio da requisição e o aparecimento do primeiro token na resposta. Para chat interativo, valores acima de 1–2 segundos afetam a percepção de qualidade do serviço. O TTFT depende do tamanho do prompt, da carga da GPU e do tamanho do modelo. Frameworks com PagedAttention (como vLLM) ajudam a manter TTFT baixo sob carga.

GPU dedicada ou cloud sob demanda para inferência?
Cloud sob demanda é mais flexível para picos imprevisíveis e fases de desenvolvimento. GPU dedicada tem custo mensal previsível e pode ser mais econômica a partir de ~40–50% de utilização constante — além de oferecer isolamento de dados, performance sem contenção e conformidade regulatória mais simples. Veja o comparativo completo em Cloud GPU vs servidor próprio.

Quantos usuários simultâneos uma L40S suporta com Llama 70B Q4?
O modelo Llama 3.1 70B em Q4_K_M ocupa ~38–42 GB, deixando ~6–10 GB para KV cache em uma L40S de 48 GB. Com contexto de 2.048 tokens, isso suporta estimativamente 10–15 usuários simultâneos. Esses valores são estimativas — o número real depende da versão exata do modelo, do framework e do contexto médio real. Sempre realize testes com carga real antes de confirmar o dimensionamento.

{
“@context”: “https://schema.org”,
“@graph”: [
{
“@type”: “Article”,
“headline”: “Como dimensionar GPU para inferência de modelos de IA”,
“description”: “Como calcular VRAM, contexto, KV cache e usuários simultâneos para dimensionar GPU de inferência. Tabelas por modelo, cenários práticos e checklist.”,
“url”: “https://adentro.com.br/gpu-para-inferencia/”,
“datePublished”: “2026-08-05”,
“dateModified”: “2026-08-05”,
“publisher”: {
“@type”: “Organization”,
“name”: “Adentro”,
“url”: “https://adentro.com.br”
},
“inLanguage”: “pt-BR”
},
{
“@type”: “BreadcrumbList”,
“itemListElement”: [
{“@type”:”ListItem”,”position”:1,”name”:”Adentro”,”item”:”https://adentro.com.br”},
{“@type”:”ListItem”,”position”:2,”name”:”Blog”,”item”:”https://adentro.com.br/blog/”},
{“@type”:”ListItem”,”position”:3,”name”:”Infraestrutura para IA”,”item”:”https://adentro.com.br/infraestrutura-para-inteligencia-artificial/”},
{“@type”:”ListItem”,”position”:4,”name”:”GPU para inferência”,”item”:”https://adentro.com.br/gpu-para-inferencia/”}
]
},
{
“@type”: “FAQPage”,
“mainEntity”: [
{
“@type”: “Question”,
“name”: “Qual GPU mínima para rodar Llama 3 8B em produção?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Em FP16, o modelo ocupa cerca de 16 GB de VRAM — uma L4 (24 GB) serve para até ~10 usuários simultâneos com contexto de 2k tokens. Em INT8, a T4 (16 GB) pode ser suficiente para uso interno leve.”
}
},
{
“@type”: “Question”,
“name”: “Posso rodar um modelo de 70B em uma única GPU?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Em FP16 é impossível com GPUs atuais. Em INT8 (~70 GB), são necessários dois A100 80GB. Em Q4_K_M (~38–42 GB), uma L40S (48 GB) pode servir com pouco espaço para KV cache.”
}
},
{
“@type”: “Question”,
“name”: “GPU dedicada ou cloud sob demanda para inferência?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Cloud sob demanda é mais flexível para picos e desenvolvimento. GPU dedicada tem custo previsível e pode ser mais econômica com utilização constante acima de 40–50%, além de oferecer isolamento de dados e conformidade mais simples.”
}
}
]
}
]
}

document.querySelectorAll(‘.faq-q’).forEach(q => {
q.addEventListener(‘click’, () => {
q.parentElement.classList.toggle(‘open’);
});
});

Na mídia

Histórias de sucesso

Solicitar contato

Converse com time de vendas!

Ajudamos sua empresa a modernizar continuamente sua infraestrutura de TI, garantir a resiliência dos seus dados e conduzir uma migração segura e estratégica para a nuvem.

Your benefits:
O que acontece a seguir?
1

Reunião para entender seu desafio

2

Realizaremos um diagnóstico do seu ambiente de TI

3

Apresentação da proposta e criação de ambiente de teste

Falar com especialista em soluções de TI
v3 Solicitar contato v3 (#18) (#20)
+55