Forge

No ar

Projeto pessoal - benchmark medido de serving com vLLM para Llama 3.1 8B em um RunPod A5000, com BF16 a 2.169 tok/s totais, $0,035 por 1M de tokens, e AWQ retendo 99,4% de qualidade média.

Função
Solo - Python, vLLM, benchmarking, infra
Período
mai. de 2026
Stack
  • Python 3.12
  • uv
  • vLLM
  • AWQ-INT4 (Marlin kernels)
  • Llama 3.1 8B
  • lm-evaluation-harness
  • Prometheus
  • Grafana
  • RunPod RTX A5000
  • Matplotlib
  • Ruff
  • mypy (strict)
  • pytest
  • GitHub Actions

O que é

Um artefato de engenharia focado, não um SaaS. O que foi entregue:

  • Serving - config do vLLM orientada por variáveis de ambiente com continuous batching, KV cache e uma API de streaming compatível com OpenAI, além de métricas nativas do Prometheus e provisionamento no Grafana.
  • Harness de benchmark - vllm bench serve encapsulado em torno de um trace ShareGPT, varrendo concorrência 1, 4, 16, 32 e 64 com 256 prompts em cada nível.
  • Comparação de modelos - BF16 meta-llama/Llama-3.1-8B-Instruct versus hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4.
  • Avaliação de qualidade - lm-evaluation-harness contra o servidor vLLM em execução no MMLU, GSM8K e HellaSwag.
  • Modelo de custo - throughput medido convertido em dólares por milhão de tokens, comparado com GPT-4o, GPT-4o mini, Claude Sonnet e Claude Haiku.
  • Gráficos e CI - o JSON de resultados alimenta o pipeline de gráficos; o CI cobre parsers, validação de config, cálculo de custo e formatação dos dados dos gráficos.

Por que construí

Para responder uma pergunta de produção com números medidos: vale mais hospedar um modelo open source do que pagar uma API comercial, e a quantização INT4 melhora a economia em uma GPU de 24 GB barata?

O Forge responde as duas. BF16 Llama 3.1 8B no RunPod A5000 foi muito mais barato do que APIs frontier hospedadas em custo bruto de tokens. AWQ-INT4 manteve a qualidade, mas não melhorou throughput nem custo nessa configuração específica de vLLM/A5000.

Resultado medido

BF16 foi o vencedor em throughput. Na concorrência 64, serviu 2.169 tokens totais por segundo, contra 1.017 tokens totais por segundo do AWQ-INT4 no mesmo pod A5000.

Gráfico de linhas comparando o throughput total de tokens de BF16 e AWQ em diferentes níveis de concorrência no Forge.
BF16 atingiu o pico de 2.169 tokens totais por segundo; AWQ atingiu 1.017.

Latência dividida por métrica. AWQ teve menor p99 de time-to-first-token em alta concorrência: 508 ms na concorrência 64 versus 2.822 ms do BF16. BF16 decodificou mais rápido: mean time per output token na concorrência 64 foi 52,7 ms versus 88,0 ms do AWQ.

Gráfico de linhas comparando o p99 de time to first token de BF16 e AWQ em diferentes níveis de concorrência.
AWQ teve menor p99 de TTFT em alta concorrência nessa execução.
Gráfico de linhas comparando o mean time per output token de BF16 e AWQ em diferentes níveis de concorrência.
BF16 decodificou mais rápido, por isso venceu em throughput e custo.

Custo

A $0,27/hr de compute, BF16 custou $0,0346 por 1M de tokens totais no pico de throughput medido. AWQ custou $0,0737 por 1M de tokens totais por ser mais lento. Comparado com o preço blended do GPT-4o a $6,25 por 1M de tokens, as razões medidas de compute-only ficam em cerca de 181x mais barato para BF16 e 85x mais barato para AWQ, antes de storage e overhead operacional.

Gráfico de barras comparando o custo por milhão de tokens do BF16 e AWQ do Forge com os preços de APIs comerciais.
Custo de token self-hosted apenas de compute, usando o throughput medido do A5000.

Qualidade

AWQ-INT4 reteve 99,4% de qualidade média versus BF16 nas três tarefas de avaliação. Perdeu 1,97 pontos percentuais no MMLU, perdeu 0,85 pontos no HellaSwag e ganhou 1,52 pontos no GSM8K. É uma retenção de qualidade boa o suficiente para muitos experimentos de serving, mas o benchmark ainda favoreceu BF16 porque AWQ foi mais lento.

Gráfico de barras mostrando a retenção de qualidade do AWQ versus BF16 no GSM8K, HellaSwag, MMLU e na média.
AWQ reteve 99,4% de qualidade média, mas a retenção de qualidade não se traduziu em ganho de custo aqui.

Como funciona

Reprodutibilidade como restrição de primeira classe

Metodologia, hardware, IDs dos modelos, configuração exata do vLLM, workload, constantes de preço e resultados gerados estão commitados no repositório do Forge. Os arquivos brutos do benchmark ficam em results/bench/full-*, a avaliação bruta em results/eval/full e os dados dos gráficos em results/charts.

Gate de ensaio no M1

O mesmo shell script que roda no RunPod roda localmente em modo de ensaio contra Qwen/Qwen2.5-0.5B-Instruct. Isso pega bugs de parser, config, gráfico e orquestração antes de o tempo de GPU pago começar.

Cobertura de testes estratégica

Os testes cobrem os utilitários críticos em torno do modelo: cálculo de custo, parsers de resultado, formatação de dados dos gráficos, validação de config e metadados do benchmark. A saída do modelo em si é medida na execução paga, não mockada em testes unitários.

Status

Concluído. O milestone principal do Forge está completo: execuções pagas de serving BF16 e AWQ, avaliação de qualidade, análise de custo, gráficos, documentação de metodologia e guias de reprodução estão entregues. O resultado importante é mais restrito e mais útil do que a hipótese original: BF16 self-hosted foi extremamente barato no A5000, enquanto AWQ-INT4 foi um sucesso em retenção de qualidade, mas não um ganho de throughput nessa configuração.

Perguntas

O que é o Forge?

Forge é um benchmark de serving completo para Llama 3.1 8B self-hosted. Ele roda variantes BF16 e AWQ-INT4 no vLLM, varre concorrência com prompts no estilo ShareGPT, avalia qualidade com lm-evaluation-harness e converte o throughput medido em custo por milhão de tokens.

O que a execução paga provou?

BF16 foi o vencedor nessa configuração A5000/vLLM: 2.169 tokens totais por segundo e $0,035 por 1M de tokens. AWQ-INT4 reteve 99,4% de qualidade média, mas foi mais lento: 1.017 tokens totais por segundo e $0,074 por 1M de tokens.

Por que o resultado do AWQ é útil se foi mais lento?

É um resultado negativo útil. AWQ-INT4 manteve a qualidade próxima ao BF16, mas não entregou o ganho esperado de throughput ou custo na configuração medida do RunPod RTX A5000. A página reporta isso diretamente, sem transformar quantização em uma afirmação genérica de speedup.

Como a metodologia se mantém defensável?

Hardware, IDs dos modelos, configuração do vLLM, níveis de concorrência, contagem de prompts, JSON bruto do benchmark, JSON bruto da avaliação e JSON dos gráficos estão commitados no repositório do Forge. O pipeline completo é ensaiado localmente no M1 antes de usar tempo de GPU pago.

Publicado 26 de mai. de 2026, 18:25 GMT-3 · Atualizado 31 de mai. de 2026, 22:43 GMT-3

← Todos os projetos