Ask HN: Se o ChatGPT consegue atender 700 milhões de pessoas, por que eu não consigo rodar nem um GPT-4 localmente?
(news.ycombinator.com)- Sam Altman anunciou que o ChatGPT atende cerca de 700 milhões de usuários por semana
- Ao executar um modelo do nível do GPT-4 localmente, a falta de VRAM e a queda de velocidade são graves, então surge a dúvida de como a OpenAI consegue lidar com esse uso em larga escala com baixa latência e alto desempenho
- A curiosidade é sobre técnicas que vão além de um simples cluster de GPUs, como otimização de modelos, processamento distribuído, hardware dedicado e balanceamento de carga
Resumo dos principais comentários
1. Estrutura de inferência distribuída em escala massiva
- Model Sharding
- Os parâmetros são distribuídos e armazenados em várias GPUs
- Quando chega uma requisição, cada GPU processa a sua parte dos parâmetros e depois os resultados são combinados
- Tensor Parallelism
- Várias GPUs executam em paralelo os cálculos dentro de uma mesma camada
- Pipeline Parallelism
- As camadas são divididas em várias etapas para processamento sequencial e simultâneo, como em um pipeline
- Processamento paralelo híbrido para otimizar memória de GPU e carga computacional
2. Otimização de memória e velocidade
- Quantization: converte os parâmetros para precisão de menos bits, reduzindo o uso de VRAM
- Offloading de camadas: move algumas camadas para a memória da CPU quando necessário
- LoRA / Adapter Layers: faz fine-tuning apenas para tarefas específicas, sem necessidade de recarregar o modelo inteiro
- KV Caching: reutiliza o contexto e elimina cálculos repetidos
3. Hardware dedicado e rede
- Uso em larga escala de NVIDIA H100, A100 e alguns TPUs
- Transferência de dados em altíssima velocidade entre GPUs com NVLink e NVSwitch, e entre clusters com InfiniBand
- Construção de uma rede backbone global entre data centers para minimizar a latência
4. Distribuição geográfica e balanceamento de carga
- Implantação de fazendas de GPU em várias regiões do mundo
- Uso de GeoDNS para conectar a requisição do usuário à região mais próxima
- Escalonamento dinâmico de clusters de GPU conforme o padrão de tráfego
- Redistribuição global do tráfego quando há concentração de carga em uma região específica
5. Otimização do processamento de requisições
- Batch Inference: agrupa requisições de vários usuários para executar a inferência de uma vez
- Pré-processamento com modelos menores: requisições simples vão para modelos pequenos, e só as complexas chamam modelos grandes
- Cache de resultados: retorna imediatamente do cache resultados para prompts idênticos ou requisições semelhantes
- Prompt engineering evita desperdício desnecessário de tokens
6. Operação e otimização de custos
- Monitoramento e agendamento do uso de GPU para minimizar recursos ociosos
- Melhoria da eficiência energética dos data centers e adoção de refrigeração líquida
- Otimização própria de compilador e runtime para acelerar a inferência
- Operação de pipelines automatizados para atualização e implantação de modelos
Exemplo de fluxo da arquitetura geral
- Recebimento da requisição do usuário → roteamento para a região mais próxima via GeoDNS
- Pré-processamento → requisições simples vão para modelos pequenos, e só as complexas seguem para modelos grandes
- Processamento de inferência distribuída
- Aplicação de model sharding + tensor parallelism + pipeline parallelism
- Troca de resultados intermediários por rede de alta velocidade entre GPUs
- Pós-processamento e cache de resultados → armazenamento em cache para requisições idênticas ou semelhantes
- Retorno da resposta → entrega do resultado em 1~2 segundos
3 comentários
No caso da OpenAI, não estão usando apenas hardware da NVIDIA, mas também o MI300X da AMD para inferência. No treinamento, é só NVIDIA, mas
na inferência estão obcecados em garantir VRAM de qualquer jeito para compensar o custo do investimento.
No caso da Microsoft, é a mesma coisa: na inferência, estão misturando NVIDIA e AMD.
Principalmente nas regiões da Azure na Ásia, a proporção de AMD que a OpenAI usa é de algo como 2 para 8 da Nvidia.
Opinião no Hacker News
Trabalho diretamente com esse tipo de sistema no Google (opinião pessoal) e posso dizer com certeza que pessoas muito inteligentes pensam seriamente em todos os aspectos do problema. Não posso falar muito mais, mas queria compartilhar materiais escritos por colegas. Há uma excelente explicação sobre arquitetura de aceleradores e métodos de otimização para obter alto desempenho no scaling book. Em especial, se você tem curiosidade sobre inferência, o capítulo sobre inferência ajuda bastante. Também recomendo os guias da unsloth. Eles exploram vários modelos a fundo em busca de otimizações e organizam isso muito bem. Além do guia do Gemma 3n, há vários outros guias
Explicando de forma menos misteriosa, inferência é, em grande parte, um trabalho sem estado. Então não é preciso lidar com consistência de memória entre centenas de milhares de máquinas nem com falhas de máquina como no treinamento. Basta enviar uma pequena quantidade de dados para máquinas muito grandes de forma eficiente. As máquinas de pesquisa onde trabalhei eram máquinas extremamente potentes com 8 GPUs, e, se o modelo coubesse na VRAM total, qualquer tarefa podia ser processada corretamente. O ingrediente secreto da grande escala era "uma quantidade absurda de capital". Já tivemos até máquinas DGX folheadas a ouro enviadas pela NVIDIA, que não eram densas e eram muito caras. A maioria das grandes empresas já tem sistemas estáveis de RPC e orquestração, então a parte realmente difícil não é a entrega de mensagens, e sim encaixar o modelo no hardware disponível (essa não é minha especialidade)
Racks modernos para inferência em larga escala, técnicas conhecidas de RDMA e redes de baixa latência, além de fortes otimizações de MLA e cache, não precisam ser descritos como tecnologia misteriosa. Essas coisas já são publicamente bem compreendidas e, na verdade, quando uma empresa famosa faz algo muito customizado, isso costuma até ser um peso por causa de problemas de compatibilidade com o legado. O que realmente importa é ter boa estrutura e bons processos para operar sistemas grandes. Isso inclui desde aquisição de equipamentos e treinamento de SRE até RTL para novos TPUs. Se alguém estivesse 10x à frente, nós saberíamos imediatamente (sou alguém com 10 anos de experiência em inferência em larga escala em uma empresa do TOP-5)
Sobre a frase "somos pessoas inteligentes levando todos os problemas realmente a sério", na prática dá para ver como um sistema de time-sharing no estilo mainframe dos anos 1970
Fico curioso se, graças aos TPUs, para o Google a inferência dos próprios modelos não seria muito mais lucrativa do que alugar placas da NVIDIA. Pelo que sei, a OpenAI garante GPUs principalmente por meio da parceria com a Microsoft. Tanto o link quanto o livro foram leituras interessantes
A frase "hoje em dia até modelos 'pequenos' operam perto dos limites do hardware" me marcou. Isso soa parecido com o "até programas pequenos rodam ajustados aos limites do hardware" dos anos 60 e 70. Mesmo que otimização e eficiência tenham desaparecido da engenharia de software em geral, elas continuam vivas no desenvolvimento de LLMs
Um H100 custa US$ 20 mil e tem 80 GB de VRAM. Dá para imaginar US$ 100 mil em placas dessas dentro de um único servidor 2U de rack. Se você encher um rack com esse tipo de equipamento, incluindo CPU, RAM e refrigeração, chega a algo na casa de US$ 1 milhão por rack (sem contar custo operacional e equipe de manutenção). Mesmo equipamento "barato" trabalha com unidades de custo enormes. Espero que, quando a bolha da IA estourar, fique viável rodar bons modelos locais de forma realista. Em 10 anos, talvez esses servidores de US$ 100 mil estejam sendo vendidos no eBay por US$ 3 mil, e eletricistas recebendo pedidos para instalar 240 V em garagens ou salas de servidor improvisadas
Nem precisa esperar 10 anos: já dá para comprar um DGX-1 no eBay por menos de US$ 10 mil. Ele tem 256 GB de VRAM (HBM2), NVLink, 512 GB de RAM, CPU de 40 núcleos, SSD de 8 TB e HBA de 100 Gbit. Produtos sem marca NVIDIA podem ser comprados por US$ 6 mil. Só que são muito pesados, muito mais barulhentos do que você imagina, e uma unidade quase consome um circuito inteiro de 240 V 16 A. Ao mesmo tempo, também gera 13.000 BTU de calor por hora
Mesmo que a bolha da IA não estoure, é bem provável que esses servidores apareçam no eBay em 10 anos. Os datacenters vão atualizar o hardware e vender os usados para terceiros
Pessoalmente, suspeito que os modelos abertos usem muito menos computação do que imaginamos. Nos modelos mais recentes de Mixture of Experts, graças à estrutura de top-k sampling, em que apenas alguns especialistas (parâmetros) são ativados e avaliados, mesmo um modelo SOTA não exige necessariamente muito mais computação do que um modelo não-MoE de 70-80B
Em serving de IA no nível empresarial, a pergunta real não é "como vamos atender os usuários", e sim que os investidores esperam ROI em algum momento. Dá para construir toda a infraestrutura necessária, desde que o investimento continue entrando. Mesmo sem otimização, se precisar, é só construir mais galpões e racks e atender o serviço dessa forma
Não sou americano, então a parte sobre 240 V foi engraçada
Se você tem alguns milhares de dólares, eles têm dezenas de bilhões. É uma diferença de escala entre 1.000 e 10.000.000.000. A eficiência deles também é uma ou duas ordens de grandeza melhor em escala. Além disso, até em um MacBook (24 GB de RAM) dá para rodar modelos locais comparáveis ao desempenho inicial do GPT-4. Link de comparação de desempenho
Mesmo um único nó com GPU oferece FLOPs e largura de banda de memória muito altos. Ao processar poucas requisições, muitas vezes a GPU passa a maior parte do tempo esperando transmitir os pesos da RAM para as unidades de computação. Se você agrupa requisições em batch, consegue ler um conjunto de pesos uma vez e processar várias requisições em paralelo, maximizando a eficiência. Além disso, o modelo pode ser comprimido para 8 bits ou menos, reduzindo o volume de dados transmitidos, e GPUs modernas suportam operações em 8 bits/4 bits. Modelos Mixture of Experts usam apenas parte dos parâmetros por token, então menos pesos precisam ser carregados. Técnicas de speculative decoding usam um modelo menor para prever vários tokens com antecedência, e então o modelo principal adota apenas os que coincidirem. Todas essas otimizações juntas geram excelente eficiência (com base na experiência como diretor da equipe de inferência da Databricks)
Um dos molhos secretos da OpenAI são prejuízos de bilhões de dólares. Em 2024, ela perdeu US$ 5 bilhões. Artigo relacionado
Hoje em dia surgiu a abordagem agentic, então muita coisa mudou. Antes era 1 requisição para 1 processamento; agora, para uma tarefa, são executados centenas de processamentos em paralelo. Por causa dessa possibilidade de paralelismo, OAI/Azure leva vantagem sobre modelos locais
Se eliminassem P&D e apenas servissem os modelos existentes, acho que conseguiriam atingir o ponto de equilíbrio
Acertou em cheio no ponto central. Mesmo com o investimento de até US$ 10 bilhões da Microsoft cobrindo pré-treinamento, P&D e custos de inferência, ainda houve prejuízos de bilhões de dólares. É uma estrutura de capitalismo orientado a crescimento no estilo VC
Em inferência em grande escala, processar requisições em batch de uma vez é muito mais eficiente do que o modelo de alocação de GPU por usuário individual (ambiente pessoal). Se quiser conhecer alguns truques de engenharia de nível intermediário, vale ver um texto que nossa equipe publicou no blog da Fin AI. (OpenAI etc. provavelmente usam também técnicas proprietárias que não estão aí.) Post relacionado
Ter 700 milhões de usuários por semana não diz muito sobre a carga real. Mesmo que a maioria dos usuários do ChatGPT use o serviço uma hora por dia durante toda a semana, 96% do tempo ainda estará ociosa. Muitos usam apenas modelos menos complexos. O fato de falarem em "usuários semanais" sugere justamente que mesmo entre os usuários ativos diários há uma parcela que nem usa uma vez por dia. Os desafios principais são 1) construir servidores nos quais o modelo caiba em memória e processe tokens rápido o suficiente, 2) garantir servidores suficientes para a taxa agregada de processamento de tokens no pico, 3) distribuir e rotear eficientemente todas as requisições entre os servidores. Existem detalhes mais finos, mas, na prática, o último desafio parece até parecido com operar um motor de busca. Todo o estado está no histórico da conversa, então não há necessidade de que o mesmo chat seja sempre processado pelo mesmo servidor. Quando você vê a mensagem "Thinking...", não fica exposto se o modelo está realmente computando ou apenas esperando na fila por um servidor
Um dos maiores segredos para LLMs funcionarem bem em escala é o "tamanho do batch". Hoje em dia, a maioria dos LLMs usa arquitetura "Mixture of Experts", ativando instantaneamente só uma parte dos parâmetros totais. Isso torna o processamento em batch em grande escala muito mais eficiente. Se você fosse rodar o GPT-4 em casa, precisaria colocar o modelo inteiro na VRAM, o que exigiria várias GPUs como a H100 (cerca de US$ 40 mil cada). Mas, com uso pessoal, você não conseguiria aproveitar essas placas de forma adequada. É parecido com perguntar: “como a Apple consegue fabricar iPhones para bilhões de pessoas, mas eu não consigo fazer nem um na garagem?”
Em resumo, a carga de inferência fica bem distribuída entre muitos usuários e por isso roda com eficiência
Então fico curioso se seria possível uma estrutura em que as partes menos usadas ficassem na memória principal e as mais usadas na VRAM
A analogia é muito apropriada
Um truque que também dá para implementar em casa e que tem papel importante no desempenho da Cerebras é o speculative decoding. Nesse método, um modelo de rascunho muito menor prevê tokens usando muito menos computação e memória, e o modelo principal adota aqueles que ele próprio provavelmente teria escolhido. Em uma estrutura bem ajustada, dá para chegar a ganhos de até 3x em velocidade. No caso de structured output, também dá para aplicar "fast forwarding" pulando tokens previsíveis, pré-preenchendo por exemplo o formato inicial de JSON e elevando a velocidade em até 3x
gpt-oss-120begpt-oss-20bpara fazer speculative drafting. Mesmo assim, não tive a impressão de que o desempenho melhorou tantoO núcleo da inferência de LLMs é multiplicação matriz-vetor. Quando você precisa processar várias queries ao mesmo tempo, pode reunir os vetores de cada query e formar uma matriz, calculando tudo simultaneamente via multiplicação matriz-matriz. Do ponto de vista do hardware, é muito mais eficiente fazer uma multiplicação matriz-matriz do que repetir várias vezes uma multiplicação matriz-vetor. Isso é exatamente o batching. O segundo truque é speculative decoding. A inferência tem duas etapas: processamento do prompt e geração de tokens, e ambas são, na prática, a mesma estrutura chamada de forward pass. O processamento do prompt pode ser paralelizado com multiplicação matriz-matriz, e só o último resultado é usado para iniciar a geração de tokens. Mas como normalmente não se conhece os tokens futuros, essa parte não costuma ser paralelizável. Então um modelo de rascunho rápido prevê N tokens à frente, isso é inserido no prompt de entrada, e o modelo principal executa um forward pass paralelo. Entre os N tokens gerados, todos até o primeiro token coincidente podem ser aceitos imediatamente como válidos. Em teoria, isso pode render um ganho de 2x a 4x na velocidade de inferência. Eu não implementei isso diretamente no trabalho, mas imagino que também apliquem agrupamento paralelo por comprimento de query e balanceamento de carga em tempo real (já que nem toda requisição tem o mesmo tamanho, isso é necessário para evitar desequilíbrio de recursos)