Modelos e plataformas de IA

PowerInfer: Motor de Inferência de LLM Rápido com GPU de Consumo

mm
Adicione Unite.AI às suas fontes preferidas no Google

Devido às suas excepcionais capacidades de criação de conteúdo, os Modelos de Linguagem Grande Gerativos estão agora à frente da revolução da IA, com esforços contínuos para melhorar suas capacidades gerativas. No entanto, apesar dos avanços rápidos, esses modelos exigem uma grande quantidade de poder computacional e recursos. Isso ocorre porque consistem em centenas de bilhões de parâmetros. Além disso, para operar suavemente, os modelos de IA gerativos dependem de milhares de GPUs, o que leva a custos operacionais significativos. As altas demandas operacionais são um dos principais motivos pelos quais os modelos de IA gerativos ainda não são implantados efetivamente em dispositivos pessoais.

Neste artigo, discutiremos o PowerInfer, um motor de inferência de LLM de alta velocidade projetado para computadores padrão alimentados por uma única GPU de consumo. O framework PowerInfer busca utilizar a alta localidade inerente à inferência de LLM, caracterizada por uma distribuição de lei de potência nas ativações de neurônios. Isso significa que, a qualquer momento, um pequeno subconjunto de neurônios “quentes” está consistentemente ativo em todas as entradas, enquanto o restante, denominado neurônios “frios”, se ativa com base em entradas ou requisitos específicos. Essa abordagem permite que o framework PowerInfer reduza a potência de processamento necessária para a IA gerativa produzir saídas desejadas.

Iremos mergulhar no framework PowerInfer em detalhes, explorando sua metodologia, pipeline e resultados práticos de aplicação. Vamos começar.

PowerInfer: Motor de Inferência de LLM Rápido com GPU de Consumo

Modelos de Linguagem Grande Gerativos, como ChatGPT e DALL-E, são conhecidos por suas tarefas de processamento de linguagem natural e geração de conteúdo sofisticadas. Devido às suas altas exigências computacionais, esses modelos são normalmente implantados em centros de dados com GPUs avançadas. A necessidade de tal poder computacional limita sua implantação em centros de dados, destacando a necessidade de implantar modelos de linguagem grande em plataformas locais mais acessíveis, como computadores pessoais.

Aumentar a acessibilidade dos modelos de linguagem grande pode reduzir os custos de inferência e geração de conteúdo, melhorar a privacidade de dados e permitir a personalização do modelo. Além disso, enquanto as implantações em centros de dados priorizam a alta taxa de transferência, as implantações locais de LLM poderiam se concentrar em baixa latência devido a tamanhos de lote menores.

No entanto, implantar esses modelos em dispositivos locais apresenta desafios significativos devido às suas substanciais exigências de memória. Modelos de linguagem grande, funcionando como transformadores autoregressivos, geram texto token a token, com cada token exigindo acesso ao modelo inteiro, que compreende centenas de bilhões de parâmetros. Isso exige numerous GPUs de alta qualidade para a geração de saída de baixa latência. Além disso, as implantações locais normalmente processam solicitações individuais sequencialmente, limitando o potencial para o processamento paralelo.

Para abordar as complexas exigências de memória do framework de IA gerativa, as soluções existentes empregam métodos como descarga de modelo e compressão. Técnicas como destilação, poda e quantização reduzem o tamanho do modelo, mas ainda são muito grandes para GPUs padrão em computadores pessoais. A descarga de modelo, que divide o modelo na camada de Transformer entre CPUs e GPUs, permite o processamento de camada distribuído entre as memórias CPU e GPU. No entanto, esse método é limitado pela interconexão PCIe lenta e pelas capacidades computacionais limitadas das CPUs, levando a alta latência de inferência.

O framework PowerInfer afirma que a discordância entre as características de inferência de LLM e a estrutura de hardware é a principal causa dos problemas de memória na inferência de LLM. Idealmente, os dados acessados com frequência devem ser armazenados em GPUs de alta largura de banda e capacidade limitada, enquanto os dados menos frequentemente acessados devem estar em CPUs de baixa largura de banda e alta capacidade. No entanto, o grande volume de parâmetros de cada iteração de inferência de LLM torna o conjunto de trabalho muito grande para uma única GPU, resultando em uma exploração ineficiente da localidade.

O processo de inferência em modelos de linguagem grande demonstra alta localidade, com cada iteração ativando um número limitado de neurônios. O framework PowerInfer visa explorar essa localidade, gerenciando um pequeno número de neurônios “quentes” com a GPU, enquanto a CPU lida com os neurônios “frios”. Ele pré-seleciona e pré-carrega os neurônios “quentes” na GPU e identifica os neurônios ativados durante a execução. Essa abordagem minimiza as transferências de dados PCIe dispendiosas, permitindo que as GPUs e CPUs processem seus neurônios designados de forma independente.

