Modèles et plateformes d’IA

UltraFastBERT : Une Introduction aux Modèles de Langage Exponentiellement Plus Rapides

mm
Ajouter Unite.AI à vos sources préférées sur Google

Les modèles de langage et l’intelligence artificielle générative, réputés pour leurs capacités, sont un sujet brûlant dans l’industrie de l’IA. Les chercheurs du monde entier améliorent leur efficacité et leurs capacités. Ces systèmes, généralement des modèles d’apprentissage automatique, sont pré-entraînés sur des données étiquetées étendues, intégrant des réseaux de neurones pour l’auto-attention. Ils utilisent diverses couches – feedforward, récurrentes, intégrées et d’attention – pour traiter le texte d’entrée et produire des sorties pertinentes.

La plupart des modèles de langage de grande taille ont des couches feedforward qui contiennent la majorité des paramètres. Les études montrent que ces modèles n’utilisent qu’une fraction des neurones disponibles pour le calcul de sortie pendant l’inférence.

Cet article présente UltraFastBERT, un cadre basé sur BERT qui correspond à l’efficacité des modèles BERT de pointe, mais utilise seulement 0,3 % des neurones pendant l’inférence, spécifiquement 12 neurones sur 4095 dans chaque couche. Nous allons explorer l’architecture, le fonctionnement et les résultats d’UltraFastBERT. Commençons.

UltraFastBERT : Une Introduction aux Modèles de Langage Exponentiellement Plus Rapides

Traditionnellement, un modèle de langage utilise différents composants pour se doter de capacités de génération de contenu, notamment des couches feedforward, récurrentes, intégrées et d’attention. Ces composants sont responsables de l’apprentissage de la reconnaissance de modèles pendant l’entraînement et, finalement, génèrent une sortie précise sur la base des textes d’entrée. Chacun de ces composants a des paramètres, et dans les modèles de langage, la majorité de ces paramètres est détenue par les couches feedforward. Cependant, ces couches feedforward ne utilisent pas 100 % des neurones disponibles pour générer la sortie pour chaque entrée au moment de l’inférence, ce qui entraîne une perte de ressources qui augmente la complexité, le temps de calcul et les coûts de calcul.

Au cœur du cadre UltraFastBERT, il s’agit d’une variante du cadre BERT, qui repose sur ce concept et remplace les couches feedforward par des réseaux feedforward plus rapides dans son architecture, ce qui aboutit finalement au cadre UltraFastBERT qui utilise seulement 0,3 % des neurones disponibles tout en fournissant des résultats comparables aux modèles BERT de même taille et processus d’entraînement, en particulier sur les tâches en aval. En raison de ses mises en œuvre de conception, les couches intermédiaires du cadre UltraFastBERT sont exponentiellement plus rapides.

Étant donné un réseau feedforward rapide (FFF) et un réseau feedforward (FF), chacun avec n neurones, la complexité temporelle d’un passage avant dans un réseau feedforward est O(n), tandis que la complexité temporelle est O(log2n) pour un réseau feedforward rapide, et la différence de complexité temporelle est principalement due au fait qu’un réseau feedforward rapide organise les neurones en un arbre binaire équilibré, et lorsque l’entrée est fournie, le réseau exécute uniquement une branche de l’arbre de manière conditionnelle. De plus, la réalisation d’une inférence sur un réseau feedforward rapide aboutit à une multiplication matricielle conditionnelle (CMM), dans laquelle les lignes d’entrée font le produit scalaire avec les colonnes de poids naturelles individuellement, et la sortie de l’opération de produit scalaire précédente détermine le poids des colonnes à poursuivre. Par conséquent, le réseau utilise tous les neurones uniquement pour quelques entrées, et aucune entrée n’a besoin de plus de quelques neurones pour être traitée par le réseau. Le produit scalaire CMM contraste avec la multiplication matricielle dense (DMM) qui calcule le produit scalaire de toutes les entrées avec toutes les colonnes de poids.

