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:

  1. Identidade: revisão exata do modelo e do artefato, runtime/build, driver e kernels, template, formatos de pesos/KV/estado recorrente e decoder especulativo.
  2. 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.
  3. 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.
  4. 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.

Mínimo: 80 caracteres e 15 palavras. Seu texto fica somente neste navegador.

Aguardando sua explicação.

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

01Um time roda sessões interativas com batch um e traços longos de raciocínio. Um fornecedor publica um número de throughput medido com concorrência 256 e saídas de 128 tokens. Quanto esse número diz a eles?
Resposta e explicação

Quase nada: ele mede um regime — alta concorrência, gerações curtas — que é o oposto do deles nos dois eixos — Alta concorrência amortiza a leitura dos pesos entre muitas sequências e saídas curtas minimizam o crescimento do cache; decode com batch um e geração longa é limitado por banda de um jeito que aquele benchmark nunca exercita.

02Lembrando a lição 8.11, por que um stack que aumenta o throughput em vinte por cento pode ainda assim não reduzir em nada um orçamento de endpoint gerenciado?
Resposta e explicação

Um endpoint gerenciado cobra por token, não por segundo, então o throughput do engine é irrelevante para o seu custo — só o volume de tokens mexe na conta — Alugar e comprar têm funções de custo inteiramente diferentes: uma é linear em tokens, a outra fixa em capacidade, então uma melhoria no serving engine só é economia quando você é dono da máquina.

Conclua o teach-back e acerte o quiz para finalizar a aula.

◎ · Marcador de evidência

Fontes

  1. vLLM Project (2026). vLLM Documentation.
  2. SGLang Team (2026). SGLang Documentation.
  3. NVIDIA (2026). TensorRT-LLM Documentation.
  4. Percy Liang et al. (2022). Holistic Evaluation of Language Models.
  5. Vijay Janapa Reddi et al. (2020). MLPerf Inference Benchmark.
  6. BlackwellBoy (2026). Qwen 3.8 27B is not one number.