Otimizando IA com o Algoritmo E2
O algoritmo E2 melhora a gestão de requisições para modelos de linguagem grandes.
― 7 min ler
Índice
No mundo da inteligência artificial, os grandes modelos de linguagem (LLMs) tão ficando cada vez mais importantes. Pra usar esses modelos de jeitinho certo, a gente precisa de uma boa forma de gerenciar os pedidos que são enviados pra eles. É aí que entra o algoritmo E2. Ele tem como objetivo deixar o processo de lidar com os pedidos mais eficiente, especialmente quando se trata de prompts longos que são compartilhados entre muitos usuários.
Arquitetura do Sistema
O algoritmo E2 funciona dentro de um sistema distribuído que usa várias GPUs (unidades de processamento gráfico). A arquitetura é feita pra suportar dois tipos de processamento paralelo: paralelismo de dados e paralelismo de modelo. Isso significa que ele pode lidar com vários pedidos ao mesmo tempo e trabalhar com grandes modelos de forma mais eficiente.
O sistema tem dois níveis de agendamento. Um Agendador Global olha os pedidos que tão chegando e decide como equilibrar a carga entre as diferentes GPUs. Um agendador local, por sua vez, foca em pedidos específicos designados a cada GPU. Essa separação ajuda a gerenciar os pedidos de forma mais eficaz.
Quando um novo pedido chega, ele é dividido em Tokens. O agendador global atribui esse pedido a uma GPU usando o algoritmo E2. Depois disso, o pedido é colocado em uma fila pra processamento. O agendador local trabalha nessa fila, organizando os pedidos de forma eficiente com base nas suas necessidades.
Benefícios do Design
Esse design traz várias vantagens:
- Agendamento Centralizado: Com um agendador global, todo o agendamento de pedidos acontece em um só lugar. Isso ajuda a acompanhar o estado geral do sistema.
- Escalabilidade: Um único agendador global pode gerenciar várias GPUs, facilitando a expansão do sistema.
- Adaptabilidade: O agendador local pode responder rápido a mudanças na disponibilidade das GPUs e na demanda dos pedidos.
- Complexidade Reduzida: As migrações de pedidos entre GPUs durante o processamento são evitadas, o que pode ser intensivo em recursos.
Algoritmo de Agendamento Global
O agendador global mantém o controle dos pedidos usando uma estrutura chamada árvore de prefixo global. Essa árvore ajuda a gerenciar os pedidos com base nos tokens compartilhados. Tokens são pedaços de texto do pedido do usuário, e a forma como eles são organizados nessa árvore ajuda o agendador a tomar decisões informadas.
Quando um novo pedido chega, o agendador combina seus tokens com os que já tão na árvore. Se uma combinação é encontrada, ele considera se lidar com o pedido na mesma GPU vai economizar tempo e recursos. Se a combinação for curta, o agendador busca a melhor GPU pra rodar o pedido com base na carga atual.
O algoritmo busca encontrar um equilíbrio entre usar os recursos existentes e explorar novas opções. Quando um pedido é atribuído a uma GPU, o agendador precisa checar se a carga do sistema continua equilibrada ao longo do tempo. Se uma GPU ficar sobrecarregada, o agendador é projetado pra transferir pedidos futuros daquela GPU pra uma com tráfego mais leve.
Cálculo de Carga
Pra gerenciar os pedidos de forma eficaz, o agendador global calcula a carga em cada GPU. Isso leva em conta vários fatores, incluindo o comprimento do pedido e o histórico recente de pedidos do sistema. Entendendo quanto trabalho cada GPU tá lidando, o agendador pode tomar melhores decisões sobre onde enviar novos pedidos.
O custo total de usar uma GPU pra um pedido é considerado. Isso inclui o tempo necessário pra preparar o pedido, a necessidade potencial de liberar memória e o tempo real de processamento. O agendador escolhe a GPU com o menor custo geral pra lidar com o pedido que tá chegando.
Ajuste de Carga Após Atribuição
Uma vez que um pedido é atribuído a uma GPU, espera-se que ele fique lá até ser finalizado. Isso é eficiente na maioria dos casos, mas, às vezes, as cargas podem mudar, exigindo ajustes. O agendador global acompanha a carga em cada GPU e toma decisões sobre mover pedidos com base em limites predefinidos. Se uma GPU estiver lidando com muitos pedidos, o agendador pode redirecionar pedidos futuros pra uma GPU menos ocupada.
O agendador também tem um método pra aumentar ou diminuir a carga com base em como os pedidos estão sendo geridos. Se tiver muitos pedidos aguardando, o agendador pode decidir replicar certas cargas pra distribuir melhor.
Equilíbrio entre Prefill e Decodificação
Nos LLMs, tem duas fases principais ao processar os pedidos: prefill e decodificação. A fase de prefill consome mais recursos, muitas vezes levando a ineficiências. O agendador global tá ligado nisso e busca formas de equilibrar as duas fases.
Ao processar os pedidos, ele considera se o pedido pode ser tratado mais como uma unidade de decodificação ou uma unidade de prefill com base em quanto do prompt é compartilhado. Reconhecendo o tipo de pedido, o agendador pode direcioná-lo pra GPU mais adequada pra lidar com aquela tarefa específica, garantindo um uso melhor dos recursos.
Escalabilidade do Agendador Global
O sistema E2 é projetado pra lidar com o crescimento de forma tranquila. Os pedidos são primeiro tokenizados, e o agendador usa manipuladores assíncronos pra gerenciá-los. Isso permite que o sistema processe muitos pedidos ao mesmo tempo sem criar engarrafamentos.
A árvore de prefixo global é acessada de um jeito que não bloqueia outras operações, tornando-a eficiente. Quando pedidos são atribuídos ou a memória é liberada, a carga em cada GPU é atualizada, garantindo que o agendador global sempre tenha as informações mais recentes.
Mecanismo do Agendador Local
O agendador local trabalha junto com cada GPU pra lidar com os pedidos atribuídos. Cada agendador local mantém uma fila de espera e uma árvore de prefixo. Quando um pedido chega, ele combina com a árvore local, atualizando conforme necessário.
Após cada iteração de processamento, o agendador local decide quais pedidos lidar a seguir com base em um sistema de prioridade. Esse sistema garante que os pedidos sejam tratados de forma justa, levando em conta quantos tokens estão em cache e a carga geral.
Se um pedido tem um prompt longo que não é compartilhado, ele pode ser dividido em pedaços menores pra se encaixar melhor na fila de processamento. O agendador local também é responsável por gerenciar a memória. Se a memória estiver baixa, ele escolhe partes da árvore pra expulsar, garantindo que o processamento continue sem problemas.
Ordenação de Pedidos na Fila
Nos sistemas atuais, os pedidos nas filas de espera são frequentemente tratados na ordem de chegada. No entanto, isso pode levar a desperdícios de recursos e injustiças. O sistema E2 propõe uma nova forma de classificar esses pedidos.
Cada pedido é atribuído a um grupo de prioridade com base em quantos tokens estão em cache. Ao formar lotes, o agendador local escolhe os pedidos de uma forma que considera tanto a prioridade quanto a justiça. Isso garante que os pedidos de alta prioridade sejam processados mais rápido, enquanto ainda atende às necessidades dos pedidos de menor prioridade.
Conclusão
O algoritmo E2 e sua arquitetura são projetados pra otimizar a forma como os grandes modelos de linguagem lidam com os pedidos. Usando uma abordagem de agendamento dupla, gerenciamento de carga eficiente e técnicas de balanceamento, o sistema pode operar suavemente até sob demanda pesada. Essa estrutura não só melhora o desempenho dos LLMs, mas também garante uma distribuição justa de recursos entre vários pedidos. À medida que o uso da IA continua crescendo, esses avanços serão cruciais pra tirar o melhor proveito da tecnologia e atender às demandas dos usuários de forma eficaz.
Título: Preble: Efficient Distributed Prompt Scheduling for LLM Serving
Resumo: Prompts to large language models (LLMs) have evolved beyond simple user questions. For LLMs to solve complex problems, today's practices are to include domain-specific instructions, illustration of tool usages, and/or long context such as textbook chapters in prompts. As such, many parts of prompts are repetitive across requests. Recent works propose to cache and reuse KV state of prompts. However, they are all confined to a single-GPU optimization, while production LLM serving systems are distributed by nature. This paper proposes Preble, the first distributed LLM serving platform that targets and optimizes for prompt sharing. We designed a distributed scheduling system that co-optimizes KV state reuse and computation load-balancing with a new scheduling algorithm and a hierarchical scheduling mechanism. Our evaluation of Preble with real workloads and request arrival patterns on two open-source LLMs shows that Preble outperforms the SOTA serving systems by 1.5X to 14.5X on average latency and 2X to 10X on p99 latency.
Autores: Vikranth Srivatsa, Zijian He, Reyna Abhyankar, Dongming Li, Yiying Zhang
Última atualização: 2024-10-03 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2407.00023
Fonte PDF: https://arxiv.org/pdf/2407.00023
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.