Prática de aceleração de inferência de modelos grandes KubeAI |

1. Fundo

Recentemente, implantamos clusters de inferência dedicados de modelos grandes em lotes no ambiente de produção e aumentamos com sucesso a velocidade de inferência de modelos grandes, incluindo 70B, em 50%, reduzindo significativamente os custos de implantação e aplicando-os de forma estável em ambientes de produção. Este artigo é baseado em algumas de nossas experiências na implantação de clusters de inferência de modelos grandes e compartilha alguns métodos para melhorar efetivamente a velocidade de inferência de modelos grandes. Finalmente, no final, recomendamos várias estruturas de inferência de modelos grandes que avaliamos e tiveram bom desempenho. Espero que estas sugestões ajudem os leitores a escolher a estrutura de raciocínio apropriada para os seus projetos.

Hyung Won Chung, um cientista da OpenAI, apontou em sua palestra pública de 2023 "Large Language Models" [8] que certas capacidades de grandes modelos só podem ser reveladas quando atingem uma determinada escala. de modelos grandes certamente aumentará no futuro. Grande, esta também é a tendência de desenvolvimento de modelos grandes. À medida que o número de parâmetros aumenta, os requisitos para a velocidade de inferência de modelos grandes estão ficando cada vez maiores. Quais métodos podem ser usados ​​para melhorar a velocidade de inferência ou o rendimento de modelos grandes?

Primeiro, discutiremos a direção da otimização da aceleração para modelos grandes. Em seguida, com base na linha do tempo, o artigo apresentará algumas das tecnologias de aceleração de modelos grandes mais clássicas e práticas do setor, incluindo, mas não se limitando a tecnologias como "FlashAttention". [1]" e "PageAttention[3]" .

A seguir estão algumas tecnologias clássicas de aceleração de inferência de modelos grandes na indústria em ordem cronológica. Este artigo tenta fornecer aos leitores uma revisão dos métodos de aceleração de modelos grandes em ordem cronológica de desenvolvimento.

 

Além das tecnologias mencionadas acima, também existem tecnologias de quantificação para modelos grandes que podem melhorar a velocidade de inferência de modelos grandes. Não iremos discuti-las aqui por enquanto. Publicaremos um artigo separado para apresentá-las mais tarde, quando tivermos oportunidade. .

2. Desafios enfrentados pelo desenvolvimento de grandes modelos

No futuro, o número de parâmetros de modelos grandes certamente se tornará cada vez maior. Esta é também a tendência de desenvolvimento de modelos grandes, e os requisitos para aceleração de inferência se tornarão cada vez maiores.

A OpenAI introduziu regras de expansão para modelos grandes em seu artigo "Leis de escala para modelos de linguagem neural" [7]. Essas regras ilustram a relação entre as capacidades do modelo e seu tamanho. Especificamente, as capacidades de um modelo dependem fortemente da sua escala, incluindo o número de parâmetros do modelo, o tamanho do conjunto de dados e a quantidade de computação necessária durante o treinamento. Além disso, o cientista da OpenAI Hyung Won Chung apontou em sua palestra pública de 2023 "Large Language Models" [8] que certas capacidades de grandes modelos só podem ser reveladas quando atingem uma determinada escala.

 

A foto acima foi tirada do ppt[8] do discurso de Hyung Won Chung. A figura expressa principalmente um ponto de vista À medida que a escala do modelo aumenta, como de GPT3 para GPT4, as capacidades do modelo tornam-se cada vez mais fortes e até novas capacidades aparecerão.

No entanto, à medida que o tamanho do modelo aumenta, a velocidade de inferência de modelos grandes diminuirá gradualmente porque mais parâmetros requerem mais cálculos de GPU. A diminuição na velocidade de inferência leva ainda a uma pior experiência do usuário, portanto, como acelerar a inferência de modelos grandes torna-se cada vez mais importante.

 

3. Direções de otimização para aceleração de inferência de modelos grandes

Estrutura do modelo Llama2

Vamos primeiro dar uma breve olhada na estrutura da série de modelos Llama 2, referindo-nos ao artigo Llama 2 [9]. Atualmente, a maioria dos modelos de linguagem generativa, como a série Llama, usa principalmente o módulo Decoder na arquitetura Transformer. Na plataforma Huggingface, esse tipo de estrutura de modelo é geralmente chamada de CausalLM, que é um modelo de linguagem causal.

 

