femtoGPT ist eine reine Rust-Implementierung eines minimalen generativen vortrainierten Transformators.
Es kann sowohl für die Inferenz als auch für das Training von Sprachmodellen im GPT-Stil unter Verwendung von CPUs und GPUs verwendet werden!
( HEY! Ich schreibe auch ein Buch, in dem bald ausführlich auf die Implementierung eines LLM eingegangen wird! Schauen Sie es sich hier an: The Super Programmer)
Ausbildung:
cargo run --release -- train
Schlussfolgerung:
cargo run --release -- infer
(Hinweis: Fügen Sie --features gpu
hinzu, um GPU-Beschleunigungen zu nutzen!)
Alles ist von Grund auf implementiert, einschließlich der Tensor-Verarbeitungslogik zusammen mit dem Trainings-/Inferenzcode einer minimalen GPT-Architektur.
Die Architektur ist sehr ähnlich/fast identisch mit der nanoGPT-Videovorlesung von Andrej Karpathy.
femtoGPT ist ein toller Einstieg für alle, die sich für LLMs interessieren und verstehen möchten, wie diese Modelle auf sehr tiefen Ebenen funktionieren.
femtoGPT verwendet ausschließlich Bibliotheken zur Zufallsgenerierung ( rand
/ rand-distr
), Datenserialisierungsbibliotheken ( serde
/ bincode
zum Speichern/Laden bereits trainierter Modelle) und eine Bibliothek für paralleles Rechnen ( rayon
).
FemtoGPT ist EXTREM LANGSAM relativ schnell auf der CPU und die meisten primitiven Operationen (z. B. Matrixmultiplikation) werden auf die einfachste Art und Weise implementiert.
Die Korrektheit der Farbverläufe wird mit der Methode der Farbverlaufsprüfung überprüft, es ist jedoch durchaus möglich, dass einige Ebenen falsch implementiert sind.
(Discord-Server für Diskussionen rund um das Projekt!)
Stellen Sie sicher, dass Sie die Rust-Toolchain auf Ihrem System haben, um das Projekt zu kompilieren und auszuführen:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Wenn Sie mit einer GPU trainieren möchten, müssen Sie zunächst sicherstellen, dass Ihre GPU-Treiber korrekt auf Ihrem System installiert sind und ihre OpenCL-Laufzeiten verfügbar sind.
Auf Debian-Systemen können Sie OpenCL-Laufzeiten einrichten, indem Sie das Paket ocl-icd-opencl-dev
installieren:
sudo apt install ocl-icd-opencl-dev
GUTE NACHRICHTEN! Da die GPU-Implementierung von femtoGPT auf OpenCL basiert, kann es sowohl auf NVIDIA- als auch auf AMD-Karten ausgeführt werden, und Sie müssen keine umfangreichen CUDA-Toolkits auf Ihrem System installieren. OpenCL-Laufzeiten würden ausreichen!
Jetzt müssen Sie nur noch den Text, mit dem Sie Ihr GPT-Modell trainieren möchten, in dataset.txt
einfügen. Stellen Sie sicher, dass es nur wenige einzigartige Charaktere enthält! (Zum Beispiel hat der aktuelle Datensatz nur 65 verschiedene eindeutige Zeichen verwendet!)
Dann müssen Sie Folgendes ausführen:
cargo run --release
Es beginnt mit dem Training des Modells und legt die Trainingsdaten im Verzeichnis train_data
ab. Sie können das Training abbrechen und später fortfahren!
Nach stundenlangem Training mit der Shakespeare-Datenbank und einem 300.000-Parameter-Modell war dies die Ausgabe:
LIS:
Tore hend shater sorerds tougeng an herdofed seng he borind,
Ound ourere sthe, a sou so tousthe ashtherd, m se a man stousshan here hat mend serthe fo witownderstesther s ars at atheno sel theas,
thisth t are sorind bour win soutinds mater horengher
Das ist peinlich schlecht, aber wenn man die positive Seite betrachtet, scheint es, als sei es gelungen, Wörter zu erzeugen, die leicht auszusprechen sind.
Ich trainiere derzeit ein 10-M-Parametermodell, um die Korrektheit meiner Implementierung weiter zu untersuchen.
UPDATE 5. Juni 2023:
Dies ist eine neue Ausgabe, nach mehr Stunden Training an einem Modell mit ähnlichem Maßstab:
What like but wore pad wo me che nogns yous dares,
As supt it nind bupart 'the reed:
And hils not es
Offensichtlich hat das Modell begonnen, einige Wörter und Zeichensetzungsregeln zu lernen!
UPDATE 9. Juni 2023:
Das Modell konnte einen Verlustwert von ~1,4 erreichen
Hier ist eine Beispielausgabe:
Adistition gone; true; schistoes for mine souls!
Before your home, bariechts should be
Carlam on that's a worf quirer of him so.
What look'd lack away more
To him foot; one hour fortious of saves:
Son;
'Tis all Earl mmistling me.
HARSARTIO:
Why, idless of my mocks fan that were percious.
Having I will thou should and the muour ne'er shor
To purple, when duke thy are out him.
But will bid you doth remember nature.
Even OF hencomey, carniffeit, I joy
Warming; my deed, but it on of mortard,
UPDATE 10. Juni 2023, Funken von AGI? LOL
Nachdem ich ein 5-Schichten-Modell auf einem von Reddit gesammelten Datensatz trainiert habe, der mit dem Satzstück-Tokenizer mit einer Vokabelgröße von 500 tokenisiert wurde, für etwa ~10 Stunden auf einer 32-Kern-CPU:
Aufforderung „Ich denke“ :
I think it s not a scientific method of atheism
I think it s not a fairly simple possible to have a
I think that s a possible point, but I m not sure if you re not
I think that s a great idea, but I m not sure how these are you talking
I think it s a simple thing to do, but I m not sure how thes
I think that s a good thing, but I don t think that s what I mean, I think I
I think that s the only way to be able to use it to be in the same way, but
I think that the police are relatively relatively relative
I think that s a simple moron is a simple character
I think that s the only way to go to the second side of the pol
Aufforderung „Das Leben ist“ :
Life is not a good idea, but it s not a perfection of the opp
Life is a good thing to say that I don t know what you re talking about, but I don
Life is not the same as a religion, but I m not sure if you re a
Life is a perfectly good job of arguing that you are alm
Life is a perfectly good job of the opposite of the f
Life is a fundamentalist, and then I m not sure how the h
Life is not a good idea, and it s not a perfectly good job, but I
Life is not the same as atheists, but that s the only way to be ac
Life is a bit of a single one of these industry is a f
Life is a good idea to get the opposite of the police offic
Aufforderung „So traurig, dass“ :
So sad that you can tell you what? I think I ve been using it on the scre
So sad that I don t know about it, but I don t think I m not afraid to
So sad that I m not sure if you re not arguing with the fact that you
So sad that I was involved in the future, and I have a few we
So sad that s what I said, I m sure you are almost everything you
So sad that you can do it, and I don t think that the fact that it s a po
So sad that I m not sure if you re arguing with the fact that they are
So sad that s the one too much time, but I m not sure if you re arg
So sad that you are sadly supposed to be a big deal in the world
So sad that I don t know about this, but I m not sure how you can do it, but
UPDATE 29. Juni 2023
Nach der Implementierung des GPU-Trainers konnten wir größere Modelle trainieren. Hier sind einige Beispiele eines 8-Schichten-8-Kopf-Modells mit 128 Einbettungsgraden, das auf dem TinyStories-Datensatz mit einer Vokabelgröße von 1000 trainiert wurde:
Once upon a time, there was a little girl named Lily.
She loved to play with her toys and she had a lot of fun.
One day, Lily saw a big chicky playing with her toys.
She asked her mom, "Can I play with her toys?" Her mom said,
"Sure, Lily. But we have to clean the pales. Let's suet some candy, Lily."
Lily nodded and went to her mom. They played with the mots and staugning her toys.
Once upon a time, there was a little girl named Lily.
She loved to play outside and explore. One day, she found a jung on the ground.
She picked it up and tecked it. She ran around and saw it. She was very sad.
She asked her mom for her mom. Her mom said, "Lily, I'm going to find it!" Lily said.
She ran to the slock and took her to the teplace. She went to the park and found a molla.
There was a boy named Tim. Tim loved to play with his toys.
One day, Tim's mom came to the park. Tim saw a big, red ball and wanted to play with it.
Tim wanted to play with the ball. Tim was very excited. He wanted to play with the ball.
But the ball was too fast. Tim wanted to play with the ball. But the ball was too fast.
Tim tried to catch it, but it was too fast. Tim was sad. He tried to run away,
but he did not want to play. Tim was sad. He did not want to play with the ball.