nouvelles

Apple permet aux grands modèles d'apprendre à être paresseux : il crache le premier jeton plus rapidement et maintient la précision

2024-08-02

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina



Rapport sur le cœur de la machine

Département éditorial de Machine Heart

Être paresseux vous permet de mieux travailler.

Llama 3.1 vient de sortir, l'avez-vous déjà essayé ? Même si votre PC est doté de la dernière spécification la plus récente, vous pouvez toujours rencontrer un décalage important, même 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 jusqu'à plus de 2 fois tout en garantissant que la précision ne diminue pas de manière significative. L'accélération de 3.1 fournit une certaine inspiration. Ils appellent cette approche LazyLLM, qui signifie Lazy Large Language Model.



Titre de l'article : LazyLLM : Élagage dynamique des jetons pour une inférence LLM efficace à contexte long

Adresse papier : https://arxiv.org/abs/2407.14057

Alors, comment font-ils pour que LLM soit paresseux ? Pour comprendre leur méthode, nous devons d’abord savoir quel est le processus d’inférence LLM standard basé sur des invites. En termes simples, le processus est divisé en deux étapes : le pré-remplissage et le décodage, comme le montre la figure 1.



Lors de 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.

Pendant la phase de pré-remplissage, toutes les couches Transformer utilisent tous les jetons de l'invite. TTFT peut être lent lorsque l'invite est longue, car le meilleur LLM actuel basé sur Transformer est à la fois profond et large, 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 la dimension du modèle est 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 accordé peu d’attention à l’amélioration 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 Transformer. 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é, les scores d'attention des jetons d'entrée sont très rares, ce qui montre que de nombreux jetons dans l'invite de saisie sont redondants et que même s'ils sont supprimés, ils n'affecteront pas la prédiction du prochain. jeton. Cette observation est à la base du LazyLLM proposé par l’équipe.

Les avantages de LazyLLM incluent une large gamme d’applications, aucune formation nécessaire et de bons résultats. La figure 3 compare le LLM standard et le LazyLLM.



LazyLLM

La figure 4 montre le cadre global de LazyLLM.



En partant du contexte complet, LazyLLM élaguera progressivement les tokens, 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 (tous les jetons sont élagués en même temps), 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 doivent accumuler des cartes d’attention complètes des premiers jetons prédits 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 car 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).

Lors de la première itération, un défi majeur consistait à 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 du jeton d'entrée, il est élagué. Une fois qu'un jeton est élagué, il ne participe plus au calcul de toutes les couches suivantes.

Autrement dit, 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 changent é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 à l’élagage des premières couches, de meilleures performances étaient obtenues lorsque l’élagage était effectué dans les couches ultérieures, ce qui indique que les couches ultérieures sont moins sensibles à l’élagage 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 lors de l'étape de pré-remplissage et chaque jeton est représenté 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 utilise le tampon KV calculé lors de l'étape de pré-remplissage pour calculer l'attention. Étant donné que LazyLLM effectue un élagage progressif des jetons lors de la phase de pré-remplissage, le KV d'un jeton élagué à une certaine couche n'apparaîtra pas dans le cache KV de la couche suivante.

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 à transmettre les jetons via l’origine du transformateur. 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 qui ont été élagués (tels que 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, leurs états cachés sont récupérés 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érience

L'équipe a testé cette nouvelle approche « paresseuse » sur deux grands modèles de langage : Llama 2 7B et XGen 7B. Le LLM standard à 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 et implique 6 tâches, notamment des questions-réponses sur un seul document, des questions-réponses sur plusieurs documents, un résumé, un apprentissage en quelques étapes, des 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ésultat

Le tableau 1 donne les résultats d'accélération et de précision du TTFT pour LazyLLM, le LLM standard et d'autres méthodes de base.



Dans ce tableau, la référence 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 pendant la phase 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 souligner que l'utilisation de LLM pour compresser les invites nécessite de nombreux 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 construction

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 les calculs et l'accélération de la génération, voir le tableau 2.



On peut voir que la proportion de jetons utilisés dans les calculs de LazyLLM est toujours inférieure à 100 %, ce qui montre que LazyLLM n'a pas utilisé tous les jetons 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 chute à différentes couches

L’équipe a également analysé l’impact de l’emplacement 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 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 la couche Transformer précédente, 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’efficacité de l’élagage progressif des jetons est prouvée.

Croissance progressive du KV

Enfin, l’équipe a également essayé de comprendre les composants internes du modèle à l’aide d’une logique d’élagage des jetons. Plus précisément, ils souhaitent connaître la proportion d’utilisation cumulée des jetons d’invite et la proportion inutilisée correspondante. Cette « utilisation cumulative du jeton » peut être définie de manière équivalente comme la taille du cache KV à chaque étape. La figure 7 montre l'utilisation cumulative de ces jetons d'invite à 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 le modèle pourrait théoriquement utiliser tous les jetons dans l'invite).

Considérant que le modèle peut toujours maintenir la précision de l'exécution des tâches, on peut conclure qu'il peut effectivement éliminer les jetons qui n'affectent pas la qualité du résultat.