A imagem acima mostra a estrutura do modelo grande Llama2, cujo núcleo é o cálculo da atenção (Llama Attention). Este também é o módulo que consome mais tempo em todo o processo de raciocínio. A maioria das otimizações subsequentes são implementadas com base na Atenção. Para entender melhor a estrutura do modelo Llama 2, primeiro desmontamos brevemente todo o processo de raciocínio do modelo Llama2. Os alunos que não estiverem interessados ​​​​podem ignorá-lo diretamente.

  1. Depois que o usuário envia um prompt ao modelo, a primeira operação executada pelo modelo é prever o próximo caractere (Token) e adicionar o caractere previsto à entrada para continuar a previsão. Este processo continuará até que o modelo gere um token STOP, momento em que a previsão para e o modelo gera o resultado final.
  2. No processo de geração do próximo caractere (Token), o modelo precisa realizar N vezes os cálculos da Camada Decodificadora Llama. Especificamente, o modelo Llama-2-7B realiza 32 cálculos, enquanto o modelo Llama-2-13B realiza 40 cálculos.
  3. O link de cálculo mais crítico na camada decodificadora Llama é o cálculo da atenção (Llama Attention). A maior parte do tempo de inferência é consumida no cálculo da Atenção, portanto, uma variedade de técnicas de otimização são projetadas para melhorar a eficiência do cálculo da Atenção.

Quais são as direções de aceleração para inferência de modelos grandes?

A partir da análise estrutural do modelo Llama 2, podemos concluir que o modelo grande apresenta as seguintes características durante o processo de cálculo de inferência:

  1. Em todo o processo de raciocínio, a parte mais demorada é o cálculo da atenção. A otimização da velocidade para cálculos de atenção pode melhorar significativamente o desempenho geral do raciocínio.
  2. Durante o processo de cálculo de atenção, o cache de valor-chave (KV Cache) ocupa uma grande quantidade de recursos de memória de vídeo. Tomando o modelo 13B como exemplo, o processamento de uma sequência Prompt requer aproximadamente 3 GB de memória de vídeo adicional, e esta parte da memória de vídeo será frequentemente alocada e liberada, resultando em um grande número de fragmentos se os fragmentos da memória de vídeo puderem ser reduzidos. , o rendimento de modelos grandes também pode ser melhorado.
  3. Durante o processo de inferência, a GPU precisa processar e calcular um grande número de parâmetros. O modelo 7B possui 7 bilhões de parâmetros, enquanto o modelo 13B contém 13 bilhões de parâmetros. O modelo DBRX mais recente e poderoso do mundo possui 130 bilhões de parâmetros, o que requer processamento eficiente desses parâmetros. Também pode haver espaço para otimização aqui.

Em resposta às três características acima, a indústria propôs atualmente uma variedade de métodos de otimização eficazes, normalmente os seguintes:

 

1. Otimização da velocidade de cálculo do FlashAttention-Attention

FlashAttention[1] melhora a velocidade de cálculo do operador Attention sem alterar o resultado do cálculo do operador Attention. FlashAttention demonstra melhorias significativas de desempenho em uma variedade de modelos e tarefas. Por exemplo, em modelos como BERT-large e GPT-2, o FlashAttention pode atingir de 15% a 3 vezes a aceleração ponta a ponta em comparação com implementações de linha de base.

2. Otimização do gerenciamento de memória cache PageAttention-KV

O objetivo do PageAttention[3] é reduzir a fragmentação da memória de vídeo. O sistema VLLM baseado no PageAttention pode aumentar o rendimento do popular modelo de linguagem grande (LLM) em mais de 10 vezes, mantendo uma distribuição suave do consumo de tempo.

3. Parâmetros do modelo de redução MOE durante a inferência

O objetivo do MOE (Mixture of Experts) [4] é reduzir o número de parâmetros envolvidos no cálculo durante a inferência do modelo.

Resultados experimentais: O modelo Mixtral supera o modelo Llama 2 70B na maioria dos testes de benchmark e sua velocidade de inferência é 6 vezes mais rápida que o último. O modelo oferece suporte a vários idiomas, possui fortes recursos de geração de código e pode ser configurado com precisão para seguir instruções específicas, resultando em pontuações altas no benchmark MT-Bench.

