A tecnologia de compressão inova novamente, dando aos modelos grandes a chance de caber nos celulares

Fonte da imagem: gerada por Unbounded AI

Grandes modelos de linguagem (LLMs), especialmente modelos generativos de Transformer pré-treinados (GPT), têm mostrado excelente desempenho em muitas tarefas de linguagem complexas. Essa inovação levou ao desejo de executar esses LLMs nativamente em dispositivos móveis para proteger a privacidade do usuário. No entanto, mesmo LLMs pequenos são grandes demais para serem executados nesses dispositivos.

Por exemplo, o pequeno LLaMA possui parâmetros de 7B e sua versão FP16 tem 14 GB de tamanho, enquanto os dispositivos móveis possuem apenas 18 GB de DRAM. Portanto, compactar o LLM por meio da otimização do tempo de treinamento (como esparsificação, quantização ou agrupamento de peso) é uma etapa fundamental para a implantação do LLM no dispositivo. No entanto, a otimização do tempo de treinamento do LLM é muito cara devido ao tamanho do modelo e à sobrecarga de recursos computacionais. DKM, um dos algoritmos SOTA para agrupamento de pesos, requer tempo excessivo de treinamento para agrupamento de pesos variáveis devido à necessidade de analisar as interações entre todos os pesos e todas as opções possíveis de agrupamento.

Portanto, muitas técnicas de compressão LLM existentes, como GTPQ e AWQ, dependem da otimização pós-treinamento. Neste artigo, os pesquisadores propõem técnicas de otimização de memória para obter clustering ponderado em tempo de treinamento e sua aplicação em DKM, também conhecido como eDKM.

As técnicas usadas neste artigo incluem orquestração de tensores entre dispositivos e exclusividade e fragmentação da matriz de peso. Ao usar o eDKM para ajustar o modelo LLaMA 7B e compactá-lo para 3 bits por fator de peso, os pesquisadores alcançaram uma redução de cerca de 130 vezes no consumo de memória da pilha do decodificador, o que é melhor do que a tecnologia de compactação de 3 bits existente.

Melhore a eficiência da memória do DKM

Como mostrado na Figura 1, poda, quantização e normalização são técnicas populares de otimização de peso. Esses métodos otimizam o peso original W e obtêm o peso

, para otimizar a latência de inferência, a precisão ou o tamanho do modelo. Entre essas tecnologias, os pesquisadores deste artigo focam principalmente no clustering ponderado, especialmente no algoritmo de clustering ponderado DKM.

O agrupamento de pesos é uma discretização de peso não linear na qual a matriz de pesos é compactada em uma tabela de consulta e uma lista de índices de baixa precisão da tabela de consulta que os aceleradores de inferência modernos podem processar. O DKM realiza agrupamento de pesos diferenciáveis analisando a interação entre pesos (denotados por W) e pontos centrais (denotados por C) e faz uma compensação entre taxa de compressão e precisão.

Portanto, usar DKM para compactação LLM produz resultados de alta qualidade. No entanto, o mapa de atenção gerado durante o processo de cálculo do DKM é grande, e a complexidade da memória da passagem para frente/para trás é O (|W||C|) (ou seja, a matriz na Figura 1), o que é particularmente difícil para LLM compressão. . Por exemplo, um modelo LLaMA 7B que calcula apenas mapas de atenção para clustering de peso de 4 bits requer pelo menos 224 GB de memória.

*Figura 1: Visão geral do sistema de otimização de peso. No DKM, o sistema cria internamente um mapa de atenção que pode ser agrupado por pesos diferenciáveis. *

Portanto, os pesquisadores precisam usar a memória da CPU para lidar com esses grandes requisitos de memória, ou seja, primeiro armazenar as informações na memória da CPU e depois copiá-las de volta para a GPU quando necessário. No entanto, isso gerará muito tráfego entre a GPU e a CPU (retardando assim o treinamento) e exigirá uma enorme capacidade de memória da CPU. Isso significa que é fundamental reduzir o número de transações entre CPU e GPU e minimizar o tráfego por transação. Para lidar com esses problemas, os pesquisadores introduziram duas novas tecnologias de otimização de memória no PyTorch.

  • Orquestração de tensores entre dispositivos: rastreie tensores copiados entre dispositivos para evitar cópias redundantes, reduzindo assim o uso de memória e acelerando o treinamento.
  • Exclusividade de peso e processamento de fragmentação: aproveite o fato de que o peso de 16 bits tem apenas 216 valores exclusivos para reduzir a representação do mapa de atenção (mostrado na Figura 1) e dividi-lo ainda mais em vários modelos de aprendizagem.

Orquestração de tensores entre dispositivos

PyTorch usa um armazenamento de dados para representar tensores, que está vinculado ao layout de dados e metadados reais, que são usados para salvar a forma, tipo, etc. Essa arquitetura tensor permite que o PyTorch reutilize o armazenamento de dados tanto quanto possível e reduza efetivamente o uso de memória. No entanto, quando um tensor é movido para outro dispositivo (como da GPU para a CPU), o armazenamento de dados não pode ser reutilizado e um novo tensor precisa ser criado.

