La popularité de ChatGPT continue à ce jour, et les dernières nouvelles et interprétations techniques qui l'entourent continuent d'émerger. Concernant son nombre de paramètres, il existe une hypothèse courante selon laquelle ChatGPT a le même nombre de paramètres que le modèle de 175 milliards de paramètres introduit dans l'article GPT-3. Cependant, les personnes qui travaillent en profondeur dans le domaine des grands modèles de langage savent que ce n’est pas vrai. En analysant la bande passante mémoire du GPU A100, nous constatons que la vitesse d'inférence réelle de l'API ChatGPT est beaucoup plus rapide que la vitesse d'inférence théorique maximale du modèle équivalent 175 milliards de Dense.
Cet article utilisera la preuve par contradiction pour prouver et étayer l'argument ci-dessus, en utilisant uniquement certaines connaissances théoriques apprises à l'université. Notez également qu'il existe également le problème inverse, à savoir que certaines personnes prétendent que ChatGPT n'a que X milliards de paramètres (X est bien inférieur à 1750). Cependant, ces affirmations ne peuvent pas être vérifiées car leurs auteurs parlent généralement de ouï-dire.
La prochaine étape est le processus d'argumentation détaillé.
Supposons d'abord que le modèle ChatGPT comporte 175 milliards de paramètres. Le format INT8 est généralement utilisé pour stocker les poids LLM pour une inférence de latence plus faible, un débit plus élevé et des besoins en mémoire inférieurs (que l'utilisation du format float16 prend deux fois plus de mémoire). à stocker). Chaque paramètre INT8 nécessite 1 octet pour le stockage. Un simple calcul montre que le modèle nécessite 175 Go d'espace de stockage.
Image tirée du papier INT8 SmoothQuant, adresse : https://arxiv.org/abs/2211.10438
En termes d'inférence, le modèle de langage de style GPT effectue une passe avant dans chaque avant pass Il est toujours "autorégressif" et il prédit le prochain jeton le plus probable (pour un modèle RLHF comme ChatGPT, il prédit le prochain jeton préféré par ses annotateurs humains). Cela signifie que 200 jetons sont générés, donc 200 passes avant doivent être effectuées. Pour chaque passage direct, nous devons charger tous les poids du modèle depuis la mémoire à large bande passante (HBM) dans l'unité de calcul matriciel (le cœur de calcul tensoriel du GPU), ce qui signifie que nous devons charger 175 Go de poids pour chaque passe avant.
Sur la plateforme Microsoft Azure, le nombre maximum d'A100 pouvant être alloués sur un nœud est de 8. Cela signifie que le parallélisme tensoriel maximum par instance de modèle est de 8. Ainsi, au lieu de charger 175 Go de pondérations par passe directe, vous n'avez besoin de charger que 21,87 Go par GPU par passe directe, car le parallélisme tensoriel peut paralléliser les pondérations et les calculs sur tous les GPU.
Photo tirée du papier Megatron-LM, adresse : https://arxiv.org/abs/1909.08053
Sur la version A100 80 Go SXM, la bande passante mémoire maximale est de 2 To/s. . Cela signifie qu'avec batchsize=1 (limité par la bande passante mémoire), la vitesse de transmission théorique maximale sera de 91 fois/seconde. De plus, la plupart du temps est consacré au chargement des poids plutôt qu’au calcul des multiplications matricielles.
Remarque : Pour fp16/bfloat16, lorsqu'elle est limitée par la bande passante mémoire, la vitesse de passage théorique maximale atteint 45,5 fois/seconde.
Quelle est la latence réelle de ChatGPT ?
Exécutez un script écrit en Python la nuit (l'exécution nocturne est moins coûteuse) pour tester la latence d'utilisation de ChatGPT via l'API OpenAI. La vitesse empirique maximale atteinte avec la passe avant est de 101 fois/seconde. Cet article utilise le maximum de résultats empiriques des expériences en raison de la nécessité d'obtenir la surcharge la plus faible du backend et du système de traitement par lots dynamique d'OpenAI.
Conclusion
Sur la base des hypothèses et arguments précédents, nous pouvons constater qu'il existe des contradictions, car les résultats empiriques sont beaucoup plus rapides que les résultats théoriques maximaux basés sur la bande passante mémoire de la plateforme A100. On peut donc conclure que le modèle ChatGPT utilisé par OpenAI pour l’inférence n’est définitivement pas équivalent à un modèle dense de 175 milliards de paramètres.
1. Pourquoi prédire le nombre de paramètres du modèle d'inférence ChatGPT au lieu du nombre de paramètres du modèle de formation ?
Utilisez la méthode de la bande passante mémoire pour estimer le nombre de paramètres du modèle, qui n'est disponible que pour les modèles d'inférence. Nous ne savons pas avec certitude si OpenAI applique des techniques telles que la distillation pour rendre son modèle d'inférence plus petit que son modèle de formation.
De nombreux insectes ont une forme larvaire optimisée pour extraire l'énergie et les nutriments de l'environnement, et une forme adulte complètement différente, optimisée pour des besoins de voyage et de reproduction très différents. ——De Geoffrey Hinton, Oriol Vinyals, Jeff Dean, 2015.
2. Y a-t-il d'autres hypothèses ?
La preuve comprend en fait 3 hypothèses :
3. Que signifie Équivalent Dense ?
Au cours des dernières années, les chercheurs ont mené des recherches sur des LLM experts en mixage clairsemé tels que Switch Transformer. L'équivalent dense indique le nombre de paramètres utilisés dans chaque passe avant. En utilisant les méthodes décrites dans cet article, il n'existe aucun moyen de prouver que ChatGPT n'est pas un modèle MoE clairsemé de 175 milliards de paramètres.
4. Avez-vous envisagé l'optimisation de l'inférence du transformateur de cache KV ?
Même avec l'optimisation du cache KV, chaque passe avant doit toujours charger l'intégralité du modèle, le cache KV n'économise que sur les FLOP, mais ne réduit pas la consommation de bande passante mémoire (en fait, elle augmentera, car chaque passe avant est requise à la fois passe charger le cache KV).
5. Avez-vous pensé au Flash Attention ?
Bien que Flash Attention soit plus performant en termes d'efficacité de la bande passante mémoire et de vitesse en temps réel, chaque passe avant nécessite toujours le chargement de l'intégralité du modèle, donc l'argument précédent est toujours valable.
6. Avez-vous envisagé le parallélisme des pipelines/des stratégies parallèles plus fines ?
L'utilisation du parallélisme des pipelines entraîne le même nombre maximum de passes avant. Cependant, en utilisant des micro-lots et des lots de plus grande taille, le débit (total de jetons/seconde) peut être augmenté.
7. Avez-vous envisagé d'augmenter le parallélisme tenseur au-delà de 8 ?
La plateforme A100 prend en charge 16 A100 par nœud, mais Azure ne prend pas en charge cette fonctionnalité. Seul Google Cloud prend en charge cette fonctionnalité, mais presque personne ne l'utilise. Il est peu probable qu'Azure crée sur mesure un nœud avec 16 A100 pour OpenAI et ne le publie pas en version publique GA pour amortir le coût de conception ou de maintenance de nouveaux nœuds. Concernant le parallélisme tensoriel entre les nœuds, ce n'est qu'une possibilité, mais c'est un moyen moins rentable de faire de l'inférence sur l'A100. Même NVIDIA ne recommande pas le traitement parallèle des tenseurs entre les nœuds.
8. Avez-vous envisagé d'utiliser INT4 pour stocker des poids ?
Bien que l'utilisation d'INT4 se soit avérée efficace, le compilateur de noyau GPU d'OpenAI ne prend pas en charge les charges, les magasins ou les multiplications matricielles INT4, et il n'est pas prévu d'ajouter INT à leur feuille de route technologique. Puisqu'il n'y a pas de support pour les charges ou les magasins INT4, vous ne pouvez même pas stocker les poids au format INT4, puis les quantifier dans un format de haute précision (comme INT8, bfloat16, etc.).
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!