Servidor de inferência de 576 GB de VRAM: diário de arranque

A maioria dos textos sobre servidores descreve a máquina que foi encomendada. Este descreve a máquina que foi construída — incluindo as duas coisas que estavam mal quando arrancou pela primeira vez, e aquela que nunca explicámos por completo.

Configuração: rack 7U · 2× AMD EPYC 7643 (96C/192T) · 512 GB DDR4 ECC · 6× NVIDIA RTX PRO 6000 Blackwell Max-Q, 576 GB GDDR7 · 2 TB + 4 TB NVMe
Montagem e comissionamento: agosto de 2026, oficina Kentino, Praga · Estado: entregue

Chassis 7U do Kentino AI-7, fechado e ligado na bancada
A máquina acabada na bancada de comissionamento, com o painel frontal retirado para os testes de fluxo de ar.

Achamos que esse é o artigo mais útil. Copiar uma lista de componentes qualquer um consegue.

O que é

Seis placas RTX PRO 6000 Blackwell Max-Q, 96 GB cada, numa plataforma EPYC Rome de duplo socket com 512 GB de memória ECC. 576 GB de VRAM numa só máquina, o suficiente para alojar um modelo de 753 mil milhões de parâmetros em 4 bits e ainda sobrar espaço para um milhão de tokens de contexto.

A variante Max-Q faz diferença. Com 300 W por placa em vez de 600, seis delas cabem dentro de um envelope térmico e elétrico que uma oficina — e mais tarde uma sala de servidores — consegue realmente suportar. A potência medida à tomada em carga máxima foi de ~2.9 kW, cerca de 80% de um único circuito de 16 A/230 V.

O chassis é um desenho nosso, de 7U: dois blocos de quatro baias de GPU arrefecidos de forma independente, para que nenhuma placa fique na exaustão de mais de três outras.

Chassis 7U aberto visto de cima, com os separadores das baias de GPU
Dois blocos de quatro baias arrefecidos de forma independente. Nenhuma placa fica na exaustão de mais de três outras.

A primeira falha: duas GPU a funcionar discretamente a meia velocidade

O sistema arrancou, as seis placas foram todas enumeradas e o nvidia-smi parecia impecável.

Duas delas estavam a funcionar em PCIe Gen4 x8 em vez de x16.

Nada reportou qualquer erro. O driver estava satisfeito, as placas funcionavam, a inferência corria. A única forma de detetar isto era medir a largura de banda entre host e dispositivo placa a placa e reparar que duas delas devolviam 13.9 GB/s onde as outras devolviam 27.7.

A causa era uma falha de camada física em dois conectores do chassis — não nas placas, não na motherboard, não no desenho das risers. Ambas as ligações foram passadas para conectores sobresselentes e as seis confirmaram então Gen4 x16 sob carga. Os dois conectores suspeitos ficam registados pelo nome no ficheiro da montagem e permanecem sem uso durante toda a vida da máquina.

Uma GPU que treina com metade da largura de pista não se anuncia. Se o seu processo de comissionamento não medir a largura de banda PCIe por placa sob carga, vai expedir esta falha e nunca saber dela.

Interior do chassis com as baias de GPU e o arrefecimento
Interior durante a montagem. Cada placa tem a sua própria ligação por riser à motherboard — que é exatamente onde estava a falha.

A segunda falha: um padrão de ECC que não era a memória

A meio do comissionamento, dois DIMM começaram a registar erros ECC corrigíveis. Corrigíveis significa que o hardware os detetou e corrigiu: sem perda de dados, sem respostas erradas, sem impacto em qualquer resultado. Mas dois módulos a reportar erros são normalmente dois módulos a substituir.

Não os substituímos, e a razão é a parte interessante.

Os eventos estavam espaçados de 4 h 30 m e 4 h 01 m, e cada um deles ocorreu em ambos os módulos dentro do mesmo segundo. Dois módulos de memória marginais e independentes não falham a um intervalo quase fixo, e muito menos falham no mesmo segundo três vezes seguidas. Não é assim que se comporta silício em degradação. É a assinatura de algo externo e periódico.

O intervalo coincidia com uma carga de comutação de elevada potência no ambiente de comissionamento. Corremos então ~20 horas de soak instrumentado sob carga real contínua, com telemetria por minuto em todas as seis GPU, no CPU, na memória, no disco e no registo de eventos do BMC. Zero eventos ECC.

E assim os módulos ficaram.

O que fazemos questão de dizer: nunca correlacionámos os eventos com um ciclo registado da fonte suspeita. A atribuição é inferência, não prova. Reportámos ao cliente a observação, o intervalo e a janela de teste, e dissemos com clareza que não se trata de uma causa raiz provada. Se a causa era ambiental, não viaja com a máquina — e vinte horas de silêncio sob carga são uma boa evidência, não uma garantia.

