Hardware para IA local: memória, largura de banda e consumo

A 17 de dezembro de 2024, a NVIDIA baixou de 499 para 249 dólares o preço da sua placa de desenvolvimento Jetson Orin Nano e publicou uma atualização de software para os exemplares já vendidos. Nenhum componente mudou, mas o débito da memória passou de 65 para 102 GB/s. Segundo as medições do fabricante, um modelo Llama 3.1 de 8 mil milhões de parâmetros gera desde então 19 tokens por segundo em vez de 14. O episódio resume a regra que governa o hardware de uma IA local: o tamanho e a velocidade da memória contam antes da potência de cálculo.

Um modelo de linguagem é um ficheiro relido a cada palavra

Um modelo de linguagem, o tipo de software que faz funcionar o ChatGPT ou o Le Chat da Mistral, apresenta-se sob a forma de um ficheiro que contém milhares de milhões de números. Chamam-se parâmetros, ou pesos: são os valores ajustados durante o treino, que determinam a maneira como o modelo encadeia as palavras. Um modelo dito «8B» contém 8 mil milhões.

Cada número ocupa um espaço que depende da sua precisão. Em 16 bits, o formato em que a maioria dos modelos é distribuída, um parâmetro ocupa dois bytes. Oito mil milhões de parâmetros fazem portanto 16 mil milhões de bytes, ou seja, cerca de 15 gibibytes (GiB, a unidade binária que as ferramentas mostram). A documentação do llama.cpp, um motor de execução livre muito usado para executar modelos em máquinas correntes, indica 14,96 GiB para o Llama 3.1 8B neste formato.

Para produzir um token, ou seja, um fragmento de palavra, o modelo lê praticamente todos estes parâmetros. Depois recomeça para o token seguinte. Um ficheiro de 15 GiB é assim relido dezenas de vezes por segundo enquanto a resposta aparece. Duas condições daí decorrem. O ficheiro deve caber por inteiro numa memória rápida, sem o que a máquina vai buscar o resto ao disco e a velocidade desmorona. E o débito dessa memória fixa o ritmo da resposta.

Capacidade: a memória onde o modelo tem de caber

Um PC clássico dispõe de duas memórias. A memória RAM serve o processador central. A memória de vídeo, ou VRAM, está soldada na placa gráfica e serve o processador gráfico, o GPU. A segunda é muito mais rápida, mas mais pequena e mais cara. A GeForce RTX 5090, a placa de consumo de topo da NVIDIA, comercializada desde 30 de janeiro de 2025 a partir de 1 999 dólares, incorpora 32 GB de memória GDDR7. É um teto: um modelo mais pesado não cabe numa única placa.

Outras máquinas usam uma memória unificada, uma única reserva partilhada pelo processador e pelo GPU. É o caso dos chips da Apple. Segundo a ficha técnica da Apple, o Mac Studio configura-se até 128 GB com o chip M5 Max e até 512 GB com o M5 Ultra. É também o princípio do DGX Spark da NVIDIA, uma caixa de 15 cm de lado e 1,2 kg que reúne 128 GB de memória LPDDR5X. A NVIDIA apresenta-o como capaz de executar modelos até 200 mil milhões de parâmetros.

A diferença torna-se decisiva logo que se visa um modelo de tamanho médio. Um modelo de 70 mil milhões de parâmetros comprimido para cerca de 4,9 bits por parâmetro pesa aproximadamente 43 GB, segundo o cálculo 70 mil milhões × 4,9 ÷ 8. Não cabe nos 32 GB de uma RTX 5090. Cabe em 128 GB de memória unificada, deixando espaço para o resto.

Largura de banda: o que fixa a velocidade de escrita

A largura de banda de memória é o débito a que o chip lê a sua memória, expresso em gigabytes por segundo. No seu guia de otimização da inferência, termo que designa a execução de um modelo já treinado, a NVIDIA explica que a geração de texto é limitada pela memória: a maior parte do tempo é gasta a transferir os pesos e os dados intermédios para as unidades de cálculo, não a calcular.

Daqui se tira uma estimativa simples: o número máximo de tokens por segundo vale aproximadamente a largura de banda dividida pelo peso do modelo. O Jetson Orin Nano Super permite verificá-lo. O Llama 3.1 8B em 4 bits pesa cerca de 4,6 GB e a placa lê 102 GB/s, donde um teto teórico de 22 tokens por segundo. A NVIDIA mede 19,1, ou seja, 87 % do teto. Antes da atualização, a 65 GB/s, a medição era de 14. A velocidade não acompanhou exatamente o débito (37 % de ganho para 57 % de largura de banda a mais), mas a regra dá a ordem de grandeza certa.

