プログラミング
純粋なC言語で書かれたMicroGPTがApple M5で10M tpsを達成
Microgpt in pure C hits 10M tps on Apple m5 (github.com)
要約
依存関係のない純粋なC言語で書かれたMicroGPTは、文字レベルのTransformerモデルであり、フォワードパス、バックプロパゲーション、Adamオプティマイザ、サンプリング機能をすべて1つのCファイルに収めています。Apple M5 ProのNEON最適化により、毎秒10,168,430トークンという驚異的な処理速度を達成し、パラメータ数が少ないながらも優れた汎化能力を示しています。
全文翻訳
microGPT-C
純粋なC言語で書かれた、GPTのトレーニングと推論を行うための最も原子的な方法。libc以外に依存しない、1つのCファイルにフォワードパス、バックプロパゲーション、Adam、サンプリング機能を備えた文字レベルのTransformerです。
約32kの名前データで数秒でトレーニングを行い、新しい名前を生成します。
ビルドと実行
make run
または、1行に1つのアイテムがある任意のコーパスで直接実行します。
./microgpt data/names.txt
macOS、Linux、Windows (MSYS2) でビルド可能。ARM64ではNEON、x86-64ではAVX2に対応しています。Makefileがホスト用のフラグを選択します。
step 5000 / 20000 | loss 2.6036 (avg 2.2940)
step 10000 / 20000 | loss 1.9639 (avg 2.2564)
step 15000 / 20000 | loss 2.7007 (avg 2.2151)
step 20000 / 20000 | loss 2.3463 (avg 2.2201)
inference sample 1: kayley
sample 2: maria
sample 3: arana
sample 4: shayan
sample 5: jayden
sample 6: saria
sample 7: kaylen
sample 8: amari
sample 9: alina
sample 10: mailyn
c fp32+NEON 10168430 tok/sec
注記
モデルは4192個のパラメータを持ち、記憶するのではなく汎化します。32033個の名前のうち20000個でトレーニングした結果、それらの名前に対して2.2054 nats/character、一度も見たことのない12033個の名前に対して2.2039 nats/characterというスコアを記録し、パラメータ数がほぼ5倍ある補間された3-gramモデルを上回りました。
トレーニングと推論では、別々のフォワードパスを使用します。gpt_forwardはバックプロパゲーションのためにアクティベーションを保存し、gpt_forward_inferは、そのロジットがfp32の丸め誤差内で一致する、特殊化されたシングル・トークン・パスです。docs/PERFORMANCE.mdには、そのパスがどのように機能し、何がそれを制限するかが記載されています。
machine backend tok/sec
Apple M5 Pro NEON 10,168,430
AMD Ryzen 5 5600H AVX2 6,927,775