Dieses Repo enthält die vollständige Reproduktion von nanoGPT. Die Git-Commits wurden speziell Schritt für Schritt und sauber gehalten, sodass man leicht durch den Git-Commit-Verlauf gehen kann, um zu sehen, wie er langsam erstellt wird. Darüber hinaus gibt es einen begleitenden Videovortrag auf YouTube, in dem Sie sehen können, wie ich jeden Commit vorstelle und die einzelnen Teile erkläre.
Wir beginnen grundsätzlich mit einer leeren Datei und arbeiten uns bis zu einer Reproduktion des GPT-2 (124M)-Modells vor. Wenn Sie mehr Geduld oder Geld haben, kann der Code auch die GPT-3-Modelle nachbilden. Während das Modell GPT-2 (124M) wahrscheinlich früher (2019, vor ca. 5 Jahren) eine ganze Weile trainiert wurde, ist die Reproduktion heute eine Angelegenheit von ca. 1 Stunde und ca. 10 US-Dollar. Wenn Sie nicht genug haben, benötigen Sie eine Cloud-GPU-Box. Dafür empfehle ich Lambda.
Beachten Sie, dass GPT-2 und GPT-3 sowie beide einfachen Sprachmodelle auf Internetdokumente trainiert sind und nur Internetdokumente „träumen“. In diesem Repo/Video geht es also nicht um die Feinabstimmung des Chats, und Sie können nicht mit ihm sprechen, wie Sie mit ChatGPT sprechen können. Der Feinabstimmungsprozess (obwohl konzeptionell recht einfach – bei SFT geht es nur darum, den Datensatz auszutauschen und das Training fortzusetzen) folgt auf diesen Teil und wird zu einem späteren Zeitpunkt behandelt. Im Moment ist das die Art von Zeug, die das 124M-Modell sagt, wenn Sie es nach 10 Milliarden Trainingstokens mit „Hallo, ich bin ein Sprachmodell“ auffordern:
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
Und nach 40 Milliarden Trainingsmarken:
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
Lol. Wie auch immer, sobald das Video herauskommt, wird dies auch ein Ort für FAQ sein und ein Ort für Korrekturen und Errata, von denen es sicher eine Menge geben wird :)
Für Diskussionen und Fragen verwenden Sie bitte die Registerkarte „Diskussionen“. Für eine schnellere Kommunikation werfen Sie einen Blick auf meinen Zero To Hero Discord, Kanal #nanoGPT :
Lassen Sie uns den YouTube-Vortrag zu GPT-2 (124M) reproduzieren
Kleinere Bereinigung, wir haben vergessen, register_buffer
der Voreingenommenheit zu löschen, als wir auf Flash-Aufmerksamkeit umgestiegen sind, was durch eine aktuelle PR behoben wurde.
Frühere Versionen von PyTorch haben möglicherweise Schwierigkeiten bei der Konvertierung von uint16 in long. Innerhalb von load_tokens
haben wir npt = npt.astype(np.int32)
hinzugefügt, um mit numpy uint16 in „int32“ zu konvertieren, bevor wir es in „Torch Tensor“ und dann in „Long“ konvertieren.
Die Funktion torch.autocast
benötigt ein Argument device_type
, an das ich hartnäckig versucht habe, device
zu übergeben, in der Hoffnung, dass es einwandfrei funktioniert, aber PyTorch möchte eigentlich nur den Typ und erzeugt in einigen Versionen von PyTorch Fehler. So möchten wir beispielsweise, dass das Gerät cuda:3
auf cuda
reduziert wird. Derzeit würden Geräte mps
(Apple Silicon) zu device_type
CPU“ werden. Ich bin mir nicht 100 % sicher, dass dies die beabsichtigte PyTorch-Methode ist.
Verwirrenderweise wird model.require_backward_grad_sync
tatsächlich sowohl beim Vorwärts- als auch beim Rückwärtsdurchlauf verwendet. Auf der Linie nach oben verschoben, sodass es auch auf den Vorwärtspass angewendet wird.
Für weitere produktionstaugliche Läufe, die nanoGPT sehr ähnlich sind, empfehle ich einen Blick auf die folgenden Repos:
MIT