Fronteira
Escolhendo o seu stack
Um framework de decisão único para todos os stacks da track — por orçamento de hardware, formato de carga e capacidade de ops — mais o que uma comparação justa de fato exige e o que um benchmark de fornecedor estruturalmente não consegue dizer.
Atualizada em
01 · Conceito
Conceito
Você conheceu onze maneiras de rodar o mesmo modelo. Alguém agora pergunta qual usar, e o movimento honesto de partida é recusar a pergunta como foi feita. Não existe stack mais rápido, porque velocidade não é propriedade de um stack — é propriedade do casamento de um stack com um modelo, uma peça de hardware e um padrão de tráfego. Mude qualquer um dos três e o ranking muda. O que você pode ter, em vez disso, é um procedimento que chega a uma resposta defensável em três perguntas, e um padrão do que conta como evidência.
A primeira pergunta é hardware, porque é a única que pode encerrar a conversa imediatamente. O Qwen3.8-27B em bf16 são 54 GB de pesos antes de um único token de cache, o que significa um acelerador da classe 80 GB, um shard multi-GPU ou uma máquina de memória unificada muito grande. O artefato de texto Q4_K_M fixado tem 17,1 GB (15,93 GiB), o que abre uma placa de 24 GB, um Mac de 32 GB e um laptop bem especificado depois de validar a folga de runtime. Quants mais agressivos e suportados podem ser menores; escolha um modelo menor apenas quando nenhum quant com qualidade, suporte e latência aceitáveis couber. Se a sua memória não comporta pesos mais o cache que o seu comprimento de contexto exige, nenhuma escolha de engine resgata você.
A segunda pergunta é formato da carga, e ela tem mais dimensões do que as pessoas esperam. O tráfego é uma pessoa num teclado ou centenas de sessões concorrentes? As requisições compartilham um prefixo longo e idêntico — um system prompt, um documento de política, um preâmbulo few-shot — ou cada prompt é único? O contexto são dois mil tokens ou duzentos mil? A saída precisa obedecer a um schema? Há imagens envolvidas? O thinking mode está ligado, de modo que as gerações são longas? Cada uma dessas empurra para um engine diferente, e elas podem conflitar, que é por que são respondidas antes de um stack ser nomeado, e não depois.
A terceira pergunta é capacidade de ops, e é a que engenheiros sistematicamente subestimam. Alguém atualiza drivers. Alguém percebe a latência p99 derivando. Alguém está acordado quando uma regressão de kernel aterrissa. Um stack que é dez por cento mais rápido e consome um quarto de um engenheiro não é dez por cento melhor.
Responda as três e um mapa cai no colo. Uma máquina, um usuário, Apple silicon: MLX da lição 8.9, ou um runner llama.cpp da lição 8.8 se você quer a conveniência e o registry. Uma GPU NVIDIA servindo uma API interna: vLLM da lição 8.4, que é o padrão e merece ser. Muitos usuários concorrentes com prefixos fortemente compartilhados, ou saída que precisa ser JSON válido: SGLang da lição 8.5, cujo compartilhamento de prefixo e decoding restrito são exatamente esses dois problemas resolvidos. Uma frota exclusivamente NVIDIA, throughput como custo dominante e tempo de engenharia para gastar em validação de runtime e compatibilidade: TensorRT-LLM da lição 8.6. Uma frota heterogênea ou futuramente heterogênea, com tolerância a um ecossistema jovem: MAX da lição 8.10. Volume baixo, irregular ou imprevisível sem escala de ops: o endpoint gerenciado da lição 8.11.
Trabalhe um caso por inteiro. Um time de três engenheiros atende 200 usuários diários, majoritariamente conversas curtas em torno de 8.192 tokens de contexto, e precisa de respostas como JSON validado. Eles conseguem bancar um acelerador de 80 GB. Passo um, hardware: a lição 9.3 faz esse orçamento linha a linha e aterrissa num pool de cache de 23,3 GiB depois de descontados pesos, workspace e ativações. Usando o dimensionamento completo da lição 9.3, com a regra de KV cache da lição 7.2 e o caminho de referência do Transformers mantendo o estado Gated DeltaNet em fp32, aproximadamente 36 sequências 8K vivas cabem simultaneamente — muito acima de 200 usuários espalhados ao longo de um dia de trabalho. Uma placa basta, e eles não precisam quantizar. Passo dois, carga: a exigência de JSON e um system prompt compartilhado apontam diretamente para o SGLang; prefixos idênticos entre usuários significam que o prefill daquele prompt é computado uma vez e reaproveitado, o que é throughput que eles ganham de graça em vez de por ajuste fino. Passo três, ops: três engenheiros construindo um produto são cobertura fina para um deployment de serving, então eles comparam com a opção gerenciada usando a aritmética da lição 8.11 antes de se comprometer — e se o volume de tokens deles se parecer com o exemplo daquela lição, a conta medida é pequena o bastante para que possuir uma placa seja comprar silício ocioso.
Repare no que decidiu. Não foi um benchmark. Foi aritmética de capacidade, um requisito funcional e um número de cabeças.
Então o que torna uma comparação justa? Seis coisas precisam ser idênticas entre os braços: a revisão do modelo, a precisão numérica tanto dos pesos quanto do KV cache, a configuração de decoding — e para este modelo isso significa um dos dois presets publicados, já que o thinking mode em temperature 1.0 gera muito mais tokens que o preset instruct em 0.7 e vai mexer no throughput sozinho —, as distribuições de comprimento de entrada e saída, o nível de concorrência e o padrão de chegada, e a janela de medição com uma política de warm-up declarada. Depois reporte as coisas certas: throughput ao lado de time to first token e de latência fim a fim p50 e p99, porque um stack que ganha em tokens por segundo agregados enquanto dobra a latência de cauda perdeu para um produto interativo. E declare se o prefix caching estava quente, já que um benchmark que reproduz um único prompt mede um cache, não um modelo.
Escreva a execução como um passaporte de benchmark em quatro partes:
- Identidade: revisão exata do modelo e do artefato, runtime/build, driver e kernels, template, formatos de pesos/KV/estado recorrente e decoder especulativo.
- Protocolo: versão do prompt ou benchmark, revisão do harness e do scorer, política de sampling e raciocínio, orçamento de saída, distribuições de entrada e saída, concorrência e padrão de chegada, estado do prefix cache, warm-up, repetições e seeds aleatórias quando aplicável.
- Validade: canários de correção antes da cronometragem, capacidade configurada contra capacidade realizada, regras de descarte pré-registradas e contagens separadas para rejeição de admissão, truncamento por comprimento, falha de schema/ferramenta e saída concluída porém errada.
- Resultados: TTFT, taxa entre tokens ou de decode, p50/p95/p99 fim a fim, throughput agregado, pico de memória, erros e reinícios, além de potência na tomada ou energia apenas quando tiverem sido realmente medidas. Preserve requisições, respostas e logs brutos quando licença e privacidade permitirem.
Essa estrutura estende a lição de deployment do artigo com os mesmos princípios usados por MLPerf e HELM: definir o cenário, padronizar as condições, validar acurácia, expor múltiplas métricas e reter evidência bruta suficiente para auditar a conclusão. Um passaporte não torna cargas diferentes comparáveis; ele torna a fronteira visível.
Um benchmark confiável também precisa de identidade completa. Na campanha pública do Qwen3.8-27B, o mesmo alvo RTX 5090 saiu de cerca de 71,8 tok/s num perfil SGLang NONE para 151,27 tok/s num stack TurboQuant 4-bit KV + MTP3 corrigido, mas o número mais rápido só foi aceito depois que canários de saída exata, JSON, ferramentas, coding e multi-turn passaram; o launch acelerado stock ficou em correctness HOLD. Alegações de contexto precisaram da mesma disciplina: um perfil estava configurado para 262.144 tokens, mas realizou apenas 42.624 tokens de KV, enquanto outro perfil de contexto longo recuperou três needles com 261.212 tokens de entrada e TTFT muito maior. E duas execuções de qualidade foram descartadas porque o controlador teve OOM e depois o cache de respostas ficou read-only. Isso não é nota de rodapé. É parte do resultado.
A postura durável é decidir com aritmética e confirmar com medição, nessa ordem. O orçamento de memória diz o que é possível, a carga diz o que é apropriado, o número de cabeças diz o que é sustentável, e um experimento controlado no seu próprio tráfego diz se você estava certo — que é uma disciplina que nenhuma página de fornecedor entrega para você.
02 · Analogia
Analogia
Ninguém pergunta qual é o melhor veículo. As pessoas perguntam o que estão carregando, por que distância, sobre qual superfície e quem está disponível para dirigir e consertar — e a resposta sai como uma van, uma bicicleta ou um táxi, nenhum dos quais é uma versão comprometida dos outros. Um serving stack é escolhido do mesmo jeito, e mais rápido não é propriedade de um stack, assim como mais rápido não é propriedade de um veículo divorciado da sua carga e da sua estrada.
03 · Explique de volta
Explique de volta
Dado o hardware, a carga e a capacidade de ops de um time, percorra a escolha de um serving stack para o Qwen3.8-27B e enuncie as condições que uma comparação entre dois stacks precisa satisfazer para significar alguma coisa.
Comparar com uma resposta-modelo
Responda três perguntas em ordem. Primeira, hardware: que memória você tem, e o modelo cabe numa precisão que você aceita? Cinquenta e quatro GB de pesos em bf16 pedem um acelerador da classe 80 GB ou um shard; o artefato de texto Q4_K_M fixado, com 17,1 GB, cabe numa placa de 24 GB ou num Mac de 32 GB de memória unificada depois de validar o orçamento completo de runtime. Segunda, formato da carga: uso interativo com batch um, tráfego de alta concorrência, prefixos compartilhados, contexto longo, saída estruturada, entrada multimodal — cada um favorece um engine diferente. Terceira, capacidade de ops: quem roda isso, e o que acontece às 3 da manhã. Daí sai um mapa — MLX ou um runner llama.cpp para uma máquina e uma pessoa, vLLM para uma GPU única servindo uma API, SGLang onde prefixos são compartilhados e a saída é restrita, TensorRT-LLM onde uma frota exclusivamente NVIDIA justifica validação de runtime e compatibilidade, MAX onde portabilidade entre fornecedores importa e ser pioneiro é aceitável, e um endpoint gerenciado onde o volume é baixo ou irregular e não há escala de ops. Uma comparação só significa algo se o passaporte do benchmark fixar revisões do modelo e do runtime, template, política de raciocínio e orçamento de saída, precisão de pesos e estados, configurações especulativas, harness e scorer, formatos de requisição e concorrência, warm-up e repetições, além das regras de descarte entre os braços. Correção precisa passar antes de velocidade; os resultados separam falhas de admissão, truncamentos e respostas erradas e reportam percentis de latência, throughput, memória e energia medida quando houver essa alegação.
04 · Teste seu entendimento
Teste seu entendimento
Conclua o teach-back e acerte o quiz para finalizar a aula.
◎ · Marcador de evidência
Fontes
- vLLM Project (2026). vLLM Documentation.
- SGLang Team (2026). SGLang Documentation.
- NVIDIA (2026). TensorRT-LLM Documentation.
- Percy Liang et al. (2022). Holistic Evaluation of Language Models.
- Vijay Janapa Reddi et al. (2020). MLPerf Inference Benchmark.
- BlackwellBoy (2026). Qwen 3.8 27B is not one number.