8 3090, 1 dia de compressão trilhões parâmetro modelo grande! 3,2 TB despenca para 160 GB, com uma taxa de compressão de até 20 vezes

Fonte do artigo: New Zhiyuan

Recentemente, pesquisadores da ISTA propuseram um novo método de quantização de modelo, QMoE, que pode comprimir um parâmetro de 1,6 trilhão SwitchTransformer para menos de 160GB (0,8 bits por parâmetro) com pouca perda de precisão.

Fonte da imagem: Gerado por Unbounded AI

Com a arquitetura do GPT-4 sendo "open source" por líderes conhecidos da indústria, a Hybrid Expert Architecture (MoE) tornou-se mais uma vez o foco da pesquisa.

O GPT-4 tem 16 modelos especializados com um total de 1,8 trilhão de parâmetros. Cada geração de token requer cerca de 280 bilhões de parâmetros e 560 TFLOPs

No entanto, o custo de um modelo mais rápido e preciso é o grande número de parâmetros e o alto custo que vem com ele.

Por exemplo, o parâmetro de 1,6 trilhão SwitchTransformer-c2048 modelo requer 3,2 TB de memória GPU para funcionar eficazmente.

Para resolver este problema, pesquisadores do Instituto Austríaco de Tecnologia (ISTA) propuseram uma estrutura de compressão e execução completamente nova – QMoE.

Endereço:

Ao empregar um núcleo de decodificação de GPU especialmente projetado, o QMoE tem inferência de compressão de ponta a ponta eficiente – que pode alcançar até 20x de compressão com apenas uma ligeira perda de precisão.

Especificamente, o QMoE pode compactar o parâmetro de 1,6 trilhão SwitchTransformer-c2048 modelo para menos de 160GB em um único servidor GPU em um único dia, o que equivale a apenas 0,8 bits por parâmetro.

Isso permite que você execute em 4 GPUs NVIDIA RTX A6000 ou 8 NVIDIA RTX 3090 com menos de 5% do custo de inferência para um modelo não compactado.

Quantização do modelo MoE

A ideia central do Modelo Híbrido (MoE) é aumentar o número de parâmetros do modelo para melhorar as capacidades de modelagem da rede, mantendo o custo computacional quase o mesmo em comparação com a arquitetura de feedforward padrão.

Como apenas uma pequena fração da rede precisa ser chamada para processar cada token de entrada, esse design pode aproveitar 100 ou até 1.000 "especialistas" para construir modelos de hiperescala para treinamento e inferência eficientes.

Está provado que o MoE pode melhorar muito a precisão e a velocidade de treino quando a velocidade de inferência é comparável. Mas um volume tão grande significa que é necessária muita memória de vídeo para fazer o modelo funcionar.

Um grande desafio na compressão do MoE é a necessidade de manter um grande conjunto de ativações.

A este respeito, os dados intermediários que precisam ser calculados podem ser controlados em uma pequena parte, organizando cuidadosamente a execução do modelo. Isso descarrega o armazenamento principal da GPU para uma memória de CPU mais barata e cara.

Especificamente, mantenha um grande buffer B e atualize a parte densa do bloco Transformer da seguinte maneira:

  1. Da CPU para a GPU, pegue uma "amostra" X contendo centenas de tokens;

  2. Através da camada densa correspondente, obtém-se o resultado Y;

  3. Calcular e armazenar a alocação especializada de tokens em Y;

  4. Envie Y de volta para a CPU e substitua X em B.

Para secções esparsas:

  1. Da CPU para a GPU, pegue todos os tokens em B que foram atribuídos ao Expert E, representado por X_E.

  2. Use-os para gerar E's de especialistas compactados (por exemplo, usando GPTQ).

  3. Execute X_E através de E' para obter Y_E'.

  4. Envie Y_E' de volta para a CPU e substitua X_E em B.

Como mostrado na Figura 2, esse processo minimiza o consumo de memória e os custos de transferência: apenas uma cópia de B é necessária, e cada token é lido e gravado apenas duas vezes em cada bloco do Transformer.

Além disso, os pesquisadores projetaram um esquema de codificação e um núcleo CUDA para alcançar a compressão de menos de 1 bit por peso e minimizar a sobrecarga de execução da GPU para inferência.

Efeito de compressão

Precisão

Primeiro, os pesquisadores quantificaram todos os modelos SwitchTransformer com precisão de 2 bits e ternária e, em seguida, avaliaram suas perdas de validação.

Para 128 especialistas, o tamanho padrão da amostra de calibração é 10K; Para 2048 especialistas, o tamanho padrão da amostra de calibração é 160K. Ao mesmo tempo, os pesquisadores também testaram tamanhos de amostra de 0,5x e 2x.

Os resultados mostram que o modelo de 2 dígitos pode ser alcançado com perda mínima (1,7% em relação a C2048) e um pequeno aumento na perda sob precisão ternária (6,7% em relação a C2048) usando quantização dependente de dados.