Uma nota prática que nos custou tempo: esta plataforma usa tratamento de erros pelo firmware em primeiro lugar, por isso os contadores ECC do lado do Linux leem zero, aconteça o que acontecer. A saúde da memória tem de ser lida no registo de eventos do BMC. Se monitorizar o edac e mais nada, está a monitorizar coisa nenhuma.

O que a máquina faz de facto

Todos os valores foram medidos neste sistema em concreto, não retirados de uma ficha técnica.

Computação e consistência

Medição Resultado
Matmul denso FP16, por placa 291–302 TFLOPS (3.5% de dispersão entre as seis)
Largura de banda de VRAM, por placa ~1,471 GB/s (uniforme até 0.2%)
Inferência com paralelismo de dados em seis vias 3,859 tok/s · 90.8% de eficiência de escalabilidade
Dispersão por réplica entre as seis GPU 0.45%

Essa dispersão de meio por cento entre seis placas é o número que mais nos importa. Significa que nenhuma placa está discretamente a render abaixo do esperado — e só tem significado porque a falha de PCIe acima foi encontrada primeiro.

Inferência de modelos grandes

GLM-5.2 — 753 mil milhões de parâmetros (40 B ativos), 4 bits, 341 GB residentes nas seis placas:

Pedidos em simultâneo 1 4 16 32 48
Geração em tok/s 38.0 78.5 117–120 148.1 172.2

Carrega também o contexto nativo de 1,048,576 tokens do modelo neste hardware — 494 GiB de VRAM, deixando 6.6 GiB livres na placa mais apertada. Funciona, mas é uma margem fina e dissemos isso mesmo.

Afinar o micro-lote de prefill (-b/-ub 4096) fez subir o processamento de prompt de 403 para 606 tok/s, um ganho de 50% com uma alteração de uma linha. A descodificação especulativa acrescentou +53% em fluxo único, mas custou 6% no trabalho em lote com prompts longos, pelo que é ativada por carga de trabalho em vez de globalmente.

Uma placa RTX PRO 6000 Blackwell Max-Q instalada
Uma das seis placas RTX PRO 6000 Blackwell Max-Q. 96 GB cada, 300 W cada.

Burn-in

810,033 matmuls em seis GPU a 100% de carga. Zero erros de computação. Pico de 88 °C, 300 W sustentados por placa, sem throttling térmico — o clocks_event_reasons indicou Not Active do princípio ao fim.

Onde esta máquina está no limite, e dissemo-lo

A margem térmica é de ~2 °C. Pico de 88 °C contra um ponto de throttling de ~90 °C, com uma temperatura ambiente de 28–33 °C numa oficina sem climatização em agosto. Numa sala abaixo dos 25 °C há folga confortável. Numa sala quente não há. As cargas de trabalho reais e contínuas atingiram as mesmas temperaturas que o burn-in sintético, pelo que esta não é uma preocupação só de testes sintéticos.

A alavanca óbvia é um limite de potência da GPU — 260 W em vez de 300 W. Não medimos quanto é que isso custa em débito nesta máquina, por isso não o recomendámos como se o tivéssemos medido. Teste-o contra a sua própria carga de trabalho.

A pilha de software é específica e frágil. O GLM-5.2 não corre em vLLM nem em SGLang nesta geração de GPU — três limitações distintas a montante. O llama.cpp é o caminho que funciona. À parte disso, a instalação de vLLM traz um patch local que corrige um crash em concorrência com modelos quantizados, e esse patch não sobrevive a um pip install -U vllm. Fixe as versões.

Duplo socket significa NUMA. A largura de banda entre host e dispositivo divide-se por socket: as GPU 0–2 num, 3–5 no outro, com uma penalização de cerca de 20% para buffers de host alocados no nó errado. Não é uma falha — é física — mas tem de fixar os processos com numactl sempre que a largura de banda host↔dispositivo seja importante.

Há um teste genuinamente incompleto. A fase final de carga máxima combinada CPU+GPU foi interrompida por uma avaria do equipamento de distribuição elétrica da oficina. As ~20 horas de testes de resistência em carga mista cobrem o caso real de operação, pelo que reportámos a lacuna em vez de discretamente rebatizar os ensaios de resistência como o teste em falta.

O servidor acabado, fechado e pronto para expedição
Fechado e pronto para expedição.

Porque publicamos as falhas

Um relatório de comissionamento que diz que passou tudo não lhe diz nada sobre quem o escreveu. Toda a máquina com esta complexidade tem alguma coisa mal no primeiro arranque. A questão é se isso é encontrado na nossa bancada ou no seu rack.

Nesta montagem foram dois conectores a degradar um quarto do tecido de GPU para metade da velocidade, invisíveis a todos os indicadores de estado do sistema. Foi preciso medir para encontrar e dez minutos para corrigir.

É para isso que serve o comissionamento.

Voltar para o blogue