Soyez paresseux pour mieux travailler.
Llama 3.1 vient de sortir, l'avez-vous déjà essayé ? Même si vous possédez un PC haut de gamme récent, vous pouvez toujours rencontrer un décalage important avec la plus petite version 8B. Afin d'améliorer l'efficacité du raisonnement du modèle, les chercheurs ont mis au point diverses méthodes, mais nombre d'entre elles amèneront le modèle à sacrifier une certaine précision.
Récemment, une équipe de recherche d'Apple et Meta AI a proposé une nouvelle méthode qui peut augmenter la vitesse d'inférence de l'étape de pré-remplissage de Llama 2 à plus de 2 fois tout en garantissant que la précision ne diminue pas de manière significative. quelques inspirations pour l'accélération de Llama 3.1. Ils appellent cette approche LazyLLM, ou Lazy Large Language Model.
Titre de l'article : LazyLLM : Dynamic Token Pruning for Efficient Long Context LLM Inference
Adresse de l'article : https://arxiv.org/abs/2407.14057
Alors, comment font-ils pour rendre le LLM paresseux ? Qu'en est-il de? Pour comprendre leur approche, nous devons d’abord savoir à quoi ressemble le processus d’inférence LLM standard basé sur des invites. En bref, le processus est divisé en deux étapes : le pré-remplissage et le décodage, comme le montre la figure 1.
Dans l'étape de pré-remplissage, le modèle calcule et enregistre le cache KV de chaque jeton dans l'invite et prédit le premier jeton. Nous appelons le temps passé dans la phase de pré-remplissage « time to first token (TTFT) ».
L'étape de pré-remplissage est suivie de l'étape de décodage. À ce stade, le modèle utilise à nouveau le KV mis en cache pour décoder de manière itérative le jeton suivant jusqu'à ce que le critère d'arrêt soit satisfait.
Dans la phase de pré-remplissage, toutes les couches Transformer utiliseront tous les jetons dans l'invite. TTFT peut être lent lorsque l'invite est longue, car les LLM actuels basés sur Transformer sont à la fois profonds et larges, et le coût de l'attention informatique augmente quadratiquement avec le nombre de jetons dans l'invite. Par exemple, Llama 2 (version 7B) empile 32 couches de Transformers et a une dimension de modèle de 4 096. Dans ce cas, TTFT nécessite 21 fois la durée de chaque étape de décodage suivante, ce qui représente environ 23 % du temps de génération total sur le benchmark LongBench.
Par conséquent, pour rendre l'inférence LLM efficace, l'optimisation de TTFT est une étape très critique.
Bien que l'optimisation de l'inférence LLM soit un domaine de recherche actif, de nombreuses méthodes se concentrent sur l'amélioration de la vitesse d'inférence de l'étape de décodage. Les chercheurs ont prêté peu d’attention aux améliorations du TTFT. Certains résultats de recherche basés sur la compression peuvent implicitement améliorer le TTFT en réduisant la taille du LLM.
Une autre direction de recherche consiste à améliorer le TTFT sous l'architecture statique du transformateur. Pour cette direction de recherche, une question se pose naturellement : tous les prompt tokens sont-ils essentiels lors de la génération du premier token ?
La figure 2 montre les résultats de l'analyse LLM sur le benchmark LongBench.
On peut voir que pour le premier jeton généré, le score d'attention du jeton d'entrée est très clairsemé, ce qui montre que de nombreux jetons dans l'invite de saisie sont redondants, et même s'ils sont supprimés, ils n'affecteront pas la prédiction du prochain jeton. Cette observation était à la base du LazyLLM proposé par l’équipe.
Les avantages de LazyLLM incluent une large gamme d'applications, pas besoin de formation et de bons résultats. La figure 3 compare le LLM standard avec LazyLLM.
LazyLLM
La figure 4 montre le cadre global de LazyLLM.
À partir du contexte complet, LazyLLM élaguera progressivement les jetons, réduisant ainsi progressivement le nombre de calculs utilisés pour obtenir le modèle final. Notez que LazyLLM permet au modèle de sélectionner différents sous-ensembles de jetons à différentes étapes de génération, même si certains d'entre eux peuvent avoir été élagués lors des étapes précédentes. Par rapport à l'élagage statique (qui élague tous les jetons à la fois), l'élagage dynamique optimise la prédiction du prochain jeton à chaque étape de génération, ce qui contribue à maintenir les performances du modèle.
Élagage progressif des jetons
Certaines études antérieures ont utilisé avec succès l'élagage des jetons pour optimiser l'inférence LLM. Cependant, ces méthodes nécessitent l’accumulation de cartes d’attention complètes prédisant les premiers jetons afin d’analyser l’importance des jetons d’invite avant le début de l’élagage. Par conséquent, ils ne conviennent pas pour réduire le TTFT puisqu’ils doivent toujours calculer tous les caches KV pendant la phase de pré-remplissage.
En comparaison, LazyLLM est "très paresseux" et ne calculera que les jetons importants pour prédire le prochain jeton à partir de la première itération d'inférence (étape de pré-remplissage).
Au premier tour d'itération, un problème clé est de déterminer l'importance de chaque jeton. Inspirée par des recherches antérieures montrant que les états cachés des jetons évoluent à mesure qu'ils traversent les couches du transformateur, la solution de l'équipe consiste à utiliser l'élagage des jetons couche par couche à chaque étape de génération. Plus précisément, ils utilisent la carte d’attention de chaque couche pour déterminer l’importance du jeton d’entrée par rapport au jeton à prédire.
Après avoir calculé le score de confiance du jeton, un autre problème difficile consiste à déterminer le seuil d’élagage du jeton.
Plus précisément, pour différentes couches et différentes tâches, ce seuil peut changer à mesure que le score d'attention change. La solution de l’équipe consiste à utiliser la stratégie de sélection du premier centile. Plus précisément, si le score de confiance d'un jeton est inférieur au kième centile des jetons d'entrée, il est élagué. Une fois qu'un jeton est élagué, il ne participe plus au calcul de toutes les couches suivantes.
En d'autres termes, les jetons utilisés par les couches suivantes sont un sous-ensemble des jetons utilisés par les couches précédentes.
Des expériences ultérieures montrent que lorsque la position de la couche d'élagage et le nombre de jetons élagués sont différents, les performances changeront également. Plus précisément, pour la même couche Transformer, à mesure que de plus en plus de jetons sont supprimés par l'élagage, les performances du modèle diminueront progressivement.
Ils ont également constaté que par rapport à la taille des premières couches, de meilleures performances seront obtenues lors de la taille des couches ultérieures, ce qui montre que les couches ultérieures sont moins sensibles à la taille symbolique. Pour mieux équilibrer vitesse et précision, l'équipe a utilisé un élagage progressif, comme le montre la figure 4, en conservant davantage de jetons dans les premières couches, puis en réduisant progressivement le nombre de jetons au fur et à mesure qu'ils passent aux couches ultérieures.
Aux Cache (cache auxiliaire)
Il n'y a pas de cache KV dans l'étape de pré-remplissage, et chaque jeton est exprimé dans un état caché. Par conséquent, l’élagage progressif des jetons peut être obtenu en supprimant l’état caché des jetons élagués. Cependant, étendre l’élagage progressif des jetons aux étapes de décodage ultérieures n’est pas simple. La raison en est que chaque étape de décodage calcule l'attention en utilisant le cache KV calculé lors de l'étape de pré-remplissage. Étant donné que LazyLLM effectue un élagage progressif des jetons lors de la phase de pré-remplissage, le KV d'un jeton élagué à un certain niveau n'apparaîtra pas dans le cache KV du niveau suivant.
Pour rappel, le framework LazyLLM permet à chaque étape de génération de sélectionner un sous-ensemble différent de jetons dans la séquence complète de jetons d'entrée à chaque étape, qu'ils aient ou non été élagués lors des étapes précédentes. Par exemple, lors de l'étape de décodage suivante, les jetons élagués qui n'existent pas dans le cache KV peuvent être resélectionnés pour le calcul de l'attention. Dans ce cas, le modèle ne peut pas récupérer le cache KV pour ces jetons.
Une solution intuitive à ce problème consiste à faire passer ces jetons via le point de départ du Transformer. Cependant, cela entraîne un double comptage du même jeton et ralentit finalement la vitesse globale de génération.
Pour résoudre ce problème, l'équipe a introduit un autre cache en plus du cache KV d'origine : Aux Cache (cache auxiliaire).
Si les KV des jetons élagués (T4 et T7 dans la figure 4) n'apparaissent pas dans le cache KV des couches suivantes, leurs états cachés seront enregistrés par le cache Aux pour être récupérés dans les itérations suivantes.
Comme le montre la figure 4, à chaque étape de décodage, chaque couche Transformer récupère d'abord le cache KV des jetons passés (s'il existe). Pour les jetons qui ne sont pas dans le cache KV, leur état caché est récupéré directement depuis le cache Aux de la couche précédente sans avoir à repasser par la couche précédente. Aux Cache garantit que chaque jeton est calculé au plus une fois dans chaque couche Transformer, et garantit également que LazyLLM est plus rapide que le LLM standard dans sa forme la plus lente.
Expériences
L'équipe a testé cette nouvelle approche "paresseuse" sur deux grands modèles de langage : Llama 2 7B et XGen 7B. Le LLM standard utilisé à des fins de comparaison est le même modèle de point de contrôle pré-entraîné rendu public sans aucune formation supplémentaire.
Le benchmark expérimental est LongBench, un benchmark multitâche pour la compréhension de contenus longs. Le benchmark LongBench contient 16 ensembles de données couvrant 6 tâches, notamment les questions-réponses sur un seul document, les questions-réponses multi-documents, la synthèse, l'apprentissage en quelques étapes, les tâches de synthèse et la complétion de code.
La métrique d'évaluation est l'efficacité et l'efficience de chaque méthode en termes de compromis entre l'accélération TTFT et la précision.
Résultats
Le Tableau 1 donne les résultats d'accélération et de précision TTFT pour LazyLLM, le LLM standard et d'autres méthodes de base.
Dans ce tableau, la ligne de base fait référence à l'inférence LLM standard. La suppression aléatoire de jetons fait référence à l'exécution d'un élagage aléatoire sur les jetons. L'élagage statique du jeton fait référence à l'exécution d'un élagage unique sur le jeton d'entrée en fonction de la méthode d'attention des couches Transformer précédentes lors de l'étape de pré-remplissage. La compression d'invite est la méthode de compression d'invite, qui utilise LLM pour supprimer la redondance dans le contexte d'entrée.
Comme le montre le tableau 1, LazyLLM est largement supérieur en accélération TTFT, tandis que la diminution de la précision est fondamentalement négligeable. Il convient de noter que l’utilisation de LLM pour compresser les invites nécessite beaucoup de calculs. Par conséquent, même si la compression rapide rend l'inférence plus rapide, son TTFT réel est plus long que le LLM standard.
Impact sur la vitesse globale de génération
Pour évaluer l'impact de la nouvelle méthode sur la vitesse globale de génération, l'équipe a analysé le pourcentage de jetons d'invite utilisés dans le calcul et l'accélération de la génération, voir le tableau 2.
On voit que la proportion de tokens utilisés dans les calculs de LazyLLM est toujours inférieure à 100%, ce qui montre que LazyLLM n'a pas utilisé tous les tokens dans l'invite de fin de génération, mais théoriquement le modèle peut utiliser tous les jetons. Cela peut accélérer davantage le processus de génération global pour différentes tâches.
Taux de rejet des différentes couches
L'équipe a également analysé l'impact de la position de la couche d'élagage et du nombre de jetons élagués. Les résultats sont présentés dans la figure 6.
On peut voir que lorsque l'élagage est effectué sur la même couche de Transformer, moins il reste de jetons, plus les performances du modèle sont mauvaises. Cela est également cohérent avec notre compréhension intuitive. De plus, par rapport à l'élagage dans les couches Transformer précédentes, l'élagage dans les couches ultérieures entraînera de meilleures performances, ce qui montre que les couches ultérieures sont moins sensibles à l'élagage des jetons.
Sur la base de ces observations, on peut dire que l'effet de l'élagage progressif des jetons est prouvé.
Croissance progressive du KV
Enfin, l'équipe a également essayé de comprendre les composants internes du modèle en utilisant la logique d'élagage des jetons. Plus précisément, ils souhaitent connaître la proportion cumulée de jetons d’invite utilisés et la proportion correspondante qui n’est pas utilisée. Cette « utilisation cumulative du jeton » peut être définie de manière équivalente comme la taille du cache KV à chaque étape. La figure 7 donne l'utilisation cumulée des jetons d'invite pour chaque étape de LazyLLM.
Ce résultat conforte l'hypothèse selon laquelle de nombreux jetons ne seront jamais sélectionnés par le modèle (même si théoriquement le modèle peut utiliser tous les jetons dans l'invite.
Considérant que le modèle peut toujours maintenir la précision de l'exécution de la tâche, cela peut Conclusion : le modèle peut efficacement éliminer les jetons sans affecter la qualité de sortie
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!