Logo NascimentoIgor Nascimento / Blog
Infraestrutura

Termodinâmica da inferência: por que o servidor perde metade da velocidade em vinte minutos sem mudar uma vírgula

Você monta o servidor com duas ou mais GPUs, roda o primeiro benchmark e os números são espetaculares. Vinte minutos depois, com vários usuários conectados, a taxa de tokens cai quase pela metade. O culpado não é o software. É a termodinâmica. Uma conversa sobre thermal throttling, coolers axiais contra blowers, espaçamento de slots, curvas de ventoinha, e o ajuste que quase ninguém faz porque parece contraintuitivo: limitar potência.

InfraestruturaSistemas12 min de leituraIgor Nascimento

O benchmark que mente depois de vinte minutos

Você monta um servidor com duas ou mais GPUs para atender a equipe, liga, roda o primeiro benchmark e tudo entrega números espetaculares. Vinte minutos depois, com vários usuários conectados, a taxa de tokens por segundo cai quase pela metade. E o pior: sem você ter alterado uma única vírgula de configuração. O culpado não é o software. É a termodinâmica.

O fantasma do thermal throttling

GPUs modernas operam em frequências agressivas, mas ajustam o clock dinamicamente, a cada milissegundo, em função de três limites: temperatura, potência e tensão. Quando o chip atinge o limite térmico, em geral entre 80 e 85 °C para o núcleo, ou quando os módulos de memória GDDR superaquecem (e eles têm limite próprio, frequentemente mais apertado e menos monitorado), a controladora reduz tensão e frequência para proteger o silício. Essa queda derruba a banda efetiva de memória e o throughput de geração despenca junto, porque, como discuti em outros textos, o decode é limitado por banda.

O detalhe cruel é que isso acontece sem erro, sem log, sem alerta. O servidor continua "funcionando". Só funciona mais devagar, e a pessoa que percebe é o usuário, não o operador.

Coolers axiais contra blowers em gabinetes fechados

Placas de vídeo de desktop usam ventiladores axiais, que puxam ar pela frente e expelem o ar quente para dentro do gabinete, pelas laterais e pelas costas da placa. Num computador com uma placa, isso funciona, porque o fluxo do gabinete leva o calor embora. Num servidor com duas ou mais GPUs coladas lado a lado, a placa de cima puxa o ar fervendo que a placa de baixo acabou de expelir. Em poucos minutos de uso contínuo, o conjunto vira uma estufa.

Placas com cooler do tipo blower, uma turbina que empurra o ar por dentro da carcaça e o expulsa pela traseira do chassi, resolvem isso: o calor de cada placa sai do gabinete sem passar pela vizinha. São mais barulhentas e menos comuns em placas de consumo, e é por isso que placas de datacenter têm esse formato ou nem têm ventoinha, contando com o fluxo frontal do rack.

O que o nosso painel mostra

Duas RTX 3060, cada uma com limite de potência de 170 W. Em repouso, com o modelo carregado e nenhuma requisição: 49 °C e 41 °C, consumindo 13 W e 16 W. Sob carga, gerando 95 tokens por segundo e lendo prompt a quase 13 mil: 48 °C e 57 °C, a 102 W e 106 W. Duas coisas me chamam a atenção nesses números.

A primeira é que as temperaturas sob carga estão muito longe do limite de throttling, e isso não foi sorte: foi espaçamento entre as placas e curva de ventoinha ajustada antes de o servidor entrar em uso. A segunda é que a placa mais quente é a que mostra 17% de uso de núcleo, e a outra, 0%, no instante da captura. É o decode sendo limitado por memória: os núcleos quase ociosos, a memória trabalhando, e ainda assim 100 W de consumo. A energia está indo para a GDDR6 e para o movimento de dados, não para cálculo.

Painel do servidor sob carga: 95 tokens por segundo gerando, 12.968,6 lendo prompt, GPUs a 48 e 57 graus consumindo 102 e 106 watts de 170
O painel durante uma rajada de requisições. As duas GPUs a 88% de VRAM, 48 e 57 °C, pouco mais de 100 W cada de um limite de 170 W. A temperatura é consequência do fluxo de ar e da curva de ventoinha, não do acaso.

O ajuste contraintuitivo: limitar potência

Aqui está o ponto que quase ninguém faz porque parece errado. Em decode, a GPU é limitada por banda de memória. Os núcleos não estão no limite. Isso significa que baixar o limite de potência da placa custa muito pouco em tokens por segundo, porque o clock do núcleo não era o gargalo, e corta calor e consumo de forma desproporcional, porque potência cresce mais que linearmente com tensão e frequência.

Numa RTX 3060, levar o limite de 170 W para algo como 120 ou 130 W tipicamente custa poucos por cento de throughput em decode e reduz bastante a temperatura em regime contínuo. Em prefill pesado, que é limitado por computação, o custo é maior, e é por isso que o ajuste precisa ser medido no seu padrão de uso, não copiado. Mas para um servidor de conversa, é a alavanca de maior retorno por esforço: um comando, zero hardware novo, e o throttling deixa de ser uma ameaça porque a placa nunca chega perto do limite térmico.

O trade-off, dito de frente

Limitar potência troca pico por consistência. Você abre mão de alguns por cento no melhor caso para garantir que o pior caso, depois de vinte minutos de carga, seja igual ao primeiro minuto. Para um benchmark de cinco minutos, é uma perda. Para um servidor que atende gente o dia inteiro, o número que importa é o sustentado, não o de pico, e o sustentado melhora.

O que exige cuidado estrutural

Garantir que um servidor de LLM opere 24 horas por dia sem degradação exige decisões que se tomam na montagem, não depois:

A frase para levar

Fazer inteligência artificial funcionar com consistência é metade arquitetura de software e metade engenharia térmica e elétrica. A primeira metade está na documentação do vLLM. A segunda está no gabinete, e ninguém escreve post sobre ela.

Resumo da conversa