Lab
Atualizado em
Esta página é a procedência de tudo que sai publicado aqui. Quando um post cita um número, ele foi medido nesta máquina, com esta configuração.
Como eu meço
Um número de throughput só significa alguma coisa se vier com o procedimento. O meu é este, e é o mesmo em todos os posts:
Modelo carregado e aquecido antes de medir. A primeira execução depois de carregar inclui a leitura do modelo do disco e a compilação de kernels. Ela é descartada.
Contexto declarado explicitamente. A janela padrão do runtime não é a janela que eu uso, e o KV cache muda a memória e o desempenho. O contexto vai declarado em toda medição.
Três execuções, mediana reportada. Média esconde outlier; uma execução só não vale nada. Quando a dispersão entre execuções passa de 5%, isso vira nota no post — porque variação alta geralmente significa térmica ou disputa por GPU, e o leitor precisa saber.
Prompt e saída de tamanho fixo. Throughput medido com prompts diferentes não é comparável. Uso o mesmo prompt e limito a saída ao mesmo número de tokens.
GPU dedicada durante a medição. Nada de vídeo, nada de outro modelo carregado, nada de compositor pesado disputando memória.
O que separa prefill de decode
Duas métricas diferentes que muita gente reporta como uma só:
O prefill (ou prompt eval) é o processamento do prompt de entrada — paralelo, limitado por poder de cálculo. O decode (eval) é a geração token a token — sequencial, limitado por largura de banda de memória.
Um modelo pode ter prefill excelente e decode medíocre, ou o contrário. Reportar só “tokens/s” sem dizer qual dos dois é a fonte mais comum de comparação inútil entre modelos. Aqui os dois aparecem separados.
Limitações desta bancada
Vale dizer o que estes números não cobrem: é uma máquina de usuário único, com uma GPU. Não meço concorrência, não meço batching de servidor, não meço escala horizontal. Quem vai colocar isso em produção com muitos usuários simultâneos precisa de vLLM ou TensorRT-LLM e de um teste próprio — os números daqui servem para decidir o que rodar na sua mesa, não para dimensionar um cluster.
Bancada
-
NVIDIA RTX 5070
12 GB GDDR7
o piso realista — o que cabe em quem comprou placa de entrada
-
NVIDIA RTX 5070 Ti
16 GB GDDR7
onde os modelos de 14B e 24B começam a caber inteiros
-
NVIDIA RTX 4090
24 GB GDDR6X
a geração anterior, que em muita conta ainda ganha por token
-
NVIDIA RTX 5090
32 GB GDDR7
32B em Q4 com contexto longo, sem precisar mandar nada para a CPU
-
MacBook Pro M4 Max
48 GB unificados
Apple Silicon com MLX — a comparação de consumo e de bateria
-
Mini PC de memória unificada
96 GB unificados
muita memória e pouca banda: carrega o que nenhuma GPU aqui carrega
- Runtimes
- vLLM · Ollama · llama.cpp · MLX
- Apoio
- LiteLLM (gateway) · Langfuse (tokens e custo)