Ce dépôt contient la reproduction à partir de zéro de nanoGPT. Les commits git ont été spécifiquement conservés étape par étape et propres afin que l'on puisse facilement parcourir l'historique des commits git pour le voir construit lentement. De plus, il y a une conférence vidéo d'accompagnement sur YouTube où vous pouvez me voir présenter chaque engagement et expliquer les éléments en cours de route.
Nous partons essentiellement d'un fichier vide et progressons vers une reproduction du modèle GPT-2 (124M). Si vous avez plus de patience ou d'argent, le code peut également reproduire les modèles GPT-3. Alors que le modèle GPT-2 (124M) s'est probablement entraîné il y a un certain temps (2019, il y a environ 5 ans), aujourd'hui, le reproduire est une question d'environ 1 heure et d'environ 10 $. Vous aurez besoin d'un boîtier GPU cloud si vous n'en avez pas assez, pour cela je recommande Lambda.
Notez que GPT-2 et GPT-3 et les deux modèles de langage simples, formés sur des documents Internet, et tout ce qu'ils font, c'est « rêver » des documents Internet. Donc, ce dépôt/vidéo ne couvre pas le réglage fin du chat, et vous ne pouvez pas lui parler comme vous pouvez parler à ChatGPT. Le processus de réglage fin (bien qu'assez simple sur le plan conceptuel - SFT consiste simplement à échanger l'ensemble de données et à poursuivre la formation) vient après cette partie et sera abordé ultérieurement. Pour l'instant, c'est le genre de choses que dit le modèle 124M si vous lui demandez « Bonjour, je suis un modèle de langage » après 10 milliards de jetons de formation :
Hello, I'm a language model, and my goal is to make English as easy and fun as possible for everyone, and to find out the different grammar rules
Hello, I'm a language model, so the next time I go, I'll just say, I like this stuff.
Hello, I'm a language model, and the question is, what should I do if I want to be a teacher?
Hello, I'm a language model, and I'm an English person. In languages, "speak" is really speaking. Because for most people, there's
Et après 40 milliards de jetons de formation :
Hello, I'm a language model, a model of computer science, and it's a way (in mathematics) to program computer programs to do things like write
Hello, I'm a language model, not a human. This means that I believe in my language model, as I have no experience with it yet.
Hello, I'm a language model, but I'm talking about data. You've got to create an array of data: you've got to create that.
Hello, I'm a language model, and all of this is about modeling and learning Python. I'm very good in syntax, however I struggle with Python due
Mdr. Quoi qu'il en soit, une fois la vidéo sortie, ce sera également un endroit pour la FAQ, et un endroit pour les correctifs et les errata, dont je suis sûr qu'il y en aura un certain nombre :)
Pour les discussions et les questions, veuillez utiliser l'onglet Discussions, et pour une communication plus rapide, jetez un œil à mon Discord Zero To Hero, chaîne #nanoGPT :
Reproduisons la conférence YouTube GPT-2 (124 M)
Nettoyage mineur, nous avons oublié de supprimer register_buffer
du biais une fois que nous sommes passés à l'attention flash, corrigé avec un PR récent.
Les versions antérieures de PyTorch peuvent avoir des difficultés à passer de uint16 à long. À l'intérieur load_tokens
, nous avons ajouté npt = npt.astype(np.int32)
pour utiliser numpy pour convertir uint16 en int32 avant de le convertir en tenseur de torche, puis de le convertir en long.
La fonction torch.autocast
prend un arg device_type
, auquel j'ai essayé obstinément de transmettre device
en espérant que cela fonctionne correctement, mais PyTorch veut en fait juste le type et crée des erreurs dans certaines versions de PyTorch. Nous voulons donc, par exemple, que le périphérique cuda:3
soit supprimé en cuda
. Actuellement, le périphérique mps
(Apple Silicon) deviendrait un processeur device_type
, je ne suis pas sûr à 100% que ce soit la méthode prévue par PyTorch.
De manière déroutante, model.require_backward_grad_sync
est en fait utilisé à la fois par les passes avant et arrière. Déplacé vers le haut de la ligne afin qu'il soit également appliqué à la passe avant.
Pour davantage d’exécutions de qualité production très similaires à nanoGPT, je vous recommande de consulter les dépôts suivants :
MIT