No entanto, implantar LLMs em dispositivos locais enfrenta obstáculos. Os preditores online, cruciais para identificar neurônios ativos, consomem uma grande quantidade de memória da GPU. O framework PowerInfer utiliza um método adaptativo para construir pequenos preditores para camadas com maior inclinação de ativação e esparsidade, mantendo a precisão enquanto reduz o tamanho. Além disso, os frameworks de LLM exigem operadores esparsos especializados. O framework PowerInfer emprega operadores esparsos conscientes de neurônios que se comunicam diretamente com os neurônios, eliminando a necessidade de conversões de formato esparsas específicas durante a execução.

Por fim, colocar os neurônios ativados entre a CPU e a GPU de forma ideal é um desafio. O framework PowerInfer utiliza uma etapa offline para criar uma política de colocação de neurônios, medindo o impacto de cada neurônio nos resultados da inferência de LLM e enquadrando-o como um problema linear de números inteiros.

Arquitetura e Metodologia

A seguinte figura elabora a arquitetura do framework PowerInfer, consistindo em componentes offline e online na pipeline.

Obrigado pela variação observada nas propriedades de localidade entre diferentes modelos de linguagem grande, o componente offline perfila a esparsidade de ativação do framework de LLM, permitindo que ele diferencie entre neurônios “quentes” e “frios”. Além disso, na fase offline, dois tipos de neurônios são carregados pelo motor de inferência em ambas as CPUs e GPUs, servindo assim às solicitações de LLM durante a execução com baixa latência.

Fase Offline: Solucionador de Política e Perfilador de LLM

Na fase offline, um componente de perfilador de LLM usa solicitações derivadas de um conjunto de dados geral para coletar dados de ativação do processo de inferência. Na primeira etapa, ele monitora a ativação de neurônios em todas as camadas do framework e, em seguida, usa um componente de solucionador de política para categorizar os neurônios como “quentes” ou “frios”. O objetivo principal do solucionador de política é alocar os neurônios ativados com mais frequência para as camadas da GPU, enquanto alocar o restante para as camadas da CPU. Na segunda etapa, o componente de solucionador de política usa métricas de impacto de neurônios e especificações de hardware para equilibrar a carga de trabalho entre as camadas e maximizar a métrica de impacto da GPU para os neurônios, utilizando programação linear de números inteiros.

Fase Online: Motor de Inferência de LLM Consciente de Neurônios

Uma vez que a etapa offline é executada com sucesso, o framework prossegue com a execução da etapa online. Na terceira etapa do processo, o motor de inferência online atribui os neurônios “quentes” e “frios” às suas unidades de processamento respectivas antes de processar as solicitações do usuário, dependendo da saída do solucionador de política offline. Durante a execução, e na quarta etapa, o motor de inferência online gerencia os cálculos da GPU-CPU, criando executores de CPU e GPU que são threads em execução no lado da CPU. O motor, em seguida, prevê os neurônios ativados e ignora os neurônios não ativados. Os neurônios ativados são pré-carregados na GPU para processamento. Enquanto isso, a CPU calcula e transfere os resultados para os seus neurônios para serem integrados com a GPU. O motor de inferência online consegue se concentrar em linhas e colunas individuais de matrizes dentro de uma matriz porque usa operadores esparsos conscientes de neurônios nas CPUs e GPUs.

Preditores de Esparsidade Adaptativos

O conceito principal por trás da redução das cargas computacionais pelo motor de inferência online no framework PowerInfer é que ele processa apenas os neurônios que prevê que estarão ativados. Tradicionalmente, dentro de cada camada de Transformer, um framework utiliza dois diferentes preditores para prever a ativação de neurônios nos blocos de MLP e auto-atendimento, como resultado do qual o cálculo de inferência é limitado aos neurônios previstos para estar ativos. No entanto, é difícil projetar preditores eficazes para implantação local, pois a quantidade limitada de recursos torna difícil equilibrar o tamanho do modelo e a precisão da previsão. Como esses preditores são implantados pelo framework com frequência para prever neurônios ativos, eles precisam ser armazenados na GPU para permitir acesso mais rápido. No entanto, os frameworks geralmente implantam um grande número de preditores que ocupam uma quantidade considerável de memória, mesmo a necessária para armazenar os parâmetros de LLM.

Além disso, o tamanho dos preditores é geralmente determinado por dois fatores: inclinação interna e esparsidade das camadas de LLM.

Para otimizar esses fatores, o framework PowerInfer utiliza um método de treinamento iterativo para cada preditor na camada de Transformer sem um tamanho fixo. Na primeira etapa desse método de treinamento, o tamanho do modelo de base é estabelecido com base no perfil de esparsidade do modelo, e o tamanho do modelo é ajustado iterativamente, considerando a inclinação interna de ativação para manter a precisão.

