Au cours des dernières années, la mise à l'échelle de modèles de langage dense a été à l'origine de la plupart des progrès dans les LLM. Depuis les premiers modèles comme l'ULMFiT d'origine (~ 30 millions de paramètres) ou le GPT-2 (1,5 milliard de paramètres, qui à l'époque était considéré comme "trop dangereux à publier" 🧌), jusqu'aux systèmes actuels à cent milliards de paramètres, la recette était simple :
Plus de données + plus de paramètres donnent de meilleures performances.
Les lois de mise à l’échelle ont renforcé cette tendance, mais la mise à l’échelle dense présente des limites pratiques :
C’est là que le mélange d’experts (MoE) entre en scène.
Si vous êtes déjà familier avec les MoE et que vous souhaitez vous lancer directement dans le travail d'ingénierie effectué sur les transformateurs, vous pouvez vous diriger directement vers Transformateurs et MoE.
Un modèle de mélange d'experts conserve la structure principale du Transformer, mais remplace certaines couches denses de rétroaction par un ensemble d'experts. Un « expert » n'est pas un module spécialisé dans un sujet (par exemple, « expert en mathématiques », « expert en code »). C'est simplement un sous-réseau apprenable. Pour chaque jeton, un routeur sélectionne un petit sous-ensemble d'experts pour le traiter.
| Figure 1 : L'expert 1 parmi 4 experts est activé (Source : Maarten Grootendorst) |
Différents jetons activent différents experts, en fonction de leurs représentations cachées.
La capacité du modèle dépend des paramètres totaux, mais la vitesse d'inférence dépend des paramètres actifs.
C'est l'idée clé.
Par exemple, prenonsgpt-oss-20b. Il possède 21 milliards de paramètres au total, mais utilise 4 experts actifs par jeton, sur un total de 32 experts. Compte tenu des composants partagés et des experts actifs, ce modèle utilise environ 3,6 milliards de paramètres actifs par jeton. En exécutant ce modèle sur un Mac M3 Ultra, doté d'une bande passante mémoire d'environ 800 Go, nous pourrions estimer la vitesse de génération à ~800 / (3,6 * 2)dansbfloat16, où chaque paramètre prend 2 octets. Cela donne environ 111 jetons par seconde. Le chiffre de performance réel que nous obtenons est d’environ 115 tok/s, ce qui est très proche du calcul au dos de l’enveloppe.
Cette vitesse ultra rapide confirme que le modèle fonctionne approximativement comme un modèle à paramètre 3,6B, mais il a la même capacité (ou qualité) qu'un modèle à paramètre 21B.
(Remarque : la vitesse serait encore plus rapide si nous utilisions des noy...
[Courte citation de 8% de l'article original]