Voltar ao blog AI Infrastructure

Como estimar a memória da GPU para inferência de LLM auto-hospedada

Estime os pesos do modelo, o cache KV, a concorrência e a sobrecarga do ambiente de execução; depois, valide os números com uma carga de inferência representativa antes de escolher a infraestrutura de GPU.

Diagrama que mostra como os pesos do modelo, o cache KV, as solicitações concorrentes e a sobrecarga do ambiente de execução contribuem para o uso de memória da GPU

Por que o tamanho do modelo, por si só, não determina a memória necessária da GPU

A quantidade de parâmetros de um modelo oferece uma estimativa inicial útil, mas não constitui um orçamento completo da memória da GPU. A inferência também precisa de memória para o cache de chave e valor (KV) e para as ativações, enquanto o ambiente de execução, a arquitetura do modelo e a configuração de disponibilização podem afetar o uso real.

Um modelo que cabe na memória ao ser carregado ainda pode exceder a memória disponível quando chegam solicitações. Sequências mais longas e mais solicitações ativas aumentam a necessidade de cache KV. Outras cargas de trabalho na GPU e a sobrecarga do ambiente de execução também disputam memória.

Trate qualquer cálculo como uma estimativa para planejamento, não como uma garantia de hardware. O resultado depende do modelo específico, do ambiente de execução de inferência e da configuração de disponibilização.

  • Estime os pesos e o cache KV como componentes separados.
  • Descreva a carga de trabalho, incluindo o comprimento das sequências e a concorrência, antes de comparar as estimativas com a memória disponível da GPU.
  • Valide a configuração planejada no ambiente de implantação pretendido, em vez de se basear apenas no nome do modelo ou na quantidade de parâmetros.
Por que o tamanho do modelo, por si só, não determina a memória necessária da GPU

Estime a memória dos pesos do modelo, incluindo a quantização

Para uma estimativa inicial, multiplique a quantidade de parâmetros do modelo pelo número de bytes usados por parâmetro. Uma correspondência aproximada comum é FP32 com 4 bytes, FP16 com 2 bytes, INT8 com 1 byte e INT4 com 0,5 byte por parâmetro.

Por exemplo, um modelo hipotético de 8 bilhões de parâmetros teria uma estimativa idealizada de 16 GB com 2 bytes por parâmetro, 8 GB com 1 byte ou 4 GB com 0,5 byte. Estes são cálculos decimais ilustrativos apenas para os pesos; não incluem o cache KV, as ativações nem as necessidades do ambiente de execução.

A quantização pode reduzir a memória dos pesos usando menos bits por parâmetro, mas essa estimativa não descreve por completo o modelo implantado. Verifique o formato real do modelo e o ambiente de execução, e considere as compensações de precisão ao decidir se uma configuração quantizada é adequada.

  • Registre a quantidade de parâmetros e o formato de precisão ou quantização que pretende usar na disponibilização.
  • Calcule os pesos como: quantidade de parâmetros × bytes por parâmetro.
  • Mantenha as unidades consistentes: GB decimal e GiB binário são unidades diferentes, e as ferramentas da GPU podem apresentar a memória de maneiras distintas.
  • Não trate o resultado como a memória total necessária para atender às solicitações.
Estime a memória dos pesos do modelo, incluindo a quantização

Leve em conta o comprimento do contexto e o cache KV

Durante a inferência, o cache KV armazena dados de chave e valor para os tokens das sequências ativas. O uso de memória depende do tamanho do lote, do comprimento da sequência, da quantidade de camadas, da quantidade de cabeças KV, da dimensão da cabeça e dos bytes por elemento do cache.

Uma estimativa útil é: bytes do cache KV = 2 × tamanho do lote × comprimento da sequência × quantidade de camadas × quantidade de cabeças KV × dimensão da cabeça × bytes por elemento do cache. O fator 2 representa as chaves e os valores.

Para um exemplo explicitamente hipotético, suponha uma configuração com 32 camadas, 8 cabeças KV, dimensão da cabeça de 128, elemento de cache de 2 bytes, sequência de 4.096 tokens e tamanho de lote 1. A fórmula resulta em 536.870.912 bytes, ou cerca de 0,5 GiB. Com tamanho de lote 4 e todas as demais suposições inalteradas, a estimativa é de cerca de 2 GiB. Esses valores servem apenas para ilustrar o cálculo; não descrevem um modelo específico.

