femtoGPT는 최소한의 Generative Pretrained Transformer를 순수 Rust로 구현한 것입니다.
CPU 와 GPU를 사용하는 GPT 스타일 언어 모델의 추론 과 훈련 에 모두 사용할 수 있습니다!
( 안녕하세요! 저는 또한 곧 LLM 구현에 대해 자세히 논의할 책을 집필 중입니다. 여기에서 확인하세요: 슈퍼 프로그래머)
훈련:
cargo run --release -- train
추론:
cargo run --release -- infer
(참고: GPU 속도 향상을 활용하려면 --features gpu
추가하세요!)
최소 GPT 아키텍처의 훈련/추론 코드와 함께 텐서 처리 로직을 포함하여 모든 것이 처음부터 구현됩니다.
아키텍처는 Andrej Karpathy의 nanoGPT 비디오 강의와 매우 유사/거의 동일합니다.
femtoGPT는 LLM에 관심이 있고 이러한 모델이 매우 깊은 수준에서 어떻게 작동하는지 이해하고 싶은 사람들에게 훌륭한 시작입니다.
femtoGPT는 무작위 생성 라이브러리( rand
/ rand-distr
), 데이터 직렬화 라이브러리(이미 훈련된 모델을 저장/로드하기 위한 serde
/ bincode
) 및 병렬 컴퓨팅 라이브러리( rayon
)만 사용합니다.
펨토GPT는 매우 느림 CPU에서는 상대적으로 빠르며 대부분의 기본 연산(예: 행렬 곱셈)은 가능한 가장 간단한 방법으로 구현됩니다.
그라디언트의 정확성은 그라디언트 확인 방법을 사용하여 확인하지만 일부 레이어가 잘못 구현될 가능성은 여전히 매우 높습니다.
(프로젝트에 대한 토론을 위한 Discord 서버입니다!)
프로젝트를 컴파일하고 실행하려면 시스템에 Rust 툴체인이 있는지 확인하세요.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
GPU를 사용하여 훈련하려면 먼저 GPU 드라이버가 시스템에 올바르게 설치되어 있고 해당 OpenCL 런타임을 사용할 수 있는지 확인해야 합니다.
Debian 시스템에서는 ocl-icd-opencl-dev
패키지를 설치하여 OpenCL 런타임을 설정할 수 있습니다.
sudo apt install ocl-icd-opencl-dev
좋은 소식! femtoGPT의 GPU 구현은 OpenCL을 기반으로 하기 때문에 NVIDIA 및 AMD 카드 모두에서 실행될 수 있으며 시스템에 무거운 CUDA 툴킷을 설치할 필요가 없습니다. OpenCL 런타임이면 충분합니다!
이제 GPT 모델을 훈련하려는 텍스트를 dataset.txt
안에 넣으면 됩니다. 고유 문자 수가 적은지 확인하세요! (예: 현재 데이터 세트에서는 65개의 고유 문자만 사용했습니다!)
그런 다음 다음을 실행해야 합니다.
cargo run --release
모델 훈련을 시작하고 훈련 데이터를 train_data
디렉터리에 저장합니다. 훈련을 중단하고 나중에 계속할 수 있습니다!
셰익스피어 데이터베이스에 대한 300,000 매개변수 모델에 대한 몇 시간의 교육 후에 다음과 같은 결과가 나왔습니다.
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
부끄럽게도 안타까운 일이지만, 밝은 면을 보면 발음하기 쉬운 단어를 만들어낸 것 같다.
저는 현재 구현의 정확성을 추가로 조사하기 위해 10M 매개변수 모델을 훈련하고 있습니다.
2023년 6월 5일 업데이트:
이는 비슷한 규모의 모델에 대해 더 많은 시간을 훈련한 후 새로운 결과입니다.
What like but wore pad wo me che nogns yous dares,
As supt it nind bupart 'the reed:
And hils not es
분명히 모델은 몇 가지 단어와 구두점 규칙을 배우기 시작했습니다!
2023년 6월 9일 업데이트:
모델은 ~1.4의 손실 값에 도달할 수 있었습니다.
다음은 출력 예입니다.
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,
2023년 6월 10일 업데이트, AGI의 불꽃? ㅋㅋㅋ
32코어 CPU에서 약 10시간 동안 어휘 크기가 500인 문장 조각 토크나이저로 토큰화된 Reddit에서 수집한 데이터세트로 5계층 모델을 훈련한 결과:
"내 생각엔" 프롬프트:
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
프롬프트 "Life is" :
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
"너무 슬프네요" 프롬프트:
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
2023년 6월 29일 업데이트
GPU 트레이너를 구현한 후 더 큰 모델을 트레이닝할 수 있었습니다. 다음은 어휘 크기 1000의 TinyStories 데이터세트에서 훈련된 8층 8헤드 128임베딩 수준 모델의 일부 샘플입니다.
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.