Pour résumer, UltraFastBERT est un cadre basé sur BERT qui fournit des résultats comparables aux modèles de langage BERT de pointe qui

  1. Utilise seulement 0,3 % des neurones disponibles pendant la phase d’inférence, et n’engage que 12 neurones sur un total de 4095 neurones pour chaque couche d’inférence.
  2. Fournit une performance solide comparable aux modèles BERT de pointe en mettant en œuvre des stratégies de fine-tuning sur les tâches en aval.
  3. Fournit une mise en œuvre native de la multiplication matricielle conditionnelle (CMM) qui constitue la base du réseau feedforward rapide, et aboutit finalement à une accélération de 78 fois de la performance par rapport à la multiplication matricielle dense (DMM) optimisée.

Réseaux de Neurones Feedforward

Un réseau de neurones feedforward est l’un des réseaux de neurones artificiels les plus simples qui déplace les informations uniquement dans le sens avant, des nœuds d’entrée aux nœuds de sortie via des nœuds cachés. L’un des principaux points forts d’un réseau de neurones feedforward rapide est qu’il n’y a pas de boucles ou de cycles dans de tels réseaux, et ils sont plus simples à construire par rapport aux RNN (Réseaux de Neurones Récurrents) et aux CNN (Réseaux de Neurones Convolutionnels). L’architecture d’un réseau de neurones feedforward rapide se compose de trois composants, à savoir les couches d’entrée, les couches cachées et les couches de sortie, et chaque couche se compose d’unités appelées neurones, et chaque couche est interconnectée à l’autre avec l’aide de poids.

Les neurones présents dans les couches d’entrée reçoivent les entrées et les transmettent à la couche suivante. Le nombre de neurones dans chaque couche d’entrée est déterminé par la dimension des données d’entrée. Ensuite, nous avons les couches cachées qui ne sont exposées ni à l’entrée ni à la sortie, et elles sont responsables des calculs nécessaires. Les neurones de chaque couche cachée prennent la somme pondérée des sorties données par la couche précédente, appliquent une fonction d’activation et transmettent le résultat à la couche suivante, et le processus se répète à nouveau. Enfin, nous avons la couche de sortie qui produit la sortie pour les entrées données. Chaque neurone de chaque couche d’un réseau feedforward rapide est interconnecté avec chaque neurone de la couche suivante, ce qui rend les réseaux de neurones FFF des réseaux entièrement connectés. Les poids sont utilisés pour représenter la force de la connexion entre les neurones, et le réseau met à jour ces poids pour apprendre les modèles en mettant à jour les poids en fonction de l’erreur qui se produit dans la sortie.

Ensuite, il y a deux phases clés dans le fonctionnement d’un réseau de neurones feedforward rapide : la phase feedforward et la phase de rétropropagation.

Phase Feedforward

Dans la phase feedforward, l’entrée est fournie au réseau, et elle se propage ensuite vers l’avant. Les couches cachées calculent la somme pondérée des entrées, et introduisent une non-linéarité dans le modèle en passant la somme des entrées à travers une fonction d’activation comme ReLu, Sigmoid et TanH. Le processus se répète à nouveau jusqu’à ce que les poids atteignent la couche de sortie, et le modèle fait une prédiction.

Phase de Rétropropagation

Une fois que le modèle fait une prédiction, il calcule l’erreur entre la sortie générée et la sortie attendue. L’erreur est ensuite rétropropagée à travers le réseau, et le réseau utilise un algorithme d’optimisation de descente de gradient pour ajuster les poids dans une tentative de minimiser l’erreur.

UltraFastBERT : Architecture et Fonctionnement du Modèle

Le cadre UltraFastBERT est construit sur l’architecture crammedBERT, et le cadre UltraFastBERT utilise tous les composants de l’architecture crammedBERT, à l’exception de la nature des couches intermédiaires. Au lieu de cela, le cadre UltraFastBERT remplace le codage de transformateur dans les réseaux feedforward contenus dans les couches intermédiaires de l’architecture crammedBERT par des réseaux feedforward rapides. Le cadre UltraFastBERT apporte les modifications suivantes aux réseaux feedforward d’origine.

  1. Le cadre élimine la différence entre les nœuds feuilles et les nœuds non-feuilles en utilisant la fonction d’activation GeLu sur les nœuds, et en équipant ces nœuds de poids de sortie, et en supprimant les biais de sortie dans leur ensemble. Après cela, le cadre fixe la taille des feuilles à 1.
  2. Enfin, le cadre permet plusieurs arbres de réseaux feedforward rapides en parallèle en calculant conjointement les couches de sortie intermédiaires. Le cadre parvient à effectuer ce calcul en prenant la somme des arbres individuels, et en présentant ensuite la somme comme la couche de sortie intermédiaire.