As fichas dos fabricantes dão os seguintes débitos. O Jetson Orin Nano Super lê 102 GB/s e o Jetson AGX Orin, nas versões de 32 e 64 GB, 204,8 GB/s. O Jetson AGX Thor e o DGX Spark apresentam cada um 273 GB/s. O Mac Studio atinge 460 ou 614 GB/s com o M5 Max consoante a configuração, e 1,2 TB/s com o M5 Ultra. A RTX 5090 sobe a 1 792 GB/s, mas em apenas 32 GB.

Estes números explicam uma deceção frequente. Uma máquina anunciada com grande potência de cálculo mas memória lenta escreve devagar. Inversamente, uma máquina com cálculo modesto e memória rápida parece reativa em conversa.

Quantização: menos bits por parâmetro

Se o peso do modelo limita a velocidade, pode reduzir-se. A quantização consiste em armazenar cada parâmetro em menos bits, 8 ou 4 em vez de 16. O princípio lembra a compressão de uma fotografia em JPEG: aceita-se uma perda de precisão em troca de um ficheiro mais leve.

A documentação do llama.cpp publica medições para o Llama 3.1 8B. Em 16 bits, o ficheiro tem 14,96 GiB e a geração atinge 29 tokens por segundo. No formato Q8_0, que usa em média 8,5 bits por parâmetro, tem 7,95 GiB para 51 tokens por segundo. No formato Q4_K_M, com 4,9 bits em média, desce para 4,58 GiB e sobe para 72 tokens por segundo. O ficheiro é dividido por 3,3 e a velocidade de escrita multiplicada por 2,5. A leitura da pergunta, essa, abranda um pouco, de 923 para 822 tokens por segundo, porque esta fase depende do cálculo e a descompressão acrescenta-lhe trabalho.

A perda de qualidade existe. É tanto mais sensível quanto mais pequeno o modelo e mais forte a compressão. Os formatos próximos de 4 bits, como o Q4_K_M, tornaram-se o compromisso mais corrente nas implementações locais. Descer para 2 ou 3 bits permite alojar um modelo maior na mesma máquina, com mais erros, o que é preciso medir nas próprias tarefas antes de o adotar.

Ler a pergunta e escrever a resposta: duas velocidades distintas

Um modelo não manipula palavras mas tokens, pedaços de texto de alguns caracteres. Em francês, uma palavra corrente corresponde a um ou dois tokens. O trabalho faz-se em duas fases. O pré-preenchimento lê todo o pedido, pergunta e documentos anexados, tratando os tokens em paralelo: depende sobretudo da potência de cálculo. A geração escreve depois a resposta um token após outro: depende da largura de banda.

As medições publicadas pelos contribuidores do llama.cpp em chips Apple evidenciam a diferença. No Llama 2 7B em 16 bits, um M4 Max com 40 núcleos gráficos lê 923 tokens por segundo e escreve 32. Um M5 Max com a mesma configuração lê 3 158 e escreve 37. A leitura é multiplicada por 3,4, a escrita progride 17 %. Entre os dois chips, a largura de banda passou de 546 para 614 GB/s, ou seja, 12 % a mais. A escrita acompanha a memória, a leitura acompanha o cálculo.

Na utilização, os dois números contam. Numa pergunta curta, só se nota a geração, e acima de uma quinzena de tokens por segundo o texto aparece mais depressa do que se lê. Para resumir um relatório de 50 páginas, que se pode estimar em cerca de 30 000 tokens, é o pré-preenchimento que faz esperar: a 900 tokens por segundo, é preciso pouco mais de meio minuto antes da primeira palavra, a 3 000 tokens por segundo cerca de dez segundos.

O contexto também ocupa memória

O contexto é a quantidade de texto que o modelo tem em conta num dado momento: a pergunta, os documentos fornecidos, o histórico da troca. Para não recalcular tudo a cada token, o modelo conserva resultados intermédios para cada token já lido. É a cache chave-valor, ou KV cache.

