femtoGPT เป็นการนำ Rust ไปใช้จริงของ Generative Pretrained Transformer ที่น้อยที่สุด
สามารถใช้สำหรับ การอนุมาน และ การฝึกอบรม โมเดลภาษาสไตล์ GPT โดยใช้ CPU และ GPU !
( เฮ้! ฉันกำลังเขียนหนังสือด้วย ซึ่งจะกล่าวถึงรายละเอียดการใช้งาน LLM เร็วๆ นี้ ลองดูที่นี่: The Super Programmer)
การฝึกอบรม:
cargo run --release -- train
การอนุมาน:
cargo run --release -- infer
(หมายเหตุ: เพิ่ม --features gpu
เพื่อใช้ประโยชน์จากการเร่งความเร็ว GPU!)
ทุกอย่างถูกนำไปใช้ตั้งแต่เริ่มต้น รวมถึงตรรกะการประมวลผลเทนเซอร์พร้อมกับโค้ดการฝึกอบรม/การอนุมานของสถาปัตยกรรม GPT ขั้นต่ำ
สถาปัตยกรรมคล้ายกันมาก/เกือบจะเหมือนกันกับวิดีโอบรรยาย nanoGPT ของ Andrej Karpathy
femtoGPT เป็นการเริ่มต้นที่ดีสำหรับผู้ที่หลงใหลใน LLM และต้องการทำความเข้าใจว่าโมเดลเหล่านี้ทำงานอย่างไรในระดับที่ลึกมาก
femtoGPT ไม่ได้ใช้อะไรเลยนอกจากไลบรารีการสร้างแบบสุ่ม ( rand
/ rand-distr
) ไลบรารีการทำให้เป็นอนุกรมข้อมูล ( serde
/ bincode
สำหรับการบันทึก / โหลดโมเดลที่ได้รับการฝึกอบรมแล้ว) และไลบรารีการคำนวณแบบขนาน ( rayon
)
femtoGPT คือ ช้ามาก ค่อนข้างเร็วบน CPU และการดำเนินการดั้งเดิมส่วนใหญ่ (เช่น การคูณเมทริกซ์) ถูกนำไปใช้ในวิธีที่ง่ายที่สุดเท่าที่จะเป็นไปได้
ตรวจสอบความถูกต้องของการไล่ระดับสีโดยใช้วิธีตรวจสอบการไล่ระดับสี แม้ว่าจะมีความเป็นไปได้มากที่บางเลเยอร์จะถูกนำไปใช้อย่างไม่ถูกต้อง
(เซิร์ฟเวอร์ Discord สำหรับการสนทนาเกี่ยวกับโครงการ!)
ตรวจสอบให้แน่ใจว่าคุณมี Toolchain Rust บนระบบของคุณ เพื่อคอมไพล์และรันโปรเจ็กต์:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
หากคุณต้องการฝึกใช้ GPU คุณต้องตรวจสอบให้แน่ใจก่อนว่าไดรเวอร์ GPU ของคุณได้รับการติดตั้งอย่างถูกต้องบนระบบของคุณ และรันไทม์ OpenCL เหล่านั้นพร้อมใช้งาน
บนระบบ Debian คุณสามารถตั้งค่ารันไทม์ OpenCL ได้โดยการติดตั้งแพ็คเกจ ocl-icd-opencl-dev
:
sudo apt install ocl-icd-opencl-dev
ข่าวดี! เนื่องจากการใช้งาน GPU ของ femtoGPT ขึ้นอยู่กับ 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 เพื่อตรวจสอบความถูกต้องของการนำไปปฏิบัติเพิ่มเติม
อัปเดตวันที่ 5 มิถุนายน 2023:
นี่เป็นผลลัพธ์ใหม่ หลังจากฝึกฝนโมเดลที่มีขนาดใกล้เคียงกันเป็นเวลานานหลายชั่วโมง:
What like but wore pad wo me che nogns yous dares,
As supt it nind bupart 'the reed:
And hils not es
แน่นอนว่าโมเดลเริ่มเรียนรู้คำศัพท์และกฎเครื่องหมายวรรคตอนแล้ว!
อัปเดตเมื่อวันที่ 9 มิถุนายน 2023:
โมเดลสามารถเข้าถึงค่าการสูญเสียที่ ~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,
อัปเดต 10 มิถุนายน 2566 จุดประกายของ AGI? ฮ่าๆ
หลังจากฝึกฝนโมเดล 5 เลเยอร์บนชุดข้อมูลที่รวบรวมจาก Reddit โทเค็นด้วยโทเคนประโยคประโยคที่มีขนาดคำศัพท์ 500 เป็นเวลาประมาณ 10 ชั่วโมงบน CPU 32 คอร์:
แจ้งว่า "ฉันคิดว่า" :
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 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
อัปเดตวันที่ 29 มิถุนายน 2023
หลังจากใช้งาน GPU Trainer เราก็สามารถฝึกโมเดลที่ใหญ่ขึ้นได้ ต่อไปนี้เป็นตัวอย่างบางส่วนจากแบบจำลองการฝัง 128 องศา 8 เลเยอร์ 8 หัว ซึ่งได้รับการฝึกฝนบนชุดข้อมูล TinyStories บนขนาดคำศัพท์ 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.