femtoGPT é uma implementação Rust pura de um transformador generativo pré-treinado mínimo.
Ele pode ser usado tanto para inferência quanto para treinamento de modelos de linguagem no estilo GPT usando CPUs e GPUs !
( EI! Também estou escrevendo um livro, que em breve discutirá detalhadamente a implementação de um LLM! Confira aqui: O Super Programador)
Treinamento:
cargo run --release -- train
Inferência:
cargo run --release -- infer
(Observação: adicione --features gpu
para aproveitar as acelerações da GPU!)
Tudo é implementado do zero, incluindo a lógica de processamento do tensor junto com o código de treinamento/inferência de uma arquitetura GPT mínima.
A arquitetura é muito semelhante/quase idêntica à vídeo-aula nanoGPT de Andrej Karpathy.
femtoGPT é um ótimo começo para quem é fascinado por LLMs e gostaria de entender como esses modelos funcionam em níveis muito profundos.
femtoGPT usa apenas bibliotecas de geração aleatória ( rand
/ rand-distr
), bibliotecas de serialização de dados ( serde
/ bincode
para salvar/carregar modelos já treinados) e uma biblioteca de computação paralela ( rayon
).
femtoGPT é EXTREMAMENTE LENTO relativamente rápido na CPU , e a maioria das operações primitivas (por exemplo, multiplicação de matrizes) são implementadas da maneira mais simples possível.
A correção dos gradientes é verificada usando o método de verificação de gradiente, embora ainda seja muito possível que algumas camadas sejam implementadas incorretamente.
(Servidor Discord para discussões sobre o projeto!)
Certifique-se de ter o conjunto de ferramentas Rust em seu sistema para compilar e executar o projeto:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Se quiser treinar usando uma GPU, primeiro você precisa ter certeza de que os drivers da GPU estão instalados corretamente em seu sistema e que seus tempos de execução OpenCL estão disponíveis.
Em sistemas Debian, você pode configurar tempos de execução OpenCL instalando o pacote ocl-icd-opencl-dev
:
sudo apt install ocl-icd-opencl-dev
BOAS NOTÍCIAS! Como a implementação da GPU do femtoGPT é baseada em OpenCL, ela pode ser executada em placas NVIDIA e AMD, e você não precisará instalar kits de ferramentas CUDA pesados em seu sistema. Os tempos de execução do OpenCL seriam suficientes!
Agora você só precisa colocar o texto no qual deseja treinar seu modelo GPT, dentro de dataset.txt
. Certifique-se de que tenha um pequeno número de caracteres únicos! (Por exemplo, o conjunto de dados atual usou apenas 65 caracteres únicos diferentes!)
Então você precisará executar:
cargo run --release
Ele começará a treinar o modelo e colocará os dados de treinamento no diretório train_data
. Você pode interromper o treinamento e continuar mais tarde!
Após horas de treinamento no banco de dados Shakespeare, em um modelo de parâmetros de 300k, este foi o 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
Isso é embaraçosamente ruim, mas olhando pelo lado positivo, parece que foi capaz de gerar palavras fáceis de pronunciar.
Atualmente estou treinando um modelo de parâmetros de 10M para examinar melhor a exatidão da minha implementação.
ATUALIZAÇÃO 5 de junho de 2023:
Este foi um novo resultado, após mais horas de treinamento em um modelo de escala semelhante:
What like but wore pad wo me che nogns yous dares,
As supt it nind bupart 'the reed:
And hils not es
Obviamente a modelo começou a aprender algumas palavras e regras de pontuação!
ATUALIZAÇÃO 9 de junho de 2023:
O modelo foi capaz de atingir um valor de perda de ~ 1,4
Aqui está um exemplo de saída:
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,
ATUALIZAÇÃO 10 de junho de 2023, faíscas de AGI? LOL
Tendo treinado um modelo de 5 camadas em um conjunto de dados coletado do Reddit, tokenizado com tokenizador de sentença com tamanho de vocabulário de 500, por cerca de aproximadamente 10 horas em uma CPU de 32 núcleos:
Solicitação "Eu acho" :
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
Alerta "A vida é" :
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
Prompt "Tão triste isso" :
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
ATUALIZAÇÃO 29 de junho de 2023
Após a implementação do treinador de GPU, conseguimos treinar modelos maiores. Aqui estão alguns exemplos de um modelo de 8 camadas, 8 cabeças e 128 graus de incorporação, treinado no conjunto de dados TinyStories em um tamanho de vocabulário 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.