Qu’est-ce que Flash-Decoding, et quand accélère-t-il les LLMs ?
Traduction automatique
Cet article a été traduit automatiquement depuis la version originale en anglais.
Flash-Decoding parallélise l’attention au décodage sur la séquence de clés et de valeurs en cache. Différents blocs GPU traitent différentes parties d’un long historique, puis combinent les sorties partielles de l’attention avec une normalisation numériquement correcte. Cela peut aider la génération par petits lots lorsqu’un cache long fournit plus de travail que l’ordonnancement actuel de l’attention n’en exécute efficacement.
Il accélère une opération d’attention. Le gain de vitesse obtenu en serving dépend aussi du temps passé dans les autres parties du modèle.
Pourquoi le décodage nécessite un autre ordonnancement
Pendant le prefill, de nombreuses positions de requête peuvent être traitées en parallèle. Pendant le décodage ordinaire, chaque séquence active apporte une nouvelle position de requête. Un petit lot peut donc fournir trop peu de blocs indépendants pour exploiter efficacement le GPU, même si chaque requête doit lire un long historique.
Flash-Decoding crée des unités de travail supplémentaires en divisant cet historique. Chaque unité calcule une sortie partielle et une valeur de normalisation log-sum-exp. Une réduction les combine pour obtenir la sortie requise par l’attention sur l’historique complet. Voir l’explication de Flash-Decoding par les auteurs de Stanford.
Pour un historique court, le travail supplémentaire lié aux résultats partiels et à la réduction peut dépasser le bénéfice. Un lot plus grand peut déjà fournir assez de travail parallèle. Aucun de ces cas ne garantit un gain en divisant davantage la séquence.
Interpréter le résultat publié
Les auteurs ont rapporté une accélération de bout en bout jusqu’à huit fois pour leur évaluation de CodeLlama-34B avec un lot de taille un sur quatre GPUs A100, pour des longueurs de séquence de 512 à 64K. Cette comparaison utilisait leur référence et leur configuration d’exécution. Elle ne prédit pas une amélioration d’un facteur huit par rapport à un serveur actuel dont le backend de décodage est déjà optimisé.
Lors des tests de votre serveur :
- vérifiez que le backend d’attention sélectionné utilise bien la méthode ;
- comparez le même modèle, la même disposition des GPUs, la même précision du cache et les mêmes longueurs de séquence ;
- testez à la fois un lot de taille un et un niveau réaliste de requêtes simultanées ;
- mesurez le temps du noyau d’attention séparément de celui de l’étape complète de décodage ;
- mesurez la latence des tokens de sortie et la justesse numérique.
Un noyau d’attention plus rapide peut laisser la lecture des poids, le calcul feed-forward ou la communication comme coût principal restant. Privilégiez le résultat de bout en bout pour décider de modifier la configuration de serving.
Guide d’ingénierie : Flash-Decoding relie la division de la séquence à la distinction entre prefill et décodage.