Para planejar, use o comprimento da sequência que o ambiente de execução pode manter de cada vez, incluindo os tokens do prompt e os tokens gerados. Um limite de contexto longo não significa que todas as solicitações usarão esse limite por completo, mas solicitações com sequências no limite máximo podem determinar a necessidade máxima de cache.

  • Consulte fontes confiáveis de documentação ou configuração do modelo para obter a quantidade de camadas, a quantidade de cabeças KV e a dimensão da cabeça.
  • Use o tipo de dados do cache e o comportamento de disponibilização correspondentes ao ambiente de execução pretendido.
  • Estime tanto os comprimentos de sequência típicos quanto os mais longos que espera atender.
  • Se o modelo usar atenção de consultas agrupadas, use a quantidade de cabeças KV, em vez de presumir que ela é igual à quantidade de cabeças de consulta.

Considere solicitações concorrentes, processamento em lotes e cargas de trabalho compartilhadas na GPU

A fórmula do cache KV varia proporcionalmente tanto ao tamanho do lote quanto ao comprimento da sequência. Por isso, várias solicitações ativas podem exigir muito mais cache do que uma única solicitação, especialmente quando elas têm contextos longos.

Concorrência e tamanho do lote estão relacionados, mas não devem ser tratados como equivalentes sem verificar a configuração de disponibilização. Um servidor pode combinar solicitações em lotes ou gerenciar sequências ativas de outras maneiras. Baseie a estimativa no comportamento esperado do ambiente de execução real.

Considere também tudo o que estiver usando a GPU. Outro processo ou modelo pode consumir memória que, de outro modo, estaria disponível para a inferência. A fragmentação da memória e as escolhas de configuração do ambiente de execução também podem afetar se uma configuração que parece caber no papel funcionará na prática.

  • Registre a média e o pico esperados de solicitações ativas, não apenas o volume diário de solicitações.
  • Inclua os comprimentos das sequências dessas solicitações ativas.
  • Verifique se o processamento em lotes está habilitado e como o ambiente de execução de disponibilização lida com solicitações de comprimentos de sequência diferentes.
  • Liste os outros processos e cargas de trabalho na GPU que podem ocorrer ao mesmo tempo que a inferência.

Inclua a sobrecarga do ambiente de execução e do hardware sem presumir uma margem fixa

Não existe uma margem fixa universalmente confiável a acrescentar a todas as estimativas. O uso real de memória pode variar conforme o mecanismo de inferência, as otimizações do ambiente de execução, a estratégia de processamento em lotes, a arquitetura do modelo e a fragmentação da memória. Fatores específicos da estrutura de software e do modelo também importam.

Em vez de acrescentar uma porcentagem arbitrária e tratar o resultado como definitivo, mantenha a sobrecarga como uma incógnita explícita a ser medida. Comece pelos cálculos dos pesos e do cache e, em seguida, compare-os com o uso observado no ambiente de execução e na carga pretendidos.

Verifique a memória utilizável da GPU conforme informada no ambiente em que o serviço será executado. A capacidade nominal não determina quanta memória permanecerá disponível depois que outras cargas de trabalho e o ambiente de execução alocarem memória.

  • Documente o mecanismo de inferência, a configuração do modelo e as definições de disponibilização usados na estimativa.
  • Identifique as cargas de trabalho que compartilharão a GPU e se serão executadas ao mesmo tempo.
  • Não apresente uma margem de segurança não testada como requisito universal.
  • Use os resultados dos testes para estabelecer uma margem operacional adequada à sua própria carga de trabalho.

Defina o perfil da carga de trabalho antes de escolher a infraestrutura

Uma boa estimativa começa pela descrição da carga de trabalho, não apenas pelo nome do modelo. Registre os detalhes da arquitetura necessários para calcular o cache, a precisão dos pesos e os comprimentos e níveis de concorrência que o serviço precisa atender.

Separe o uso típico do uso de pico. Se o sistema atende solicitações variadas, um único comprimento médio de sequência pode ocultar a necessidade de memória de prompts longos ou de várias solicitações simultâneas e demoradas. Teste um padrão representativo e também o maior caso plausível que precisa ser atendido.

  • Modelo: quantidade de parâmetros, detalhes da arquitetura necessários para a fórmula do cache KV e precisão ou quantização dos pesos.
  • Prompt: comprimento típico e máximo do prompt, em tokens.
  • Saída: comprimento esperado e máximo dos tokens gerados.
  • Sequência: comprimento do prompt mais a saída que o ambiente de execução pode precisar manter.
  • Disponibilização: quantidade típica e máxima esperada de solicitações ativas, comportamento do processamento em lotes e configurações relevantes do ambiente de execução.
  • Ambiente: memória da GPU disponível para o processo e quaisquer outras cargas de trabalho que compartilhem a GPU.

Valide a estimativa com um teste representativo

Execute o modelo real com o ambiente de execução de inferência e a configuração de disponibilização pretendidos antes de se comprometer com a estimativa. Comece com uma carga de trabalho normal e, depois, teste as sequências mais longas e a concorrência mais alta que representem o pico esperado.