Apresentaremos cada uma das instruções acima em detalhes posteriormente.

4. Otimização do cálculo do operador FlashAttention-Attention

FlashAttention publicou dois artigos que descrevem a otimização do operador Attention, incluindo FlashAttention-1[1] e FlashAttention-2[2]. Vamos tomar FlashAttention-1[1] como exemplo para entender seu princípio de otimização.

Vamos primeiro entender a estrutura hierárquica da memória da GPU. Consulte a figura abaixo.

 

A hierarquia de memória da GPU consiste em três partes principais: SRAM, HBM e DRAM. A seguir está a configuração de referência do A100GPU.

SRAM (Static Random Access Memory) tem a velocidade de acesso mais rápida (19 TB/s), mas sua capacidade é relativamente pequena (apenas 20 MB).

HBM (High Bandwidth Memory) oferece grande espaço de armazenamento (40 GB) e acesso a dados em alta velocidade (1,5 TB/s).

DRAM (Dynamic Random Access Memory), aqui se refere especificamente à memória principal fora da GPU, tem a maior capacidade (mais de 1 TB), mas a velocidade de acesso mais lenta (12,8 GB/s).

Como pode ser visto na configuração acima, quanto menor for a capacidade de memória, mais rápida será a velocidade de processamento.

 

No processo tradicional de cálculo de atenção, um grande número de operações de entrada/saída é concluído acessando o HBM. O algoritmo FlashAttention reduz o número de acessos ao HBM otimizando o processo de cálculo de atenção para melhorar a eficiência do cálculo, portanto, é um algoritmo de otimização com reconhecimento de IO.

A figura abaixo mostra o método de aceleração do FlashAttention, do artigo FlashAttention-1[1]

 

FlashAttention utiliza um truque inteligente para calcular o mecanismo de atenção com rapidez e eficiência de memória, ou seja, evita processar toda a enorme matriz de atenção de uma só vez, agrupando os dados de entrada, o que geralmente requer muita memória e recursos de computação. Imagine que temos uma biblioteca enorme (matriz), e o método FlashAttention é como dividir os livros da biblioteca em várias pilhas pequenas e, em seguida, processar apenas uma pilha de livros por vez. Dessa forma, não precisamos tirar todos os livros e colocá-los na mesa de uma só vez (o que exige uma mesa grande e muito tempo).

Especificamente, ao fazer cálculos de matriz, o FlashAttention reduz efetivamente a necessidade de armazenamento lento, mas de grande capacidade (HBM), dividindo os dados em blocos e usando o armazenamento rápido, mas de pequena capacidade (SRAM) na GPU para acesso ao cálculo. Isso não apenas acelera os cálculos, mas também reduz significativamente a necessidade de memória de vídeo.

Ao reduzir a dependência de armazenamento lento, o FlashAttention pode aumentar significativamente a velocidade do treinamento do modelo, mantendo ou até mesmo melhorando o desempenho do modelo. Por exemplo, o treinamento do BERT-grande é 15% mais rápido que o registro do MLPerf 1.1, a velocidade de treinamento do GPT-2 é três vezes maior que a das linhas de base HuggingFace e Megatron-LM, e a velocidade de treinamento dos campos de sequência longa é aumentada para 2,4 vezes.

A imagem abaixo vem do blog [14] apresentado por huggingface sobre flash Attention, que pode entender melhor como o Flash Attention divide a matriz.

 

Como o Flash Attention pode acelerar os cálculos, quais são as estruturas que suportam os cálculos do Flash Attention. Recomendaremos algumas estruturas de inferência excelentes na segunda metade do artigo.

5. Otimização do gerenciamento de memória PageAttention-Video

O conceito de PageAttention[3] foi originalmente proposto por Woosuk Kwon, autor do VLLM, e é também a estratégia de otimização mais importante da estrutura de raciocínio VLLM. Em seu artigo, Woosuk Kwon apresentou como usar o PageAttention para resolver um problema importante em serviços de modelo de linguagem grande (LLM) - gerenciar efetivamente a memória para melhorar o rendimento sem aumentar a latência.

Vamos primeiro entender a distribuição da estrutura de memória do modelo grande no caso de inferência. A figura a seguir é do artigo [3].

 

