femtoGPT は、最小限の生成事前トレーニング済みトランスフォーマーの純粋な Rust 実装です。
CPUとGPU を使用した GPT スタイルの言語モデルの推論とトレーニングの両方に使用できます。
(やあ!私も本を書いています。LLM の実装について近々詳しく説明する予定です! ここでチェックしてください: The Super Programmer)
トレーニング:
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
ディレクトリに配置されます。トレーニングを停止して、後で続行することもできます。
シェイクスピア データベースで 300k パラメーター モデルで何時間もトレーニングした結果、次のような出力が得られました。
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
これは恥ずかしいほどひどいことですが、明るい面から見ると、発音しやすい単語を生成できているようです。
現在、実装の正確性をさらに調べるために 1,000 万のパラメーター モデルをトレーニングしています。
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 の火花?笑
Reddit から収集したデータセットで 5 層モデルをトレーニングし、語彙サイズ 500 のセンテンスピース トークナイザーでトークン化して、32 コア CPU で約 10 時間トレーニングしました。
プロンプト「私はそう思います」 :
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
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.