Observe a memória da GPU durante o carregamento do modelo e enquanto as solicitações estiverem ativas. Registre a configuração junto com as medições, para que os resultados continuem úteis quando você alterar o modelo, os limites de contexto, a quantização, o ambiente de execução ou o processamento em lotes.

Uma única solicitação bem-sucedida não comprova que o sistema consegue lidar com a carga de pico. Repita o teste com solicitações concorrentes representativas e investigue qualquer aumento inesperado de memória ou falha antes de considerar a configuração pronta.

  • Teste o mesmo formato de modelo, precisão, ambiente de execução e configurações previstos para a implantação.
  • Inclua comprimentos realistas de prompt e saída e, em seguida, teste a concorrência de pico pretendida.
  • Monitore o uso real de memória durante todo o carregamento e atendimento, não apenas na inicialização.
  • Repita as medições após mudanças importantes no modelo ou na configuração de disponibilização.

Quando a carga de trabalho excede a memória disponível da GPU

Primeiro, identifique qual parte da carga de trabalho causa o excesso. Se o problema forem sequências longas, reduzir o comprimento do contexto ou limitar solicitações excepcionalmente longas pode diminuir a necessidade de cache KV. Se os pesos do modelo forem o fator dominante, a quantização pode reduzir a memória dos pesos, com uma compensação de precisão a avaliar conforme o modelo e a tarefa.

Outras opções incluem reduzir a concorrência de pico ou alterar a configuração de disponibilização. Cada escolha muda o comportamento do serviço; portanto, verifique se os limites de contexto, o tratamento das solicitações e a qualidade das saídas resultantes atendem aos requisitos da aplicação.

Se essas mudanças não forem suficientes para atender às necessidades da carga de trabalho, reavalie a capacidade da GPU ou o projeto da implantação. Não presuma que descarregar parte do processamento, uma configuração específica do ambiente de execução ou uma determinada GPU resolverá o problema sem testes: as estimativas apresentadas não estabelecem uma recomendação universal de hardware.

Após qualquer mudança, repita o teste de carga representativo. Uma configuração que cabe com concorrência ou comprimento de contexto reduzidos ainda precisa atender aos requisitos reais da aplicação.

  • Reduza o comprimento do contexto quando a carga de trabalho puder tolerar prompts ou saídas mais curtos.
  • Avalie a quantização dos pesos e verifique a compensação de precisão para seu caso de uso.
  • Reduza o número máximo de solicitações concorrentes ou ajuste o processamento em lotes e, em seguida, teste o efeito no serviço.
  • Se a carga de trabalho necessária ainda não couber, compare as opções de implantação com base em resultados medidos, em vez de se basear apenas no cálculo dos pesos.

Perguntas frequentes

A quantidade de parâmetros do modelo é suficiente para estimar a memória da GPU?

Não. A quantidade de parâmetros e a precisão dos pesos oferecem uma estimativa inicial da memória dos pesos do modelo. A inferência também precisa de memória para o cache KV e as ativações, e o ambiente de execução, a arquitetura e a configuração de disponibilização afetam o uso real.

Como o comprimento do contexto afeta a memória da GPU?

A necessidade de cache KV aumenta proporcionalmente ao comprimento da sequência. Por isso, prompts e sequências geradas mais longos podem usar mais memória, e o efeito aumenta com a quantidade de sequências ativas.

A quantização reduz os requisitos de memória da GPU?

Ela pode reduzir a memória usada pelos pesos ao utilizar menos bits por parâmetro. Não elimina as necessidades do cache KV nem do ambiente de execução, e envolve uma compensação de precisão que deve ser avaliada para o modelo e a tarefa pretendidos.

Quanta memória extra da GPU devo reservar para a sobrecarga do ambiente de execução?

Não há uma margem fixa universal que seja válida para todos os modelos e ambientes de execução. Meça a memória com o mecanismo de inferência, o modelo e a configuração de disponibilização pretendidos, incluindo solicitações concorrentes representativas e outras cargas de trabalho na GPU.

Qual é a melhor maneira de validar uma estimativa de memória da GPU?

Teste o modelo e o ambiente de execução reais com comprimentos realistas de prompt e saída. Depois, repita o teste na concorrência máxima esperada enquanto monitora a memória. Registre as configurações e repita o teste quando elas mudarem.

Fontes e leituras adicionais

  1. LLM Inference Memory Estimation Tool — GitHub project
  2. llm-resource-planner — Python Package Index
  3. SelfHostLLM GPU Memory Calculator — GitHub project
  4. Hardware & VRAM Budgeting — Khronos Group