Este é um layout de memória para atender um modelo de linguagem grande com parâmetros de 13B no NVIDIA A100. A memória de inferência LLM de 13B ocupa parte. Os parâmetros do LLM de 13B ocupam 26G de memória de vídeo. o KVCache aumenta rapidamente, será alocado e liberado com frequência e o sistema gerará um grande número de fragmentos de memória de vídeo. Se não for processado, o sistema entrará em colapso lentamente.

 

Então, como o VLLM resolve o problema de fragmentação da memória de vídeo por meio do PageAttention? A imagem abaixo vem do artigo [14], que é a tecnologia de gerenciamento de memória de vídeo do VLLM.

 

PageAttention funciona dividindo o cache de valores-chave (cache KV) em pedaços de tamanho fixo (ou "páginas") e permitindo que esses pedaços sejam armazenados de forma não contígua na memória. Este método é inspirado na memória virtual e na tecnologia de paginação do sistema operacional para gerenciar recursos de memória de maneira mais flexível e eficiente.

No mecanismo de atenção tradicional, um cache KV solicitado precisa ser armazenado continuamente na memória, o que leva a dois problemas principais: fragmentação da memória e incapacidade de compartilhar memória de forma eficiente. A fragmentação da memória limita o tamanho dos lotes, enquanto a incapacidade de compartilhar memória resulta em dados duplicados, desperdiçando recursos valiosos de memória.

PageAttention segue as seguintes etapas para resolver esses problemas:

  1. Divida o cache KV: divida o cache KV para cada solicitação em vários pedaços menores, que têm tamanho fixo e podem ser ajustados com base nas necessidades específicas do modelo e do hardware.
  2. Armazenamento não contíguo: Ao contrário dos blocos de cache KV tradicionais, que são armazenados de forma contígua na memória, o PageAttention permite que esses blocos sejam distribuídos de forma não contígua na memória física. Desta forma, os blocos de memória podem ser alocados e reciclados dinamicamente de acordo com as necessidades reais, reduzindo o desperdício de memória.
  3. Gerenciamento dinâmico: PageAttention gerencia dinamicamente esses blocos de memória de maneira semelhante ao gerenciamento de memória virtual no sistema operacional. O sistema pode otimizar o uso da memória alocando ou liberando blocos de cache KV sob demanda com base no uso atual da memória.
  4. Compartilhamento de memória: PageAttention também oferece suporte ao compartilhamento de blocos de cache KV entre diferentes solicitações ou entre diferentes sequências na mesma solicitação. Esse compartilhamento é flexível e pode ocorrer em nível de bloco, reduzindo ainda mais o uso de memória e aumentando a eficiência.

Dessa forma, o PageAttention permite que o sistema de atendimento LLM melhore significativamente o rendimento das solicitações de processamento, reduzindo o desperdício de memória e melhorando o compartilhamento de memória, mantendo a mesma latência.

Através da otimização do PageAttention, o VLLM aumentou o rendimento do LLaMA 7B e 13B em mais de 10 vezes. A figura abaixo é do artigo [11].

 

6. Parâmetros do modelo de redução MOE durante a inferência

O recentemente lançado DBRX, o modelo grande de código aberto mais poderoso do mundo, com 130 bilhões de parâmetros, e o grande modelo de código aberto 8x7B da Mistral são ambos baseados na arquitetura MOE. Por que modelos com maior número de parâmetros precisam utilizar a arquitetura MOE? Tomamos o grande modelo de código aberto 8x7B da Mistral como exemplo para apresentar as vantagens de desempenho da arquitetura MOE.

 

Falando em modelos grandes MOE, vamos primeiro comparar as diferenças estruturais entre modelos grandes comuns e modelos grandes MOE, consulte a imagem acima. No modelo grande MOE, os parâmetros do modelo grande são divididos em 8 grupos mais um roteador. Cada grupo é chamado de grupo de especialistas. Quando a solicitação chega, o modelo grande do MOE primeiro faz com que o roteador selecione dois dos oito grupos de especialistas, e apenas esses dois grupos de especialistas participam do cálculo. Em comparação com modelos grandes comuns, todos os parâmetros precisam participar dos cálculos da GPU.