Ensuite, pendant l’entraînement, le cadre UltraFastBERT suit la procédure d’entraînement utilisée par le cadre crammedBERT, qui comprend la désactivation de la dropout pendant l’entraînement préalable, et l’utilisation de l’horaire d’apprentissage triangulaire à 1 cycle. Le modèle est ensuite affiné pour maximiser sa performance sur une large gamme de tâches, principalement du benchmark GLUE, pendant un total de 5 époques.

Interférence

L’interférence est une partie importante pour un réseau feedforward rapide, et ces réseaux feedforward rapides en eux-mêmes forment une grande partie des grands modèles de langage, et ils sont connus pour leur potentiel d’accélération exceptionnel. Pour comprendre ce potentiel d’accélération, prenons l’exemple de l’un des modèles de langage les plus avancés, le GPT-3, dans lequel les réseaux feedforward de chaque couche de transformateur sont composés de plus de 49 100 neurones. Si ils sont entraînables, un réseau feedforward rapide (profondeur maximale de 15) pourrait remplacer le réseau feedforward d’origine. Le réseau feedforward rapide introduit aurait plus de 65 000 neurones, mais il n’utiliserait que 16 de ces neurones pour l’interférence, ce qui équivaut à environ 0,03 % des neurones disponibles pour le GPT-3.

Algorithme et Compatibilité

Le cadre UltraFastBERT utilise un algorithme de pseudocode récursif pour l’interférence feedforward rapide, et l’algorithme est représenté dans l’image ci-dessous.

Ici, B représente la taille du lot, H représente la largeur des couches d’entrée, et M représente les colonnes. Une autre cause majeure de préoccupation avec l’utilisation d’une approche de multiplication matricielle computationnelle est de savoir si elle rend les réseaux feedforward rapides incompatibles avec le processus déjà en cours pour la multiplication matricielle dense et les cadres d’apprentissage automatique existants. Heureusement, l’utilisation de la CMM n’affecte pas les performances ou n’introduit pas d’incompatibilité, bien qu’elle augmente la complexité de mise en cache.

Il est essentiel de noter qu’en tant que partie d’un réseau feedforward rapide, la multiplication matricielle dense monofilée repose sur l’exécution des instructions de multiplication et d’accumulation (MAC), et en conséquence, le remplacement de la DMM par l’approche CMM bénéficiera aux processeurs, car moins d’instructions MAC sont nécessaires pour calculer la sortie de la couche par élément. Par conséquent, malgré l’emploi d’une conditionnalité généralement associée au branchement, le « branchement neuronal » agit comme une addition à l’offset de mémoire des pointeurs pertinents dans le cadre. Par conséquent, dans le cadre UltraFastBERT, la prédiction d’instruction de branchement n’est jamais pleinement engagée pour faciliter la conditionnalité de la CMM, et ne charge que les colonnes pertinentes de la matrice de poids individuellement. De plus, dans la mesure où le cadre effectue des produits scalaires ligne-colonne, le traitement parallèle de données vectorielles (SIMD) est toujours une bonne option pour accélérer les mises en œuvre d’interférence pour des appareils spécifiques.

UltraFastBERT : Performance et Résultats

Nous allons discuter de la performance du cadre UltraFastBERT pour l’affinage ainsi que pour les tâches d’interférence pour analyser comment le cadre se comporte par rapport aux modèles de langage de pointe.

Résultats d’Affinage

La figure suivante montre les performances de différents modèles sur les ensembles de données de test GLUE-dev. Ici, N représente le nombre de neurones disponibles pour les cadres pour l’entraînement, « Avg » représente le score moyen de toutes les tâches.

