Simple Science

Ciência de ponta explicada de forma simples

# Informática# Computação distribuída, paralela e em cluster

Melhorando o Desempenho do Adaptador LoRA em IA

Um novo método pra aumentar a eficiência de servir adaptadores LoRA em ambientes de nuvem.

― 7 min ler


Impulso na Eficiência doImpulso na Eficiência doAdaptador LoRAresposta dos modelos de IA.Novas técnicas melhoram os tempos de
Índice

Modelos de linguagem grandes (LLMs) tão se tornando cada vez mais importantes no campo da inteligência artificial generativa. Eles conseguem criar texto, responder perguntas e fazer várias tarefas em diferentes áreas. Mas pra serem realmente eficazes em aplicações específicas, esses modelos geralmente precisam ser ajustados pra certas tarefas ou domínios. É aí que entra a Low-Rank Adaptation, ou LoRA. LoRA é um método que permite que um modelo base seja adaptado ou ajustado pra várias tarefas específicas sem precisar mudar o modelo inteiro.

LoRA faz isso adicionando pequenos componentes treináveis chamados adaptadores ao modelo base. Esses adaptadores podem ser treinados pra realizar tarefas específicas enquanto mantêm os parâmetros originais do modelo base intactos. Esse método é eficiente em termos de uso de memória e permite a criação de vários adaptadores LoRA leves a partir de um único modelo base.

Com o uso de LoRA se tornando mais comum, servir esses adaptadores de forma eficiente em ambientes de nuvem, onde vários usuários podem solicitar diferentes tarefas ao mesmo tempo, tá se tornando crítico. A abordagem convencional pra servir esses modelos pode causar atrasos significativos quando um adaptador solicitado precisa ser buscado na memória, o que é um problema conhecido como cold-start.

O sistema que apresentamos visa lidar com esse problema de forma eficaz.

Desafios no Servir LoRA

Ao tentar servir modelos LoRA em uma nuvem multi-inquilino, tem alguns desafios principais:

  1. Problema de Cold-Start: Quando um adaptador LoRA é necessário e não tá carregado na GPU, ele precisa ser recuperado da memória principal que é mais lenta. Isso pode causar atrasos significativos.

  2. Agendamento de Solicitações: As solicitações dos usuários podem envolver diferentes adaptadores LoRA com vários ranks ou tamanhos. Quando essas solicitações são agrupadas pra processamento, como elas são agendadas e quais adaptadores são usados pode afetar muito o desempenho.

Os sistemas atuais geralmente não lidam bem com esses desafios, levando a ineficiências e tempos de resposta mais longos.

Serviço LoRA Assistido por CPU

Pra resolver o problema dos atrasos de cold-start, nosso sistema utiliza uma abordagem assistida por CPU. Em termos simples, quando uma nova solicitação chega pra um adaptador LoRA que não tá atualmente na GPU, o sistema começa a processá-la na CPU enquanto tá sendo carregada na GPU. Essa sobreposição de ações ajuda a minimizar os tempos de espera.

Aqui tá como funciona:

  1. Quando uma solicitação chega, o sistema verifica se o adaptador necessário já tá na GPU.
  2. Se não estiver, o sistema começa a carregá-lo da memória e simultaneamente inicia o processamento preliminar usando a CPU.
  3. Assim que o adaptador tá totalmente carregado, o processamento pode ser transferido pra GPU, completando a tarefa mais rápido.

Esse método efetivamente esconde os atrasos de cold-start e melhora a eficiência geral.

Otimizações para Serviço Assistido por CPU

Enquanto esse método assistido por CPU ajuda muito com os problemas de cold-start, ainda existem desafios a serem gerenciados. Aqui estão algumas das otimizações que implementamos:

  1. Sincronização por Camadas: Como o processamento é dividido entre a CPU e a GPU, precisamos garantir que os dois estejam em sincronia. Desenvolvemos um método especializado pra gerenciar isso sem bloquear o sistema.

  2. Transferência de Dados Eficiente: Em vez de usar métodos lentos pra transferência de dados entre a CPU e a GPU, usamos memória compartilhada que permite uma comunicação muito mais rápida.

  3. Utilização Multi-CPU: Também utilizamos múltiplos núcleos de CPU pra lidar melhor com as cargas de trabalho. Ao perfilar quanto trabalho cada núcleo pode aguentar, conseguimos atribuir múltiplos processos pra trabalhar em diferentes partes da tarefa, melhorando a velocidade.

Com essas otimizações, conseguimos aumentar significativamente o desempenho do serviço LoRA assistido por CPU.

Agendamento de Solicitações Consciente de Rank

Agendar solicitações de forma eficiente é outro aspecto essencial do nosso sistema. Como os usuários podem solicitar diferentes adaptadores LoRA, cada um com ranks diferentes, precisamos de uma forma inteligente de gerenciar como as solicitações são tratadas.

