Você está em uma entrevista de cientista pesquisador na OpenAI. O entrevistador pergunta: "Como você expandiria o comprimento do contexto de um LLM de 2K para 128K tokens?" Você: "Vou ajustar o modelo em documentos mais longos com contexto de 128K" Entrevista terminada. Aqui está o que você perdeu:
Estender a janela de contexto não se trata apenas de matrizes maiores. Em um transformador tradicional, a expansão de tokens em 8x aumenta as necessidades de memória em 64x devido à complexidade quadrática da atenção. Consulte a imagem abaixo! Então, como administramos isso? continuar... 👇
1) Atenção esparsa Ele limita a computação de atenção a um subconjunto de tokens: - Usando a atenção local (os tokens atendem apenas aos vizinhos). - Permitir que o modelo aprenda em quais tokens se concentrar. Mas isso tem uma compensação entre complexidade computacional e desempenho.
Uma ideia semelhante foi usada no ModernBERT. → Atenção global total a cada 3ª camada → Atenção local (128 tokens) caso contrário Resultado: - Comprimento de sequência 16x maior - Desempenho muito melhor - Codificador mais eficiente em termos de memória Simples, mas poderoso. 👇
Aqui está uma explicação intuitiva retirada do artigo: Imagine-se lendo um livro. Para cada frase que você lê, você precisa estar totalmente ciente de todo o enredo para entender a maior parte dele (atenção global total)? Ou a consciência do capítulo atual é suficiente (atenção local), desde que você ocasionalmente pense em seu significado para o enredo principal (atenção global)? Na grande maioria dos casos, é o último.
2) Atenção do flash Este é um método rápido e eficiente em termos de memória que mantém a exatidão dos mecanismos de atenção tradicionais, ou seja, usa a atenção global, mas de forma eficiente. A ideia gira em torno da otimização da movimentação de dados na memória da GPU. Vamos entender!
Alguns detalhes de fundo: - Um thread é a menor unidade de execução. - Vários tópicos formam um bloco. Também: - Os threads em um bloco compartilham uma memória rápida (mas escassa) chamada SRAM. - Todos os blocos compartilham uma memória global chamada HBM (abundante, mas lenta). Verifique isso 👇
A atenção move grandes matrizes entre SRAM e HBM: Para calcular o QK: - distribuir matrizes para threads - computar, e - enviar o produto para a HBM Para calcular softmax: - distribuir o produto para threads - computar, e - enviar saída para a HBM Repita para todas as camadas. Verifique isso 👇
A atenção flash envolve otimizações no nível do hardware em que utiliza SRAM para armazenar em cache os resultados intermediários. Dessa forma, reduz os movimentos redundantes, oferecendo uma velocidade de até 7,6x em relação aos métodos de atenção padrão. Verifique isso 👇
98,94K