Portanto, a velocidade de inferência do modelo grande MOE é cerca de quatro vezes mais rápida do que o modelo grande comum do mesmo nível.

Vamos dar uma olhada na implementação do Mistral MOE. Mistral MOE é um modelo grande 8 * 7B [12] lançado por mistral.ai. A figura abaixo é do artigo [12], que é a estrutura de sua camada especializada. Modelo grande 8*7B.

 

Mixtral 8x7B é um modelo de linguagem Sparse Mixture of Experts (SMoE). É baseado na arquitetura do Mistral 7B, mas cada camada é composta por 8 blocos feedforward (ou seja, especialistas). À medida que cada token é processado, uma rede de roteamento em cada camada seleciona dois especialistas para processar o estado atual e combinar suas saídas. Embora cada token interaja apenas com dois especialistas, os especialistas selecionados em cada intervalo de tempo podem ser diferentes, de modo que cada token tem acesso a 47B de parâmetros, mas apenas 13B de parâmetros ativos são usados ​​durante a inferência.

Mixtral demonstra seu desempenho superior em vários benchmarks, especialmente em matemática, geração de código e compreensão multilíngue. Comparado ao Llama 2 70B e GPT-3.5, o Mixtral apresenta desempenho semelhante ou melhor na maioria das métricas de avaliação. Especificamente, o Mixtral usa 5x menos parâmetros ativos (13B) do que o Llama 2 70B (70B), mas tem desempenho melhor ou igual em quase todas as categorias.

O grande modelo MOE pode aumentar o número de parâmetros sem reduzir a velocidade de inferência, que é a tendência de desenvolvimento de grandes modelos no futuro.

 

7. Paralelismo de tensor - Paralelismo de tensor

Se você tiver várias placas GPU, poderá usar o paralelismo de tensor para acelerar ainda mais a velocidade de inferência de modelos grandes.

Imagine que você tem um livro muito grosso e deseja copiar o livro inteiro de uma vez, mas sua copiadora só consegue copiar algumas páginas por vez. Neste momento, você pode dividir o livro em várias partes, copiar cada parte separadamente e, por fim, juntar todas as partes copiadas em ordem, completando assim a cópia do livro inteiro.

No paralelismo tensorial, o modelo grande com o qual estamos lidando é como aquele livro grosso, e a GPU é como uma copiadora. Como uma única GPU não pode processar todo o modelo grande de uma vez, precisamos dividir o modelo (neste caso, o tensor de peso) em várias partes e permitir que diferentes GPUs os processem separadamente (equivalente a diferentes partes de um livro fotocopiado). Ao processar dados de entrada, é como copiar cada página do livro separadamente e, em seguida, unir as partes copiadas para formar um resultado de saída completo.

Dessa forma, ao compartilhar o trabalho, várias GPUs trabalham juntas para concluir uma tarefa grande que não pode ser concluída por uma única GPU. É assim que funciona o paralelismo tensorial e nos permite lidar com modelos muito grandes.

 

Foto do artigo[13]

A tecnologia de paralelismo tensor é usada para implantar grandes modelos distribuídamente em várias GPUs. Tomemos a multiplicação de matrizes como exemplo. Quando o tensor de entrada é uma matriz multiplicada pelo primeiro tensor de peso, esta operação pode ser considerada como primeiro dividindo o tensor de peso por colunas e, em seguida, dividindo cada coluna após a divisão com a entrada. os resultados desses produtos. Essas saídas combinadas serão exportadas da GPU e agregadas para formar o resultado final. O processo é mostrado na figura acima, consulte o artigo [13].

8. Estrutura de raciocínio recomendada

No artigo anterior, discutimos diversas tecnologias de aceleração e otimização, como Flash Attention, Page Attention, MOE e tecnologia de tensor paralelo. A seguir, com base em nossas próprias operações e avaliações reais, recomendaremos algumas estruturas de inferência que atualmente apresentam bom desempenho.

 

9. Resumo e Perspectivas

Neste artigo, exploramos profundamente uma série de tecnologias e métodos projetados para melhorar a velocidade de inferência de modelos grandes, incluindo, mas não se limitando a Flash Attention, Page Attention, MOE e tecnologia de tensor paralelo. Ao implantar clusters dedicados de inferência de grandes modelos em lotes no ambiente de produção, reduzimos com sucesso a velocidade de inferência em 50%, incluindo modelos em escala de 70B, e aplicamos essas tecnologias de forma estável ao ambiente de produção, comprovando assim a eficácia e eficácia desses métodos de otimização. Praticidade.

