femtoGPT es una implementación Rust pura de un transformador generativo preentrenado mínimo.
¡Se puede utilizar tanto para la inferencia como para el entrenamiento de modelos de lenguaje estilo GPT utilizando CPU y GPU !
( ¡HEY! ¡ También estoy escribiendo un libro, que pronto discutirá en detalle la implementación de un LLM! Échale un vistazo aquí: The Super Programmer)
Capacitación:
cargo run --release -- train
Inferencia:
cargo run --release -- infer
(Nota: ¡Agregue --features gpu
para aprovechar las aceleraciones de la GPU!)
Todo se implementa desde cero, incluida la lógica de procesamiento tensorial junto con el código de entrenamiento/inferencia de una arquitectura GPT mínima.
La arquitectura es muy similar/casi idéntica a la videoconferencia sobre nanoGPT de Andrej Karpathy.
femtoGPT es un gran comienzo para aquellos que están fascinados por los LLM y desean comprender cómo funcionan estos modelos en niveles muy profundos.
femtoGPT no utiliza más que bibliotecas de generación aleatoria ( rand
/ rand-distr
), bibliotecas de serialización de datos ( serde
/ bincode
para guardar/cargar modelos ya entrenados) y una biblioteca de computación paralela ( rayon
).
femtoGPT es EXTREMADAMENTE LENTO relativamente rápido en la CPU , y la mayoría de las operaciones primitivas (por ejemplo, multiplicación de matrices) se implementan de la manera más sencilla posible.
La corrección de los gradientes se verifica mediante el método de verificación de gradientes, aunque aún es muy posible que algunas capas se implementen incorrectamente.
(¡Servidor de Discord para discusiones sobre el proyecto!)
Asegúrese de tener la cadena de herramientas Rust en su sistema para poder compilar y ejecutar el proyecto:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Si desea entrenar usando una GPU, primero deberá asegurarse de que los controladores de su GPU estén instalados correctamente en su sistema y que sus tiempos de ejecución OpenCL estén disponibles.
En los sistemas Debian, puede configurar los tiempos de ejecución de OpenCL instalando el paquete ocl-icd-opencl-dev
:
sudo apt install ocl-icd-opencl-dev
¡ALBRICIAS! Dado que la implementación de GPU de femtoGPT se basa en OpenCL, puede ejecutarse en tarjetas NVIDIA y AMD, y no necesitará instalar kits de herramientas CUDA pesados en su sistema. ¡Los tiempos de ejecución de OpenCL serían suficientes!
Ahora solo necesitarás colocar el texto en el que deseas entrenar tu modelo GPT, dentro de dataset.txt
. ¡Asegúrate de que tenga una pequeña cantidad de personajes únicos! (Por ejemplo, ¡el conjunto de datos actual solo ha utilizado 65 caracteres únicos diferentes!)
Entonces necesitarás ejecutar:
cargo run --release
Comenzará a entrenar el modelo y colocará los datos de entrenamiento en el directorio train_data
. ¡Puedes detener el entrenamiento y continuar más tarde!
Después de horas de entrenamiento en la base de datos de Shakespeare, en un modelo de parámetros de 300k, este ha sido el resultado:
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
Esto es vergonzosamente malo, pero visto el lado positivo, parece que ha podido generar palabras que son fáciles de pronunciar.
Actualmente estoy entrenando un modelo de parámetros de 10M para examinar más a fondo la exactitud de mi implementación.
ACTUALIZACIÓN 5 de junio de 2023:
Este ha sido un nuevo resultado, después de más horas de entrenamiento en un modelo de escala similar:
What like but wore pad wo me che nogns yous dares,
As supt it nind bupart 'the reed:
And hils not es
¡Obviamente el modelo ha comenzado a aprender algunas palabras y reglas de puntuación!
ACTUALIZACIÓN 9 de junio de 2023:
El modelo pudo alcanzar un valor de pérdida de ~1,4
A continuación se muestra un resultado de ejemplo:
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,
ACTUALIZACIÓN 10 de junio de 2023, ¿chispas de AGI? JAJAJA
Después de haber entrenado un modelo de 5 capas en un conjunto de datos recopilado de Reddit, tokenizado con un tokenizador de oraciones con un tamaño de vocabulario de 500, durante aproximadamente ~10 horas en una CPU de 32 núcleos:
Mensaje "Creo" :
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
Mensaje "La vida es" :
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
Mensaje "Qué 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
ACTUALIZACIÓN 29 de junio de 2023
Después de la implementación del entrenador GPU, pudimos entrenar modelos más grandes. A continuación se muestran algunos ejemplos de un modelo de 8 capas, 8 cabezales y 128 grados de incrustación, entrenado en un conjunto de datos de TinyStories con un tamaño de vocabulario de 1000:
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.