Você está em uma entrevista para Cientista de Pesquisa 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 128K de contexto" Entrevista encerrada. Aqui está o que você perdeu:
Aumentar a janela de contexto não se trata apenas de matrizes maiores. Num transformador tradicional, expandir os 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 gerimos isso? continuar...👇
1) Atenção Esparsa Limita o cálculo de atenção a um subconjunto de tokens ao: - Usar atenção local (tokens atendem apenas aos seus vizinhos). - Permitir que o modelo aprenda em quais tokens se concentrar. Mas isso tem um compromisso entre complexidade computacional e desempenho.
Uma ideia semelhante foi utilizada no ModernBERT. → Atenção global completa a cada 3ª camada → Atenção local (128 tokens) de outra forma Resultado: - 16x maior comprimento de sequência - 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ê, precisa estar totalmente ciente de toda a trama para entender a maior parte dela (atenção global total)? Ou a consciência do capítulo atual é suficiente (atenção local), desde que você ocasionalmente pense sobre sua importância para a trama principal (atenção global)? Na grande maioria dos casos, é a última.
2) Flash Attention 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, utiliza atenção global, mas de forma eficiente. Toda a ideia gira em torno da otimização do movimento de dados dentro da memória da GPU. Vamos entender!
Alguns detalhes de fundo: - Um thread é a menor unidade de execução. - Vários threads formam um bloco. Além disso: - 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 isto 👇
A atenção move grandes matrizes entre SRAM e HBM: Para calcular QK: - distribuir matrizes para threads - calcular, e - enviar o produto para HBM Para calcular softmax: - distribuir o produto para threads - calcular, e - enviar a saída para HBM Repetir para todas as camadas. Verifique isto 👇
A atenção flash envolve otimizações a nível de hardware, onde utiliza SRAM para armazenar em cache os resultados intermédios. Desta forma, reduz movimentos redundantes, oferecendo um aumento de velocidade de até 7,6x em relação aos métodos de atenção padrão. Verifique isto 👇
98,94K