A Hugging Face dá a fórmula e um exemplo. Para o Llama 2 7B em 16 bits, cada token ocupa cerca de 0,5 MB de cache, de modo que 10 000 tokens representam quase 5 GB, um terço do peso do modelo. O guia da NVIDIA chega à mesma ordem de grandeza, cerca de 2 GB para 4 096 tokens. Os modelos mais recentes reduzem este custo partilhando parte desses dados entre as cabeças de atenção, uma técnica chamada grouped-query attention. Com as características publicadas do Llama 3.1 8B (32 camadas, 8 cabeças chave-valor de dimensão 128), a mesma fórmula dá cerca de 0,13 MB por token, ou seja, 1,3 GB para 10 000 tokens. Este último número é um cálculo nosso.

Esta cache multiplica-se pelo número de conversas abertas. Dez pessoas a trabalhar cada uma num documento de 10 000 tokens com o Llama 3.1 8B mobilizam cerca de 13 GB de cache, além dos 4,6 GB do modelo. Uma máquina de 8 GB que serve este modelo a uma pessoa não o servirá a uma equipa. Os motores de execução recentes sabem comprimir esta cache, como descreve a Hugging Face, mas o dimensionamento de partida continua a ser este.

CPU, GPU e NPU

O CPU, ou processador central, é generalista. Efetua poucas operações de cada vez e executa lentamente um modelo pequeno. O GPU, concebido para a renderização gráfica, executa milhares de operações idênticas em paralelo, o que corresponde ao cálculo de uma rede neuronal. É ele que executa hoje a grande maioria dos modelos de linguagem.

O NPU, ou unidade de processamento neuronal, é um circuito especializado nas operações das redes neuronais e concebido para consumir pouco. A Microsoft exige mais de 40 TOPS, ou seja, 40 biliões de operações por segundo, para que um computador ostente a designação Copilot+ PC. A sua documentação precisa que muitos NPU só tratam inteiros de baixa precisão, como o INT8, e que os modelos têm de ser convertidos para funcionar neles. O NPU convém a tarefas leves e contínuas, como a tradução em tempo real ou o desfocado do fundo em videoconferência. Para um modelo de linguagem, continua sujeito à largura de banda do resto do chip.

O número de TOPS lê-se, portanto, com prudência. A NVIDIA anuncia 67 TOPS para o Jetson Orin Nano Super precisando que se trata de TOPS «sparse», um modo de cálculo que supõe que parte das operações pode ser saltada. Em modo denso, o número desce para 33. Nenhum dos dois diz a que velocidade a placa escreverá uma resposta.

Três tamanhos de modelo, várias máquinas

As estimativas que se seguem aplicam a regra largura de banda dividida pelo peso do modelo. São tetos teóricos calculados por nós a partir das fichas dos fabricantes. A velocidade real fica abaixo: no Jetson, atingia 87 % do teto.

Um modelo de 8 mil milhões de parâmetros em 4 bits, cerca de 4,6 GB, cabe em todas as máquinas citadas. O Jetson Orin Nano Super, com 8 GB de memória e um consumo de 7 a 25 W, executa-o a 19 tokens por segundo medidos, com pouca margem para o contexto. Uma RTX 5090 teria um teto próximo de 390 tokens por segundo. Para uma pessoa, a placa embarcada basta. Para vários utilizadores em simultâneo, falta a memória antes da velocidade.

Um modelo de 20 a 35 mil milhões de parâmetros pesa de 12 a 21 GB em 4 bits. Cabe numa RTX 5090 como num Jetson AGX Orin de 64 GB. Neste último, a 204,8 GB/s, um modelo de 20 GB tem um teto de cerca de 10 tokens por segundo; na RTX 5090, cerca de 90.

Um modelo de 70 mil milhões de parâmetros em 4 bits, cerca de 43 GB, não cabe numa RTX 5090. Num DGX Spark a 273 GB/s, o seu teto é de cerca de 6 tokens por segundo. Num Mac Studio M5 Max a 614 GB/s, de cerca de 14. Num M5 Ultra a 1,2 TB/s, de cerca de 28. A capacidade permite carregar o modelo, a largura de banda decide se é agradável de usar.

Consumo, calor e ruído