Colocação e Gerenciamento de Neurônios

Como mencionado anteriormente, enquanto o componente de solucionador de política offline está determinando a política de colocação de neurônios, o componente de motor de inferência online carrega o modelo na memória da GPU e CPU de acordo com a política gerada. Para cada camada que pode ou não ter múltiplas matrizes de peso, o framework PowerInfer atribui cada neurônio à CPU ou à GPU com base em se o neurônio é ativado “quente”. Garantir o cálculo preciso de neurônios segmentados na sequência determinada é essencial para resultados precisos. Para lidar com isso, o framework PowerInfer gera duas tabelas de neurônios: uma localizada na memória da GPU e outra na memória da CPU, com cada tabela correlacionando os neurônios individuais à sua posição original na matriz.

Operador Consciente de Neurônios

Considerando a esparsidade de ativação observada em modelos de linguagem grande, os neurônios inativos e seus pesos podem ser ignorados pelas operações de multiplicação de matrizes, criando a necessidade de usar operadores esparsos. Em vez de empregar operadores esparsos que têm várias limitações, o framework PowerInfer emprega operadores conscientes de neurônios que calculam os neurônios ativados e seus pesos diretamente na GPU e CPU, sem exigir conversão para formato denso durante a execução. Os operadores conscientes de neurônios diferem dos operadores esparsos tradicionais, pois se concentram em vetores de linha e coluna individuais dentro de uma matriz, em vez de se concentrar na matriz inteira.

Política de Colocação de Neurônios

Para explorar as capacidades computacionais das CPUs e GPUs, o componente offline do framework PowerInfer gera uma política de colocação que orienta o framework ao alocar neurônios para as camadas da CPU ou da GPU. O solucionador de política gera essa política e controla a colocação de neurônios dentro de cada camada, o que ajuda a determinar a carga de trabalho computacional para as unidades de processamento individuais. Ao gerar a política de colocação, o componente de solucionador de política considera vários fatores, incluindo a frequência de ativação de cada neurônio, a sobrecarga de comunicação e as capacidades computacionais, como larguras de banda e tamanho de memória de cada unidade de processamento.

Resultados e Implementação

Para demonstrar as capacidades de generalização do framework PowerInfer em dispositivos com diferentes configurações de hardware, os experimentos são realizados em dois computadores pessoais distintos: um equipado com processador Intel (INTC ) i9-13900K, GPU NVIDIA RTX 4090 e 192 GB de memória hospedeira, enquanto o outro opera com processador Intel i7-12700K, GPU NVIDIA RTX 2080Ti e 64 GB de memória hospedeira.

O desempenho de ponta a ponta do framework PowerInfer é comparado com o do llama.cpp com um tamanho de lote de 1 e configurações de implantação padrão. O framework, em seguida, amostra prompts dos conjuntos de dados ChatGPT e Alpaca, considerando a variabilidade de comprimento observada em diálogos de entrada e saída do mundo real. A figura a seguir demonstra as velocidades de geração para diferentes modelos.

Como pode ser observado, o framework PowerInfer gera 8,32 tokens por segundo e atinge até 16 tokens gerados por segundo, superando assim o framework llama.cpp por uma margem significativa. Além disso, à medida que o número de tokens de saída aumenta, o desempenho do framework PowerInfer também melhora, pois a fase de geração afeta significativamente o tempo de inferência geral.

Além disso, como pode ser observado na imagem acima, o framework PowerInfer supera o framework llama.cpp em PCs de baixo custo, com uma taxa de geração máxima de 7 tokens por segundo e uma velocidade média de geração de token de 5 tokens por segundo.

A imagem acima demonstra a distribuição da carga de neurônios entre a GPU e a CPU para os dois frameworks. Como pode ser visto, o framework PowerInfer aumenta significativamente a participação da carga de neurônios da GPU, de 20 para 70%.

A imagem acima compara o desempenho dos dois frameworks em dois PCs com especificações diferentes. Como pode ser visto, o framework PowerInfer entrega consistentemente uma alta velocidade de geração de token de saída em comparação com o framework llama.cpp.

Pensamentos Finais

Neste artigo, discutimos o PowerInfer, um motor de inferência de LLM de alta velocidade para um computador padrão alimentado por uma única GPU de consumo. No seu núcleo, o framework PowerInfer tenta explorar a alta localidade inerente à inferência de LLM, um método caracterizado pela distribuição de lei de potência nas ativações de neurônios. O framework PowerInfer é um sistema de interferência rápido projetado para modelos de linguagem grande que utiliza preditores adaptativos e operadores conscientes de neurônios para ativar os neurônios e a esparsidade computacional.

Um engenheiro por profissão, um escritor por coração. Kunal é um escritor técnico com um amor e compreensão profundos de AI e ML, dedicado a simplificar conceitos complexos nestes campos por meio de sua documentação envolvente e informativa.