femtoGPT est une implémentation Rust pure d'un transformateur pré-entraîné génératif minimal.
Il peut être utilisé à la fois pour l'inférence et la formation de modèles de langage de style GPT à l'aide de CPU et de GPU !
( HÉ ! J'écris également un livre, qui discutera bientôt de la mise en œuvre d'un LLM en détail ! Découvrez-le ici : The Super Programmer)
Entraînement:
cargo run --release -- train
Inférence:
cargo run --release -- infer
(Remarque : ajoutez --features gpu
afin de tirer parti des accélérations du GPU !)
Tout est implémenté à partir de zéro, y compris la logique de traitement tensoriel ainsi que le code de formation/inférence d'une architecture GPT minimale.
L'architecture est très similaire/presque identique à la conférence vidéo nanoGPT d'Andrej Karpathy.
femtoGPT est un bon début pour ceux qui sont fascinés par les LLM et aimeraient comprendre comment ces modèles fonctionnent à des niveaux très profonds.
femtoGPT n'utilise que des bibliothèques de génération aléatoire ( rand
/ rand-distr
), des bibliothèques de sérialisation de données ( serde
/ bincode
pour sauvegarder/charger des modèles déjà entraînés) et une bibliothèque de calcul parallèle ( rayon
).
femtoGPT est EXTRÊMEMENT LENT relativement rapide sur CPU , et la plupart des opérations primitives (par exemple multiplication matricielle) sont implémentées de la manière la plus simple possible.
L'exactitude des dégradés est vérifiée à l'aide de la méthode de vérification des dégradés, bien qu'il soit toujours très possible que certains calques soient mal implémentés.
(Serveur Discord pour les discussions autour du projet !)
Assurez-vous d'avoir la chaîne d'outils Rust sur votre système, afin de compiler et d'exécuter le projet :
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Si vous souhaitez vous entraîner à l'aide d'un GPU, vous devrez d'abord vous assurer que vos pilotes GPU sont correctement installés sur votre système et que leurs environnements d'exécution OpenCL sont disponibles.
Sur les systèmes Debian, vous pouvez configurer les runtimes OpenCL en installant le package ocl-icd-opencl-dev
:
sudo apt install ocl-icd-opencl-dev
BONNES NOUVELLES! Étant donné que l'implémentation GPU de femtoGPT est basée sur OpenCL, elle peut fonctionner à la fois sur les cartes NVIDIA et AMD, et vous n'aurez pas besoin d'installer de lourdes boîtes à outils CUDA sur votre système. Les runtimes OpenCL suffiraient !
Il ne vous reste plus qu'à mettre le texte sur lequel vous souhaitez entraîner votre modèle GPT, dans dataset.txt
. Assurez-vous qu'il comporte un petit nombre de caractères uniques ! (Par exemple, l'ensemble de données actuel n'a utilisé que 65 caractères uniques différents !)
Ensuite, vous devrez exécuter :
cargo run --release
Il commencera à entraîner le modèle et placera les données d'entraînement dans le répertoire train_data
. Vous pouvez arrêter la formation et continuer plus tard !
Après des heures de formation sur la base de données Shakespeare, sur un modèle de 300 000 paramètres, voici le résultat :
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
C’est embarrassant, mais en regardant le bon côté des choses, il semble que cela ait été capable de générer des mots faciles à prononcer.
Je suis actuellement en train de former un modèle de paramètres à 10 millions pour examiner plus en détail l'exactitude de ma mise en œuvre.
MISE À JOUR le 5 juin 2023 :
Il s'agit d'un nouveau résultat, après plusieurs heures de formation sur un modèle à échelle similaire :
What like but wore pad wo me che nogns yous dares,
As supt it nind bupart 'the reed:
And hils not es
Évidemment le modèle a commencé à apprendre quelques mots et règles de ponctuation !
MISE À JOUR le 9 juin 2023 :
Le modèle a pu atteindre une valeur de perte d'environ 1,4
Voici un exemple de sortie :
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 juin 2023, des étincelles d'AGI ? MDR
Après avoir entraîné un modèle à 5 couches sur un ensemble de données collecté sur Reddit, tokenisé avec un tokenizer de phrase avec une taille de vocabulaire de 500, pendant environ environ 10 heures sur un processeur à 32 cœurs :
Invite "Je pense" :
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
Invite "La vie est" :
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
Invite "Tellement triste que" :
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
MISE À JOUR 29 juin 2023
Après la mise en œuvre du GPU Trainer, nous avons pu entraîner des modèles plus grands. Voici quelques exemples d'un modèle à 8 couches et 8 têtes à 128 degrés d'intégration, formé sur l'ensemble de données TinyStories sur une taille de vocabulaire de 1 000 :
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.