À medida que grandes modelos são cada vez mais utilizados em vários campos, como melhorar efetivamente a velocidade de inferência e reduzir o custo da inferência tornou-se um desafio. Nossa prática não apenas demonstra algumas tecnologias de aceleração disponíveis atualmente, mas também recomenda várias estruturas de inferência de modelos grandes que apresentam excelente desempenho após avaliação com base em nossa experiência. Estas sugestões destinam-se a ajudar os leitores a selecionar a estrutura de raciocínio que melhor se adapta às suas necessidades quando confrontados com muitas escolhas.

Olhando para o futuro, com o avanço contínuo da tecnologia e o surgimento de novos algoritmos, acreditamos que mais tecnologias de otimização de aceleração serão desenvolvidas para melhorar ainda mais a eficiência da inferência de grandes modelos. Finalmente, também esperamos a oportunidade de discutir profundamente e introduzir mais novas tecnologias e métodos para melhorar a velocidade da inferência de grandes modelos no futuro.

 

Referências

[1] FlashAttention: atenção exata rápida e com uso eficiente de memória com IO-Awareness (https://arxiv.org/abs/2205.14135)

[2] FlashAttention-2: atenção mais rápida com melhor paralelismo e particionamento de trabalho (https://arxiv.org/abs/2307.08691)

[3] Gerenciamento eficiente de memória para atendimento de modelos de linguagem grande com PagedAttention (https://arxiv.org/abs/2309.06180)

[4] mixtral-of-experts(https://mistral.ai/news/mixtral-of-experts/)

[5] Mixtral de Especialistas (https://arxiv.org/abs/2401.04088)

[6] MEDUSA: Estrutura simples de aceleração de inferência LLM com múltiplas cabeças de decodificação (https://arxiv.org/pdf/2401.10774.pdf)

[7] Leis de escala para modelos de linguagem neural (https://arxiv.org/pdf/2001.08361.pdf)

[8] Hyung Won Chung (OpenAI), Large Language Models (em 2023), palestrado na Universidade Nacional de Seul

[9] Lhama 2: Fundação aberta e modelos de bate-papo ajustados (https://arxiv.org/abs/2307.09288)

[10] Atenção é tudo que você precisa(https://arxiv.org/pdf/1706.03762.pdf)

[11] https://blog.vllm.ai/2023/06/20/vllm.html

[12] https://arxiv.org/pdf/2401.04088.pdf

[13] https://huggingface.co/docs/text-generation-inference/en/conceptual/tensor_parallelism

[14] https://huggingface.co/docs/text-generation-inference/en/conceptual/flash_attention

[15] https://blog.vllm.ai/2023/06/20/vllm.html

* Texto/  linggong

Este artigo é original da Dewu Technology. Para artigos mais interessantes, consulte: Dewu Technology.

A reimpressão sem a permissão da Dewu Technology é estritamente proibida, caso contrário, a responsabilidade legal será processada de acordo com a lei!

Os recursos piratas de "Qing Yu Nian 2" foram carregados no npm, fazendo com que o npmmirror suspendesse o serviço unpkg. Zhou Hongyi: Não resta muito tempo para o Google. Sugiro que todos os produtos sejam de código aberto . time.sleep(6) aqui desempenha um papel. Linus é o mais ativo em “comer comida de cachorro”! O novo iPad Pro usa 12 GB de chips de memória, mas afirma ter 8 GB de memória. O People’s Daily Online analisa o carregamento estilo matryoshka do software de escritório: Somente resolvendo ativamente o “conjunto” poderemos ter um futuro . novo paradigma de desenvolvimento para Vue3, sem a necessidade de `ref/reactive `, sem necessidade de `ref.value` MySQL 8.4 LTS Manual chinês lançado: Ajuda você a dominar o novo domínio de gerenciamento de banco de dados Tongyi Qianwen nível GPT-4 modelo principal preço reduzido em 97%, 1 yuan e 2 milhões de tokens
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/5783135/blog/11183282
Recomendado
Clasificación