A Tabela 1 ilustra o uso de memória dos tensores ao mover-se entre dispositivos PyTorch. O tensor x0 alocado na linha 0 consome 4MB na GPU. Quando sua visualização muda na linha 1, nenhuma memória GPU adicional é necessária, pois o armazenamento de dados subjacente pode ser reutilizado (ou seja, x0 e x1 são na verdade iguais). No entanto, quando x0 e x1 são movidos para a CPU como nas linhas 2 e 3, embora y0 e y1 possam compartilhar o mesmo armazenamento de dados na CPU, o consumo de memória da CPU torna-se 8 MB, o que resulta em redundância de memória da CPU e aumenta a GPU- tráfego para CPU.

*Tabela 1: O ajuste fino do LLM pode exigir o uso de memória da CPU para descarregar o consumo de memória na GPU. A falta de gerenciamento de tensores entre dispositivos pode levar a cópias redundantes entre dispositivos (especialmente quando o gráfico computacional é complexo), o que é particularmente prejudicial para a otimização do tempo de treinamento do LLM. Por exemplo, embora x0 e x1 sejam o mesmo tensor com visualizações diferentes, os tensores resultantes y0 e y1 não compartilham o armazenamento de dados quando copiados para a CPU, enquanto na GPU x0 e x1 o fazem. *

Para resolver essa ineficiência, os pesquisadores colocaram uma camada de orquestração na Figura 2(b), onde o preto representa o armazenamento real de dados e metadados, e o cinza representa apenas os metadados. A Figura 2 (a) mostra o exemplo da Tabela 1, onde x1 compartilha o layout de dados com x0, mas y0 e y1 possuem armazenamento de dados duplicado na CPU. Conforme mostrado na Figura 2 (b), ao inserir uma camada de orquestração, os pesquisadores evitam essa redundância e reduzem o tráfego GPU-CPU. Os pesquisadores usaram o save-tensor-hook no PyTorch para implementar esse esquema de troca, verificando se o mesmo armazenamento de dados foi copiado.

No entanto, usar tal esquema para verificar se o mesmo tensor existe no dispositivo alvo é caro. No exemplo da Figura 2(b), o pesquisador não copiou x1 para a CPU, mas simplesmente retornou uma referência a y0 e a operação de visualização entre x1 e y0.

*Figura 2: Quando a orquestração de tensores entre dispositivos é aplicada à situação da Tabela 1, a duplicação no lado da CPU pode ser evitada, economizando assim memória e tráfego. *

Navegar no gráfico computacional adiciona ciclos computacionais extras e salvar cópias desnecessárias pode compensar essa sobrecarga. Os pesquisadores descobriram que uma pesquisa em 4 saltos foi suficiente para detectar todos os casos elegíveis no gráfico computacional da implementação original do DKM.

Exclusividade e fragmentação de peso

Na maioria dos treinamentos LLM, os pesos geralmente usam armazenamento de 16 bits (como BF16 ou FP16), o que significa que, embora existam bilhões de parâmetros no LLM, existem apenas 216 coeficientes exclusivos devido à largura de bits. Isto oferece a oportunidade de comprimir significativamente o mapa de atenção entre pesos e pontos centrais, conforme mostrado na Figura 3.

Figura 3: Exclusividade e fragmentação de peso

Resultados experimentais

Precisão LLM

Este artigo compara o eDKM a outros esquemas de compactação baseados em quantização, incluindo: RTN, SmoothQuant, GPTQ, AWQ e LLM-QAT. Para o eDKM, os pesquisadores também realizaram compactação de 8 bits na camada de incorporação. Finalmente chegaram-se às seguintes conclusões:

  • O eDKM permite que o modelo LLaMA 7B compactado de 3 bits supere todos os outros esquemas de compactação de 3 bits.
  • eDKM tem a melhor precisão no benchmark ARC-e em configurações de 3 e 4 bits.
  • O desempenho do eDKM é muito competitivo nos benchmarks PIQA e MMLU usando modelo de compressão de 4 bits.

Experimento de ablação

Em experimentos de ablação, os pesquisadores mediram a compensação entre o consumo de memória e a velocidade de avanço e retrocesso da compactação de 3 bits usando uma camada de atenção na pilha de decodificadores LLaMA 7B como exemplo. A orquestração de tensores entre dispositivos por si só reduz o consumo de memória em 2,9 vezes com muito pouca sobrecarga de tempo de execução, enquanto os módulos de fragmentação e exclusividade economizam 23,5 vezes e 16,4 vezes, respectivamente. Quando todas as tecnologias são combinadas, o eDKM resulta em economias de aproximadamente 130 vezes. Embora essas etapas exijam sobrecarga adicional de computação e comunicação, a sobrecarga do tempo de execução é insignificante, pois o tráfego entre a GPU e a CPU é significativamente reduzido.

Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Partilhar
Comentar
0/400
Nenhum comentário
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)