Uma Nova Estrutura pra Melhorar a Eficiência da API de LLM
Esse framework melhora a forma como os LLMs lidam com chamadas de API e uso de memória.
― 6 min ler
Modelos de linguagem grandes (LLMs) tão sendo combinados com várias ferramentas externas e APIS pra aumentar suas habilidades além de só criar texto. Por exemplo, usando plugins do ChatGPT, os LLMs conseguem fazer cálculos e interagir com ambientes virtuais enquanto falam com os usuários em tempo real. Mas, a maioria dos sistemas de LLM hoje foi criada pra funcionar sozinha e normalmente trata chamadas de API como requisições separadas. Isso leva a um trabalho desnecessário, desperdiçando uma quantidade significativa de tempo de processamento e recursos.
Esse artigo fala sobre uma nova estrutura especificamente projetada pra LLMs que usam APIs. O objetivo dessa estrutura é fazer um uso melhor da potência de processamento e da memória, permitindo um manuseio mais rápido e eficiente das requisições. Sistemas atuais geralmente desperdiçam muitos recursos de GPU ao lidar com requisições que envolvem APIs, o que pode desacelerar o desempenho geral dos LLMs.
Quando um LLM faz uma chamada de API, ele interrompe seu processamento normal. Essa pausa pode gerar um problema porque chamadas de API podem levar diferentes tempos pra serem completadas, causando confusão na programação das tarefas. Ao contrário das tarefas normais, as informações necessárias pro processamento não podem ser reutilizadas durante a espera da API. Sistemas existentes geralmente descartam todo o contexto anterior quando uma chamada de API é feita, o que significa que eles têm que começar tudo de novo assim que a API responde. Essa abordagem leva a uma quantidade significativa de reprocessamento, consumindo recursos que poderiam ser usados pra novas requisições.
Em vez disso, uma maneira mais eficiente seria manter o contexto da requisição enquanto espera a API retornar. Isso permitiria que o sistema continuasse de onde parou sem perder o que já foi processado. Porém, manter esse contexto pode consumir muita memória da GPU, limitando potencialmente a capacidade do sistema de lidar com outras tarefas.
Alternativamente, se o contexto for movido pra memória da CPU durante a chamada da API, isso pode evitar sobrecarga na GPU. Mas essa solução também não é ideal, já que mover dados entre GPU e CPU também consome tempo e pode criar gargalos no fluxo de processamento. O desafio continua: como um LLM que lida com requisições de API pode funcionar de forma mais eficiente?
Pra responder essa pergunta, a nova estrutura estuda as diferentes maneiras que um LLM interage com várias APIs, como aritmética, chatbots e tecnologias de texto-para-fala. Baseado nessas descobertas, ela constrói uma estrutura pra minimizar desperdícios de recursos e melhorar a eficiência geral.
O princípio central dessa nova estrutura, chamada de preempção de mínimo desperdício, é reduzir a memória desperdiçada durante chamadas de API. Essa abordagem permite que os recursos disponíveis de GPU atendam mais requisições. A estrutura é projetada pra avaliar diferentes condições e tomar decisões que otimizem o uso da memória durante o processamento.
A estrutura aplica três principais contribuições pra alcançar seus objetivos. Primeiro, ela cria equações pra medir a memória desperdiçada sob diferentes cenários quando APIs são chamadas. Ela quebra onde o desperdício ocorre, seja por manter contexto desnecessário ou precisar reprocessar tokens. Isso ajuda a identificar quais áreas precisam de melhorias.
Segundo, ela aprimora técnicas existentes pra torná-las mais eficientes. Por exemplo, ela sobrepõe o processo de mover dados pra dentro e pra fora da memória com o processamento normal. Fazendo isso, ela diminui o tempo desperdiçado durante chamadas de API, permitindo um uso mais eficiente dos recursos da GPU.
Finalmente, a estrutura seleciona dinamicamente estratégias pra preempção e retomada de requisições, visando equilibrar o uso da memória e o desempenho geral. Ela organiza as requisições de maneiras que garantem que a máxima eficiência seja mantida enquanto é justo com todas as requisições na fila.
A implementação dessa nova estrutura foi testada em sistemas de GPU avançados, comparando seu desempenho com métodos existentes. Os resultados mostraram que o novo sistema poderia lidar com um número maior de requisições enquanto mantinha velocidades semelhantes na geração de respostas.
As variações em como diferentes APIs respondem e quanto tempo levam pra completar foram fatores significativos na formação do design da estrutura. Por exemplo, algumas APIs completam suas tarefas quase instantaneamente, enquanto outras, como as que exigem interação humana, podem levar muito mais tempo. Sabendo disso, a estrutura foca em gerenciar a memória de forma diferente com base no tempo de resposta esperado de cada tipo de API.
Através de vários cenários de teste, a estrutura demonstrou que tratar chamadas de API de forma diferente de requisições normais poderia melhorar muito o desempenho. Em vez de simplesmente ver uma chamada de API como uma nova requisição, é mais eficiente preservar o contexto da requisição original, reduzindo assim a necessidade de reprocessamento.
Ela também descobriu que diferentes tipos de API exigem estratégias de gerenciamento variadas. Tarefas curtas, como cálculos simples, podem ter seu contexto preservado, enquanto tarefas mais longas, como conversas de chat, podem precisar de uma abordagem de manuseio mais complexa pra evitar desperdício de recursos.
Além de só melhorar o manuseio de chamadas de API, a estrutura também oferece insights sobre as implicações mais amplas de integrar diferentes tipos de ferramentas com LLMs. Ela apresenta uma maneira de pensar sobre agendamento e alocação de recursos que pode ser benéfica em outros Contextos tecnológicos também.
As descobertas sugerem que, pra atender efetivamente requisições envolvendo APIs, os sistemas de LLM precisam repensar suas abordagens tradicionais. Ao adotar as estratégias descritas nessa nova estrutura, esses sistemas podem minimizar desperdícios de recursos, melhorar o desempenho e, em última análise, proporcionar uma experiência mais suave pros usuários.
À medida que a tecnologia continua a avançar e mais aplicações surgem que exigem interações dinâmicas entre LLMs e ferramentas externas, ter uma estrutura robusta como essa se tornará cada vez mais importante. Isso permitirá uma integração mais fluida de capacidades, ampliando os usos potenciais dos LLMs além da mera geração de texto e tornando-os mais valiosos em várias configurações práticas.
Resumindo, a nova estrutura pra suporte eficiente de API em modelos de linguagem grandes apresenta uma solução promissora pros desafios enfrentados por sistemas tradicionais. Ao reduzir o desperdício de memória e otimizar práticas de processamento, ela abre caminho pra LLMs mais responsivos e capazes que podem lidar com uma ampla gama de tarefas. À medida que essa tecnologia evolui, as aplicações potenciais são ilimitadas, e seu impacto pode ser sentido em várias indústrias.
Título: InferCept: Efficient Intercept Support for Augmented Large Language Model Inference
Resumo: Large language models are increasingly integrated with external environments, tools, and agents like ChatGPT plugins to extend their capability beyond language-centric tasks. However, today's LLM inference systems are designed for standalone LLMs. They treat each external interaction as the end of LLM generation and form a new request when the interaction finishes, causing unnecessary recomputation of already computed contexts, which accounts for 37-40% of total model forwarding time. This paper presents InferCept, the first LLM inference framework targeting augmented LLMs and supporting the efficient interception of LLM generation. InferCept minimizes the GPU resource waste caused by LLM interceptions and dedicates saved memory for serving more requests. InferCept improves the overall serving throughput by 1.6x-2x and completes 2x more requests per second compared to the state-of-the-art LLM inference systems.
Autores: Reyna Abhyankar, Zijian He, Vikranth Srivatsa, Hao Zhang, Yiying Zhang
Última atualização: 2024-05-30 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2402.01869
Fonte PDF: https://arxiv.org/pdf/2402.01869
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.