Vous êtes dans un entretien de Chercheur Scientifique chez OpenAI. L'intervieweur demande : "Comment étendriez-vous la longueur de contexte d'un LLM de 2K à 128K tokens ?" Vous : "Je vais affiner le modèle sur des documents plus longs avec un contexte de 128K." Entretien terminé. Voici ce que vous avez manqué :
Étendre la fenêtre de contexte ne concerne pas seulement des matrices plus grandes. Dans un transformateur traditionnel, augmenter les tokens par 8x augmente les besoins en mémoire de 64x en raison de la complexité quadratique de l'attention. Référez-vous à l'image ci-dessous ! Alors, comment gérons-nous cela ? continue...👇
1) Attention Éparse Elle limite le calcul de l'attention à un sous-ensemble de tokens en : - Utilisant l'attention locale (les tokens n'atteignent que leurs voisins). - Permettant au modèle d'apprendre sur quels tokens se concentrer. Mais cela implique un compromis entre la complexité computationnelle et la performance.
Une idée similaire a été utilisée dans ModernBERT. → Attention globale complète tous les 3ème niveaux → Attention locale (128 tokens) sinon Résultat : - Longueur de séquence 16x plus grande - Performance beaucoup meilleure - Encodeur le plus efficace en mémoire Simple mais puissant. 👇
Voici une explication intuitive tirée de l'article : Imaginez que vous lisez un livre. Pour chaque phrase que vous lisez, devez-vous être pleinement conscient de l'intrigue entière pour comprendre la plupart d'entre elles (attention globale complète) ? Ou la connaissance du chapitre actuel suffit-elle (attention locale), tant que vous pensez de temps en temps à sa signification par rapport à l'intrigue principale (attention globale) ? Dans la grande majorité des cas, c'est la seconde option.
2) Attention Flash C'est une méthode rapide et économe en mémoire qui conserve l'exactitude des mécanismes d'attention traditionnels, c'est-à-dire qu'elle utilise une attention globale mais de manière efficace. L'idée principale tourne autour de l'optimisation du mouvement des données dans la mémoire GPU. Comprenons cela !
Quelques détails de base : - Un fil est la plus petite unité d'exécution. - Plusieurs fils forment un bloc. Aussi : - Les fils dans un bloc partagent une mémoire rapide (mais rare) appelée SRAM. - Tous les blocs partagent une mémoire globale appelée HBM (abondante mais lente). Vérifiez ceci 👇
L'attention déplace de grandes matrices entre SRAM et HBM : Pour calculer QK : - distribuer les matrices aux threads - calculer, et - envoyer le produit à HBM Pour calculer softmax : - distribuer le produit aux threads - calculer, et - envoyer la sortie à HBM Répéter pour toutes les couches. Vérifiez ceci 👇
L'attention flash implique des optimisations au niveau matériel où elle utilise la SRAM pour mettre en cache les résultats intermédiaires. De cette manière, elle réduit les mouvements redondants, offrant une accélération allant jusqu'à 7,6 fois par rapport aux méthodes d'attention standard. Vérifiez cela 👇
98,92K