Comme on peut le voir clairement, le cadre UltraFastBERT, qui a été entraîné sur l’A6000 GPU pendant plus de 24 heures, parvient à conserver environ 96 % de la performance prédictive sur les tâches en aval de GLUE par rapport au cadre BERT d’origine. De plus, on peut voir que l’augmentation de la profondeur des réseaux feedforward rapides entraîne une baisse des performances des cadres, bien que la majorité de la dégradation des performances se produise uniquement pour la tâche CoLa. Si la tâche CoLa est mise de côté pour un moment, le cadre UltraFastBERT retourne un score de performance prédictive d’environ 98,6 %.

Résultats d’Interférence

Dans cette section, nous allons comparer les performances de plusieurs réseaux feedforward ou réseaux feedforward rapides sur les mises en œuvre d’interférence, et ces mises en œuvre sont réparties sur trois niveaux.

  1. Dans la mise en œuvre de niveau 1, la mise en œuvre est construite à l’aide de routines de niveau 1 BLAS, à savoir le produit scalaire vecteur et les produits scalaires vecteur-vecteur.
  2. Au niveau 2, les mises en œuvre utilisent des routines de niveau 2 BLAS, à savoir les produits scalaires vecteur-vecteur et les produits matrice-vecteur batchés.
  3. Au niveau 3, les mises en œuvre emploient l’approche de multiplication matrice-matrice non batchée de niveau 3 BLAS, et bien qu’il s’agisse de la mise en œuvre la plus rapide disponible pour les réseaux feedforward, de telles mises en œuvre ne sont pas disponibles pour les réseaux feedforward rapides, car la bibliothèque ne prend pas en charge la parcimonie vectorielle de la multiplication matricielle computationnelle.

En outre, le cadre UltraFastBERT déploie des mises en œuvre GPU en utilisant soit des noyaux CUDA personnalisés, soit des noyaux PyTorch.

Le tableau ci-dessus compare les performances du cadre UltraFastBERT avec ses prédécesseurs, les cadres basés sur BERT, en termes de couches feedforward et de couches feedforward rapides, où chaque colonne contient les accélérations relatives d’interférence feedforward rapide sur feedforward lorsqu’ils utilisent les mêmes primitives d’opérations linéaires algébriques.

Cependant, il est important de noter que les accélérations signalées dans le tableau ci-dessus sont destinées à des « comparaisons équitables », c’est-à-dire que les mises en œuvre feedforward rapides et feedforward utilisent les mêmes primitives d’opérations linéaires algébriques. De plus, aux niveaux 1 et 2, les mises en œuvre des réseaux feedforward rapides sont capables de réaliser l’interférence 48 fois et 78 fois plus rapidement que la mise en œuvre feedforward la plus rapide, respectivement.

Pensées Finales

Dans cet article, nous avons discuté d’UltraFastBERT, une variante du cadre BERT, qui repose sur le concept que les couches feedforward ne utilisent pas 100 % des neurones disponibles pour générer la sortie pour chaque entrée au moment de l’inférence, ce qui entraîne une perte de ressources qui augmente la complexité, le temps de calcul et les coûts de calcul, et remplace les couches feedforward par des réseaux feedforward plus rapides dans son architecture, ce qui aboutit finalement au cadre UltraFastBERT qui utilise seulement 0,3 % des neurones disponibles tout en fournissant des résultats comparables aux modèles BERT de même taille et processus d’entraînement, en particulier sur les tâches en aval.

En raison de ses mises en œuvre de conception, les couches intermédiaires du cadre UltraFastBERT sont exponentiellement plus rapides. De plus, la performance solide fournie par le cadre UltraFastBERT est une preuve que les modèles de langage (LLM) peuvent fournir une performance solide en engageant seulement une fraction de leurs paramètres pour les interférences individuelles, car le cadre UltraFastBERT utilise seulement 0,3 % des neurones disponibles pendant l’interférence, et parvient néanmoins à atteindre une accélération de 78 fois sur les temps d’interférence.

Kunal Kejriwal est ingénieur backend spécialisé en Python, PostgreSQL, Redis et en infrastructure cloud sur GCP et AWS. Fort de trois ans d'expérience dans la construction et la mise à l'échelle de systèmes de production, il écrit sur l'infrastructure IA, les systèmes distribués et l'architecture du déploiement des charges de travail d'apprentissage automatique.