Toda a eletricidade consumida por uma máquina acaba em calor. A RTX 5090 tem uma potência gráfica total de 575 W, e a NVIDIA pede uma fonte de alimentação de pelo menos 1 000 W para o PC que a acolhe. É a ordem de grandeza de um pequeno aquecedor elétrico, cujo calor é evacuado por ventoinhas. No extremo oposto, o Jetson Orin Nano Super funciona entre 7 e 25 W e o Jetson AGX Orin entre 15 e 60 W. O DGX Spark tem uma fonte de 240 W para um chip de 140 W, e a NVIDIA anuncia 35 dB(A) em funcionamento. A Apple indica para o Mac Studio uma potência máxima contínua de 480 W.

Ao longo de um ano, a diferença quantifica-se. Uma máquina que consome 60 W em contínuo usa cerca de 525 kWh por ano (60 W × 8 760 horas). A 600 W, são cerca de 5 260 kWh. Estes cálculos supõem uma carga constante, o que sobrestima o consumo real de uma máquina muitas vezes em repouso, mas dão o fator dez que separa as duas famílias.

O ruído e o calor decidem o local onde a máquina será instalada. Um PC equipado com uma placa de jogo de topo é pensado para sessões de algumas horas numa divisão ventilada. Arrumado num armário, reduz a sua frequência para se proteger e depois desliga-se. Os módulos Jetson são concebidos para robôs e equipamentos industriais, com gamas de potência fixadas pelo fabricante e funcionamento prolongado. Este critério pesa pouco numa ficha técnica e muito após dois anos de exploração.

Dimensionar uma máquina em quatro cálculos

O método resume-se a quatro etapas. Calcula-se primeiro o peso do ou dos modelos escolhidos: número de parâmetros multiplicado pelo número de bits por parâmetro, dividido por 8. Acrescenta-se a cache de contexto, multiplicada pelo número de conversas simultâneas esperadas. Compara-se o total com a memória disponível, guardando uma margem para o sistema. Divide-se por fim a largura de banda pelo peso do modelo para obter o teto de velocidade, e verificam-se o consumo e o ruído face ao local de instalação.

Tomemos uma equipa de dez pessoas que quer um modelo de 30 mil milhões de parâmetros em 4 bits para trabalhar em documentos de 10 000 tokens. O modelo pesa cerca de 18 GB. A cache, consoante a arquitetura, situa-se entre 2 e 5 GB por utilizador, ou seja, 20 a 50 GB para a equipa. É portanto necessária uma máquina de 64 a 128 GB e, numa primeira aproximação, pelo menos 300 GB/s de largura de banda para ultrapassar 15 tokens por segundo. Estes números são estimativas; só ensaios na máquina visada os confirmam.

É esta grelha que a HOMN aplica para dimensionar as suas caixas: partir dos modelos e do número de utilizadores, e daí deduzir a memória, o débito e o envelope térmico. Uma ficha técnica que omita a capacidade de memória ou a largura de banda não permite fazer este cálculo, seja qual for o número de TOPS afixado.

Quanta memória é preciso para executar um LLM em local?

O peso de um modelo em bytes vale aproximadamente o número de parâmetros multiplicado pelo número de bits por parâmetro, dividido por 8. Um modelo de 8 mil milhões de parâmetros pesa cerca de 16 GB em 16 bits e 4,6 GB em 4 bits. É preciso acrescentar a cache de contexto, que cresce com o comprimento dos documentos e o número de utilizadores simultâneos.

Por que razão a largura de banda de memória conta mais do que a potência de cálculo para um LLM?

Para escrever cada token, o modelo relê praticamente todos os seus parâmetros em memória. A velocidade de geração é, portanto, limitada pela largura de banda dividida pelo peso do modelo. A potência de cálculo conta sobretudo para a leitura de documentos longos, chamada pré-preenchimento.

O que é a quantização de um modelo de IA?

É o armazenamento dos parâmetros em menos bits, por exemplo 4 em vez de 16. Segundo a documentação do llama.cpp, o Llama 3.1 8B passa assim de 14,96 para 4,58 GiB e de 29 para 72 tokens por segundo na máquina de teste. A qualidade baixa ligeiramente, e mais nos modelos pequenos.

Um PC com NPU basta para uma IA local numa empresa?

Um NPU convém a tarefas leves, como a transcrição ou um pequeno modelo utilizado por uma só pessoa. Partilha a memória e a largura de banda do resto do chip, o que limita o tamanho e a velocidade dos modelos de linguagem. Para servir uma equipa, a capacidade de memória e o débito prevalecem sobre os TOPS anunciados.