Phase 17 - Lesson 08
Métricas de Inferência — TTFT, TPOT, ITL, Goodput, P99
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Quatro métricas decidem se uma implantação de inferência está funcionando. TTFT é o prefill mais fila mais rede. TPOT (equivalentemente ITL) é o custo de decodificação por token limitado pela memória. A latência fim a fim (E2E) é o TTFT mais o TPOT multiplicado pelo comprimento da saída. O throughput é composto de tokens por segundo agregados em toda a frota. Mas a métrica que realmente importa para o produto é o goodput — a fração de solicitações que atendeu a todos os SLOs simultaneamente. Throughput alto com goodput baixo significa que você está processando tokens que nunca chegarão a tempo aos usuários. Números de referência para Llama-3.1-8B-Instruct no TRT-LLM em 2026: TTFT médio de 162 ms, TPOT médio de 7.33 ms, E2E médio de 1.093 ms. Sempre reporte P50, P90, P99 — nunca apenas a média. E cuidado com a armadilha de medição: o GenAI-Perf exclui o TTFT do cálculo de ITL, enquanto o LLMPerf o inclui; as duas ferramentas discordam sobre o TPOT para a mesma execução.
Tipo: Learn Idiomas: Python (stdlib, calculadora de percentis simples e gerador de relatórios de goodput) Pré-requisitos: Phase 17 · 04 (vLLM Serving Internals) Tempo: ~60 minutos
Objetivos de Aprendizado
- Definir TTFT, TPOT, ITL, E2E, throughput e goodput com precisão e nomear o componente que cada um mede.
- Explicar por que a média é a estatística errada para o serviço de LLM e como ler P50/P90/P99.
- Construir uma restrição múltipla de SLO (ex.: TTFT<500 ms E TPOT<15 ms E E2E<2 s) e calcular o goodput com base nela.
- Nomear duas ferramentas de benchmark que discordam sobre o TPOT para a mesma execução e explicar o porquê.
O Problema
"Nosso throughput é de 15.000 tokens por segundo." E daí? Se 40% das solicitações ultrapassaram 2 segundos de latência fim a fim, os usuários abandonaram a sessão. O throughput sozinho não diz se o produto funciona.
A inferência possui múltiplos eixos de latência e cada um falha de forma diferente. O prefill é limitado por computação (compute-bound) e escala com o comprimento do prompt. A decodificação (decode) é limitada por memória (memory-bound) e escala com o tamanho do lote (batch size). O atraso na fila (queuing delay) é um problemático operacional. A rede é um problema de distância física. Você precisa de métricas distintas para cada um, precisa de percentis e precisa de um único indicador composto que responda: "o usuário recebeu o que esperava?" — esse indicador é o goodput.
O Conceito
TTFT — tempo para o primeiro token (time to first token)
TTFT = queue_time + network_request + prefill_time
O prefill domina quando os prompts são longos. No Llama-3.3-70B FP8 em H100, um prompt de 32k consome ~800 ms de puro prefill. O tempo de fila (queue time) representa o comportamento do agendador sob carga. A solicitação de rede é o tempo de tráfego físico, incluindo TLS. O TTFT é a latência que o usuário experimenta antes que qualquer resposta comece a ser transmitida.
TPOT / ITL — latência entre tokens (inter-token latency)
Muitos nomes para a mesma grandeza. TPOT (tempo por token de saída / time per output token), ITL (latência entre tokens / inter-token latency), latência de decodificação por token — tudo é a mesma coisa. Refere-se ao tempo decorrido entre tokens consecutivos transmitidos após o primeiro.
TPOT = (decode_forward_time + scheduler_overhead) / tokens_produced
Na mesma stack do Llama-3.3-70B H100 com prefill em pedaços (chunked prefill), a média do TPOT é de ~7 ms. Sem o chunked prefill, se houver um prefill longo ocorrendo em uma sequência vizinha, o TPOT pode saltar para 50 ms. Monitore o P99, não a média.
Latência E2E (fim a fim)
E2E = TTFT + TPOT * output_tokens + network_response
Para saídas longas (>500 tokens), o E2E é dominado pelo TPOT. Para saídas curtas com prompts longos, o E2E é dominado pelo TTFT. Reporte o E2E condicionado ao comprimento da saída.
Throughput (vazão)
throughput = total_output_tokens / elapsed_time
Métrica agregada. Informa a eficiência da frota. Não indica a saúde de solicitações individuais.
Goodput — a métrica que realmente importa
goodput = fraction of requests meeting (TTFT <= a) AND (TPOT <= b) AND (E2E <= c)
O SLO é uma restrição múltipla. Uma solicitação é considerada "boa" apenas se todas as restrições forem atendidas. O goodput é essa proporção. Ter um throughput alto com 60% de goodput é uma falha. Um throughput menor com 99% de goodput é o objetivo ideal.
Em 2026, o goodput é a métrica padrão utilizada nos envios do MLPerf Inference v6.0 e no monitoramento de SLA interno em provedores de plataformas de IA.
Por que a média é a estatística errada
As distribuições de latência de LLM possuem assimetria à direita (são right-skewed). Um lote de decodificação com uma sequência vizinha fazendo prefill longo pode entregar 500 tokens com TPOT ~7 ms e 20 tokens com TPOT ~60 ms. A média do TPOT será de 9 ms, enquanto o P99 do TPOT será de 65 ms. Os usuários encontram o P99 regularmente — e é por isso que desistem do produto.
Sempre reporte a tríade (P50, P90, P99). Para a experiência do usuário, o P99 é a métrica a ser otimizada.
Números de referência — Llama-3.1-8B-Instruct no TRT-LLM, 2026
- TTFT médio: 162 ms
- TPOT médio: 7.33 ms
- E2E médio: 1.093 ms
- P99 do TPOT: varia de 10 a 25 ms, dependendo da configuração de chunked prefill.
Esses são os pontos de referência publicados pela NVIDIA. Eles mudam conforme o tamanho do modelo (um 70B mostraria de 3 a 5x mais), o hardware (H100 vs B200 melhora em ~3x) e a carga.
A armadilha da medição
Duas das ferramentas de benchmark mais utilizadas em 2026 discordam sobre o cálculo do TPOT para a mesma execução:
- NVIDIA GenAI-Perf: exclui o TTFT do cálculo de ITL. O ITL começa a partir do token 2.
- LLMPerf: inclui o TTFT. O ITL começa a partir do token 1.
Para uma solicitação com TTFT de 500 ms e 100 tokens de saída em um tempo total de decodificação de 700 ms, o GenAI-Perf relata ITL = 700/99 = 7.07 ms, enquanto o LLMPerf relata ITL = 1200/100 = 12.00 ms. A escolha da ferramenta altera o número obtido.
Sempre especifique qual ferramenta foi utilizada. Sempre publique a definição adotada.
Construindo um SLO
Um SLO razoável para usuários finais de um modelo de chat de 70B em 2026:
- TTFT P99 <= 800 ms.
- TPOT P99 <= 25 ms.
- E2E P99 <= 3 s para saídas <300 tokens.
- Meta de goodput >= 99%.
SLOs corporativos tornam o TTFT mais rígido (200-400 ms) e afrouxam o E2E. O ponto crucial é defini-los, medir os três aspectos e monitorar o goodput como um único indicador composto.
Como medir
- Execute tráfego real ou simulação sintética realista (LLMPerf com
--mean-input-tokens 800 --stddev-input-tokens 300 --mean-output-tokens 150). - Defina como alvo 2x a concorrência de pico para a execução do benchmark.
- Execute de 30 a 50 iterações e tire os percentis da amostra combinada.
- Publique junto com o nome e versão da ferramenta, modelo, hardware, concorrência e distribuição de prompts.
Use-o
O code/main.py é uma calculadora simples de goodput. Gere uma distribuição de latência sintética, aplique um SLO e calcule o goodput. Ele também exibe a diferença de TPOT entre GenAI-Perf e LLMPerf na mesma execução.
Entregue-o
Esta lição produz outputs/skill-slo-goodput-gate.md. Dado um volume de trabalho e um SLO, ele gera uma receita de benchmark pronta para CI/CD que valida implantações com base no goodput, e não apenas no throughput.
Exercícios
- Execute
code/main.py. Gere uma distribuição com um pico de 1% na cauda. Como o goodput se altera quando você restringe o P99 do TPOT de 30 ms para 15 ms? - Um fornecedor anuncia "15.000 tok/s no Llama 3.3 70B H100". Liste três perguntas que você faria antes de confiar nesse número.
- Por que o chunked prefill protege o P99 do TPOT, mas não melhora a média do TPOT?
- Construa um SLO de consumidor para um assistente de voz (onde o primeiro token é ouvido, e não lido). Qual métrica é mais perceptível para o usuário?
- Leia o README do LLMPerf e a documentação do GenAI-Perf. Identifique três outras métricas onde as duas ferramentas divergem.
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| TTFT | "tempo para o primeiro token" | Fila + rede + prefill; dominado pelo prefill em prompts longos |
| TPOT | "tempo por token de saída" | Custo de decodificação por token limitado pela memória após o primeiro token |
| ITL | "latência entre tokens" | O mesmo que TPOT na maioria das ferramentas (nem todas — veja GenAI-Perf) |
| E2E | "fim a fim" | TTFT + TPOT * output_len; acrescido de tempo de rede no retorno |
| Throughput | "tok/s" | Eficiência da frota; inútil sem os percentis de latência |
| Goodput | "taxa de conformidade com SLO" | Fração de solicitações que atendem a todas as restrições do SLO simultaneamente |
| P99 | "cauda" | Pior caso de latência (1 em 100); a métrica ideal para avaliar a experiência do usuário |
| Restrição múltipla de SLO | "SLO conjunto" | Operação E (AND) de todos os limites de latência; a solicitação falha se algum for violado |
| GenAI-Perf vs LLMPerf | "a armadilha das ferramentas" | As ferramentas divergem sobre a inclusão ou não do TTFT no ITL |
Leituras Adicionais
- NVIDIA NIM — LLM Benchmarking Metrics — Definição canônica de TTFT, ITL e TPOT.
- Anyscale — LLM Serving Benchmarking Metrics — Definições alternativas e receita de medição.
- BentoML — LLM Inference Metrics — Medição aplicada em implantações reais.
- LLMPerf — Ferramenta de benchmark de código aberto baseada em Ray.
- GenAI-Perf — Ferramenta de benchmark da NVIDIA.
- MLPerf Inference — A suíte de benchmark baseada em goodput aceita pelo setor.