Gerenciando a memória de forma eficiente com vTensor
vTensor otimiza a memória para tarefas de computação de alto desempenho.
― 6 min ler
Índice
vTensor é um sistema criado pra gerenciar a memória de kernels CUDA, que são usados em tarefas que precisam de computação de alto desempenho, tipo IA e deep learning. O foco principal dele é lidar com dados de forma eficiente, permitindo um desempenho melhor e menos espaço desperdiçado na memória.
O que é vTensor?
No fundo, vTensor é um jeito de representar a memória como ponteiros simples, parecido com como a memória normal funciona no CUDA. Essa simplicidade, no entanto, esconde uma estrutura mais complexa embaixo. O ponteiro vTensor é criado por um componente chamado vTensor Manager (VTM). Quando uma solicitação de memória é feita, um programador, conhecido como vTensor Scheduler (VTS), elabora um plano de como alocar a memória. Depois, outra parte, chamada vTensor Operation (VTO), realmente cuida da alocação da memória, garantindo que tudo funcione direitinho.
Como o vTensor Funciona
O ponteiro vTensor aponta pra um endereço virtual na memória da GPU. Esse endereço virtual precisa ser contínuo, o que significa que tem que ser um único bloco de espaço. Abaixo desse endereço virtual, a GPU gerencia como esse espaço se relaciona com a memória física real. Essa configuração permite que a GPU puxe dados diretamente da memória quando necessário.
Um ponto chave sobre o vTensor é que, enquanto os pedaços físicos de memória estão localizados na GPU, as informações sobre esses pedaços podem ser acessadas e manipuladas pela CPU. Cada pedaço tem um tamanho de 2 MB, e os handles desses pedaços são armazenados na memória principal da CPU. Essa configuração única abre a porta pra alguns métodos inovadores de gerenciar a memória de forma eficaz, especialmente quando se trata de desfragmentar a memória que é usada pra cache.
O Pool vTensor
O Pool vTensor é uma estrutura que ajuda a organizar e gerenciar os dados vTensor de forma eficiente. Ele tem duas estruturas principais: um conjunto ordenado e uma árvore radix.
vSet e pSet
vSet é um conjunto ordenado que armazena endereços virtuais ligados ao vTensor. Esse conjunto mantém o controle de todas as páginas e seus handles físicos correspondentes. Os handles físicos são os pontos de referência para os pedaços de memória reais.
pSet funciona de forma semelhante, mas mantém um registro rigoroso dos handles físicos, garantindo que eles correspondam um a um aos pedaços físicos. Cada handle está ligado a certas informações sobre a memória física que ele mapeia, incluindo se está ativo ou não. Se nenhuma solicitação referencia um handle físico mais, ele é removido do pSet.
rTree
A árvore radix é outra parte desse pool que ajuda a gerenciar a memória em tarefas baseadas em conversação, onde as mesmas informações podem ser necessárias repetidamente. Quando uma solicitação é feita, se essa solicitação corresponder a um padrão armazenado anteriormente, o sistema consegue acessar rapidamente as informações necessárias sem ter que passar pelo processo de alocação de memória de novo.
Operações vTensor
As Operações vTensor são as tarefas específicas que realizamos no vTensor e estão estruturadas em três módulos principais: alocação, desalocação e operações de árvore.
Alocação e Desalocação
Quando a memória é alocada usando o vTensor, existem dois tipos de alocações. A alocação física lida com os pedaços reais de memória que estão armazenados na GPU. Se não houver pedaços disponíveis suficientes no sistema, novos pedaços são criados e adicionados ao pool.
A alocação virtual, por outro lado, só reserva espaço para endereços virtuais sem ocupar memória para pedaços físicos. Isso significa que podemos criar um endereço virtual que é grande, mesmo que a gente só precise de uma pequena quantidade de memória física.
A desalocação envolve liberar os recursos de memória. Diferente dos métodos tradicionais, onde a memória é liberada imediatamente, o vTensor usa um método preguiçoso. Isso significa que ele não libera ativamente a memória até que a tarefa esteja completamente feita, ajudando a economizar tempo e recursos.
Operações de Árvore
As operações de árvore são focadas na árvore radix mencionada anteriormente. Essas operações permitem que o sistema adicione novos vTensors na árvore ou procure vTensors existentes com base nos padrões de prefixo. Isso ajuda tanto na realocação eficiente da memória quanto em encontrar o que é necessário rapidamente em tarefas em andamento.
O Scheduler vTensor
O vTensor Scheduler (VTS) supervisiona como a memória é alocada e gerenciada. Ele interage com o Pool vTensor e realiza as operações necessárias pra atender as solicitações de memória.
Operações Básicas do VTS
As operações básicas do VTS incluem criar novas solicitações de memória, estender a memória existente e lidar com tarefas relacionadas a prefixo.
A etapa de criação inicializa novas solicitações e atribui tanto a memória física quanto a virtual conforme necessário. A operação de extensão é essencial em cenários onde o tamanho das necessidades de memória pode mudar, como durante o treinamento ou previsão de modelos de IA.
Gerenciando Prefixos
Gerenciar prefixos no contexto do vTensor é importante para tarefas em andamento, como modelos baseados em conversação. Quando uma conversa continua, o VTS grava o vTensor relevante e consegue recuperá-lo quando necessário, permitindo uma resposta mais rápida sem precisar reiniciar o processo.
Quando uma nova solicitação relacionada a uma conversa anterior chega, o sistema duplica os endereços de memória e os metadados necessários sem realocar a memória física. Isso reduz a sobrecarga associada à alocação de memória, fazendo o sistema operar de forma mais eficiente.
Conclusão
Resumindo, o vTensor é um sistema sofisticado de gerenciamento de memória feito pra ambientes de computação de alto desempenho. A arquitetura do sistema, que inclui o Pool vTensor, Operações vTensor e o Scheduler vTensor, permite que ele lide eficientemente com solicitações de memória enquanto minimiza desperdício e sobrecarga de realocação.
Com recursos como desalocação preguiçosa, mapeamento flexível de memória e gerenciamento eficiente de prefixos, o vTensor oferece uma solução robusta pra gerenciar memória em aplicações que envolvem processamento de dados complexos. Isso é especialmente vantajoso em cenários como IA, onde a velocidade e eficiência do gerenciamento de memória podem impactar significativamente o desempenho geral.
Título: vTensor: Flexible Virtual Tensor Management for Efficient LLM Serving
Resumo: Large Language Models (LLMs) are widely used across various domains, processing millions of daily requests. This surge in demand poses significant challenges in optimizing throughput and latency while keeping costs manageable. The Key-Value (KV) cache, a standard method for retaining previous computations, makes LLM inference highly bounded by memory. While batching strategies can enhance performance, they frequently lead to significant memory fragmentation. Even though cutting-edge systems like vLLM mitigate KV cache fragmentation using paged Attention mechanisms, they still suffer from inefficient memory and computational operations due to the tightly coupled page management and computation kernels. This study introduces the vTensor, an innovative tensor structure for LLM inference based on GPU virtual memory management (VMM). vTensor addresses existing limitations by decoupling computation from memory defragmentation and offering dynamic extensibility. Our framework employs a CPU-GPU heterogeneous approach, ensuring efficient, fragmentation-free memory management while accommodating various computation kernels across different LLM architectures. Experimental results indicate that vTensor achieves an average speedup of 1.86x across different models, with up to 2.42x in multi-turn chat scenarios. Additionally, vTensor provides average speedups of 2.12x and 3.15x in kernel evaluation, reaching up to 3.92x and 3.27x compared to SGLang Triton prefix-prefilling kernels and vLLM paged Attention kernel, respectively. Furthermore, it frees approximately 71.25% (57GB) of memory on the NVIDIA A100 GPU compared to vLLM, enabling more memory-intensive workloads.
Autores: Jiale Xu, Rui Zhang, Cong Guo, Weiming Hu, Zihan Liu, Feiyang Wu, Yu Feng, Shixuan Sun, Changxu Shao, Yuhong Guo, Junping Zhao, Ke Zhang, Minyi Guo, Jingwen Leng
Última atualização: 2024-07-22 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2407.15309
Fonte PDF: https://arxiv.org/pdf/2407.15309
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.