Aumentando o Desempenho de LLM com Offloading de CPU
Um novo método melhora a eficiência de modelos de linguagem grandes, compartilhando tarefas entre GPU e CPU.
Xuanlin Jiang, Yang Zhou, Shiyi Cao, Ion Stoica, Minlan Yu
― 4 min ler
Índice
Hoje em dia, no mundo da tecnologia, os grandes modelos de linguagem (LLMs) estão por toda parte. Eles alimentam chatbots que conseguem ter conversas, ajudam na geração de texto e até dão uma força na programação. Porém, rodar esses modelos exige uma porção de memória e poder de processamento. A maioria das configurações depende de GPUs potentes, que podem ser bem caras. Neste artigo, vamos falar de uma abordagem esperta para economizar memória e aumentar o desempenho, usando CPUs junto com GPUs.
O Problema da Memória da GPU
As GPUs modernas são poderosas, mas têm uma limitação: possuem uma quantidade fixa de memória. Isso pode ser um problema ao rodar grandes modelos de linguagem que precisam de mais memória do que a disponível. Se a memória fica cheia, o sistema não consegue lidar com tarefas maiores de forma eficiente, resultando em capacidade de processamento desperdiçada. Os usuários podem acabar pagando caro por GPUs top de linha, mas ainda assim ter um desempenho ruim só por causa das limitações de memória.
Uma Solução Criativa
A gente apresenta um sistema que transfere parte da carga de trabalho da GPU para a CPU. Ao descarregar certas tarefas, como gerenciar partes da memória e cálculos do modelo, conseguimos maximizar o uso tanto da GPU quanto da CPU. Esse método pode ajudar a aumentar os tamanhos dos lotes que a GPU consegue lidar, levando a um desempenho geral melhor.
Como Funciona
A mágica está em duas técnicas principais:
Pipeline Assimétrico GPU-CPU: Aqui, o sistema roda dois tipos de tarefas ao mesmo tempo. Um conjunto de solicitações será gerido pela CPU, enquanto outro continuará rodando na GPU. Esse trabalho em equipe permite que ambas as partes do sistema fiquem ocupadas ao mesmo tempo, em vez de uma ficar parada enquanto a outra trabalha.
Agendamento Consciente da Carga: Esse algoritmo de agendamento esperto decide dinamicamente aonde enviar as tarefas com base nas cargas de trabalho atuais. Ele monitora quanto trabalho cada parte do sistema consegue lidar, garantindo que nem a GPU nem a CPU fiquem sobrecarregadas.
Usando essas duas técnicas juntas, conseguimos equilibrar a carga e manter tudo funcionando direitinho.
Benefícios do Descarregamento
Agora, vamos ver os benefícios dessa abordagem de descarregamento:
- Maior Vazão: Aproveitando tanto a CPU quanto a GPU, o sistema consegue lidar com mais tarefas ao mesmo tempo, melhorando o desempenho geral.
- Eficiência de Custo: Essa solução pode reduzir a necessidade de hardware mais caro, permitindo que os usuários usem os recursos da CPU que já têm.
- Latência Mantida: O tempo de resposta para as solicitações dos usuários não sofre, o que significa que o sistema ainda se sai bem em interações em tempo real.
Aplicações do Mundo Real
Esse sistema não é só uma ideia teórica; ele pode ser aplicado em vários cenários do mundo real. Seja para ajudar na programação, resumir textos ou criar chatbots envolventes, essa abordagem pode melhorar o desempenho sem fazer o bolso sangrar.
Desafios Ao Longo do Caminho
Embora a solução pareça ótima, existem desafios a serem enfrentados. As diferenças entre as características da GPU e da CPU podem complicar o gerenciamento da carga de trabalho. As GPUs são ótimas para lidar com cálculos pesados rapidamente, enquanto as CPUs se destacam em gerenciar tarefas de memória maiores, mas são mais lentas. Encontrar o equilíbrio certo é fundamental.
Conclusão
O uso do descarregamento de tarefas da GPU para a CPU oferece uma forma promissora de melhorar o desempenho de grandes modelos de linguagem. Ao adotar agendamentos cuidadosos e sobrepor cargas de trabalho, esse método pode permitir uma melhor utilização dos recursos. Em um mundo onde a computação eficiente é fundamental, essa abordagem se destaca como uma solução inteligente para enfrentar a crise de memória nas GPUs.
Vamos torcer para que consigamos tornar a tecnologia mais eficiente, um CPU de cada vez!
Título: NEO: Saving GPU Memory Crisis with CPU Offloading for Online LLM Inference
Resumo: Online LLM inference powers many exciting applications such as intelligent chatbots and autonomous agents. Modern LLM inference engines widely rely on request batching to improve inference throughput, aiming to make it cost-efficient when running on expensive GPU accelerators. However, the limited GPU memory has largely limited the batch size achieved in practice, leaving significant GPU compute resources wasted. We present NEO, an online LLM inference system that offloads part of attention compute and KV cache states from the GPU to the local host CPU, effectively increasing the GPU batch size and thus inference throughput. To this end, NEO proposes asymmetric GPU-CPU pipelining and load-aware scheduling to balance GPU and CPU loads and fully utilize their compute and memory resources. We evaluate NEO on a wide range of workloads (i.e., code generation, text summarization), GPUs (i.e., T4, A10G, H100), and LLM models (i.e., 7B, 8B, 70B). NEO achieves up to 7.5$\times$, 26%, and 14% higher throughput compared to GPU-only approach on T4, A10G, and H100 GPUs, respectively, while maintaining the same latency; with more powerful CPUs, NEO achieves up to 79.3% throughput gain on A10G GPU.
Autores: Xuanlin Jiang, Yang Zhou, Shiyi Cao, Ion Stoica, Minlan Yu
Última atualização: Nov 2, 2024
Idioma: English
Fonte URL: https://arxiv.org/abs/2411.01142
Fonte PDF: https://arxiv.org/pdf/2411.01142
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.