Isto não só prova a eficácia do método de quantificação avançada proposto, mas também mostra que a compressão de largura de bits extremamente baixa é realmente adequada para MoE em grande escala.

Além disso, os pesquisadores avaliaram dados do arXiv, GitHub, StackExchange e Wikipedia da RedPajama.

Embora apenas <0,01% dos dados de calibração venham desses locais, o modelo compactado ainda mantém quase o mesmo desempenho que a distribuição central.

No caso dos dados de calibração, o aumento do tamanho da amostra geralmente melhora ligeiramente o desempenho e é mais percetível na quantização ternária. Mas também há algum ruído no processo, especialmente em 2 bits.

### Compressão

No teste, os pesquisadores consideraram tanto a compressão do módulo MoE isoladamente, quanto a compressão relativa a todo o modelo e todos os seus metadados.

Apenas para MoE, a compressão >16x é alcançada em todas as escalas, o que equivale a 1 bit de armazenamento <espaço para cada parâmetro.

No c2048, a taxa de compressão geral é de 19,81 vezes, o que equivale a 0,807 bits por parâmetro, mesmo incluindo todas as camadas densas não comprimidas, reduzindo o tamanho do ponto de verificação de 3142GB para 158,6GB.

Além disso, pode-se observar que a taxa de compressão aumenta com o tamanho do modelo por dois motivos:

(a) a esparsidade natural aumenta, e os pesquisadores otimizaram o dicionário de codificação para C2048;

b) Quanto maior for a camada, mais próxima está a distribuição de peso da independência.

### Tempo de execução

Finalmente, os pesquisadores avaliaram o tempo que levaria para gerar um modelo compactado em uma única GPU A6000 para diferentes quantidades de dados de calibração.

Os resultados mostram que modelos menores podem ser compactados em menos de uma hora, e até mesmo o c2048 pode ser concluído em menos de um dia, confirmando a alta eficiência do QMoE.

De large128 para c2048, o aumento no tempo de execução é basicamente proporcional à diferença de tamanho, embora este último use 16 vezes mais amostras. Isso ocorre porque o tamanho da amostra por especialista permanece o mesmo, enquanto o tamanho do especialista aumenta apenas ligeiramente.

### Resultado da execução

Primeiro, uma comparação direta (isolada) do kernel do produto matriz-vetor comprimido com o kernel cuBLAS bfloat16 (descompactado) do padrão PyTorch.

A Figura 5 (à esquerda) mostra o tempo que o MoE leva para descobrir formas de matriz em duas GPUs diferentes em comparação com núcleos bfloat16.

Embora os pesquisadores tenham usado um desempenho de armazenamento ruim, ainda levou menos tempo para executar o kernel de compressão do que a linha de base quase ideal do bfloat16. Até 35% mais rápido em uma determinada forma de matriz.

A latência dessas operações também é muito baixa, com a menor matriz levando < 0,02 ms e a maior < 0,05 ms.

Posteriormente, os pesquisadores conduziram um benchmark de ponta a ponta do kernel no HuggingFace usando os pesos reais do modelo MoE comprimido.

Como mostrado na Figura 5 (à direita), a execução de ponta a ponta do modelo compactado é apenas <5% mais lenta do que a do modelo padrão (não compactado).

Embora o tempo de cada camada seja mais rápido, ainda há uma ligeira diminuição na velocidade porque o codificador às vezes roteia vários tokens para o mesmo especialista.

A implementação atual é executar um produto de vetor de matriz separado para cada token, enquanto a linha de base executa uma multiplicação de matriz conjunta mais eficiente.

Em algumas aplicações, isso é um grande gargalo. Isso pode ser feito introduzindo um loop in-token no kernel ou, no caso de um grande número de tokens, executando uma descompressão completa antes de executar a multiplicação da matriz padrão.

Discussão & Limitações

Em resumo, o QMoE é uma estrutura de compressão e inferência de ponta a ponta de código aberto para resolver o problema da sobrecarga excessiva de memória no processo de inferência do MoE.

Pela primeira vez, os pesquisadores demonstraram que um modelo de trilhões de parâmetros como o SwitchTransformer c2048 pode ser comprimido com precisão a menos de 1 bit por parâmetro, com uma taxa de compressão de quase 20 vezes. E, pela primeira vez, a execução eficiente de ponta a ponta desses modelos é alcançada em um único servidor GPU de nível de consumidor.

No entanto, como apenas um pequeno número de ME precisos e em grande escala estão disponíveis publicamente, o conjunto de modelos estudados é limitado.

Além disso, devido ao seu tamanho, a maioria dos MoE são treinados e implantados em diferentes estruturas personalizadas, o que requer integração manual complexa para pesquisas futuras.

Ainda assim, os pesquisadores cobriram alguns dos maiores e mais precisos MoEs, notavelmente o SwitchTransformer.

Recursos:

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)