Na nossa abordagem, criamos um modelo de desempenho que permite ao sistema prever quanto tempo cada solicitação vai levar com base nos adaptadores específicos que estão sendo usados. Quando uma nova solicitação chega:

  1. O sistema avalia todos os servidores disponíveis que podem processar a solicitação.
  2. Calcula um score de custo pra cada servidor. Esse score ajuda a determinar como servir a nova solicitação vai impactar as tarefas em andamento.
  3. O servidor com o menor score de custo é selecionado pra lidar com a nova solicitação.

Esse agendamento consciente de rank ajuda muito a atender às expectativas dos usuários e reduz os tempos de espera, resultando em um desempenho geral melhor.

Avaliação de Desempenho

Testamos nosso sistema contra vários métodos de ponta pra ver como ele se sai em ambientes reais. Nossos testes incluíram tanto cargas de trabalho sintéticas, onde simulamos padrões de uso regulares, quanto cargas de trabalho de produção escaladas baseadas em dados de uso reais.

Cargas de Trabalho Sintéticas

Nos nossos testes sintéticos, geramos solicitações em diferentes taxas e tamanhos pra testar a resistência do nosso sistema. Os resultados mostraram que nosso design assistido por CPU reduziu significativamente o tempo médio que leva pra gerar respostas.

Cargas de Trabalho de Produção Escaladas

Usando dados do mundo real de ambientes de produção, aplicamos nosso método pra observar seu desempenho em lidar com múltiplas solicitações. Os resultados revelaram que conforme o número de adaptadores LoRA e solicitações de entrada aumentava, nosso sistema conseguiu manter os atrasos de cold-start baixos e manteve um serviço de alta qualidade com aumentos mínimos de latência.

Visão Geral da Arquitetura do Sistema

Em um nível alto, nosso sistema consiste em vários componentes principais:

  1. Servidor de Inferência LLM: Essa parte do sistema lida com o processamento central. Ele mantém o modelo base carregado na GPU e gerencia os adaptadores LoRA na memória.

  2. Agendador: Esse componente é responsável por gerenciar as solicitações de entrada. Ele as redireciona pro servidor apropriado com base na disponibilidade e no desempenho estimado.

  3. Registro LoRA: Essa é a base de dados que mantém o controle de todos os metadados dos adaptadores e suas localizações, garantindo acesso sem interrupções.

Juntos, esses componentes trabalham em harmonia pra fornecer um serviço eficiente e eficaz pros usuários.

Conclusão

Nosso sistema representa um avanço significativo na forma como os adaptadores LoRA são servidos em contextos de IA generativa. Ao resolver os problemas de cold-start com assistência de CPU e usar técnicas de agendamento inteligentes, melhoramos a acessibilidade e a capacidade de resposta dos grandes modelos de linguagem em ambientes multi-inquilino.

Conforme a demanda por aplicações especializadas de IA continua a crescer, ter sistemas de serviço eficientes pra modelos vai ser vital. Nosso trabalho não só demonstra a viabilidade de tal sistema, mas também estabelece o cenário pra mais inovações nesse campo.

Fonte original

Título: CaraServe: CPU-Assisted and Rank-Aware LoRA Serving for Generative LLM Inference

Resumo: Pre-trained large language models (LLMs) often need specialization for domain-specific tasks. Low-Rank Adaptation (LoRA) is a popular approach that adapts a base model to multiple tasks by adding lightweight trainable adapters. In this paper, we present CaraServe, a system that efficiently serves many LoRA adapters derived from a common base model. CaraServe maintains the base model on GPUs and dynamically loads activated LoRA adapters from main memory. As GPU loading results in a cold-start that substantially delays token generation, CaraServe employs a CPU-assisted approach. It early starts the activated adapters on CPUs for prefilling as they are being loaded onto GPUs; after loading completes, it then switches to the GPUs for generative LoRA inference. CaraServe develops a highly optimized synchronization mechanism to efficiently coordinate LoRA computation on the CPU and GPU. Moreover, CaraServe employs a rank-aware scheduling algorithm to optimally schedule heterogeneous LoRA requests for maximum service-level objective (SLO) attainment. We have implemented CaraServe and evaluated it against state-of-the-art LoRA serving systems. Our results demonstrate that CaraServe can speed up the average request serving latency by up to 1.4$\times$ and achieve an SLO attainment of up to 99%.

Autores: Suyi Li, Hanfeng Lu, Tianyuan Wu, Minchen Yu, Qizhen Weng, Xusheng Chen, Yizhou Shan, Binhang Yuan, Wei Wang

Última atualização: 2024-01-20 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2401.11240

Fonte PDF: https://arxiv.org/pdf/2401.11240

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.

Mais de autores

Artigos semelhantes