NanoEuler:純粋なC/CUDAでスクラッチから構築したGPT-2スケールの言語モデル
NanoEulerは、PyTorchや自動微分を使わずに、C/CUDAだけでスクラッチから構築されたGPT-2クラスの言語モデルです。手書きのBPEトークナイザー、順伝播・逆伝播、書籍とWebコーパスでの事前学習、教師ありファインチューニング(SFT)を含みます。CPUで動作する小型モデルと、cuBLASとFlashAttentionを使用するGPUモデルの2つの構成があります。教育的な成果物であり、完全なトレーニングパイプラインを示しています。
NanoEuler は、GPT-2 レベルの言語モデルを、PyTorch や自動微分、機械学習ライブラリを一切使わずに、C と CUDA だけでスクラッチから構築したプロジェクトです。教育的価値と工学的価値に重点を置き、完全な深層学習トレーニングパイプラインを示しています。手書きのバイト対符号化(BPE)トークナイザー、順伝播と逆伝播、書籍とウェブコーパスでの事前学習、そして教師ありファインチューニング(SFT)によるチャットモデルへの変換が含まれます。
「Euler」という名前は、残差ブロックの構造がオイラーの前進積分法と同じ形式であることに由来します:各残差接続は微分方程式の離散化ステップのように見えます。プロジェクトには2つの構成があります:CPU で動作する小型展示モデル(約1.05Mパラメータ)と、単一の RTX 4070 でトレーニングする GPU モデル(約116Mパラメータ)です。GPU モデルは手書きの CUDA エンジンを使用し、cuBLAS 行列乗算と FlashAttention を備え、全モデルの勾配チェック(倍精度有限差分法)で逆伝播の正確性を検証しています。
NanoEuler のアーキテクチャは典型的なデコーダーのみのトランスフォーマーで、RMSNorm(バイアスなし)、回転位置符号化(RoPE)、SwiGLU フィードフォワードネットワーク、グループ化クエリアテンション(GQA)、マルチトークン予測(MTP)を採用しています。トークナイザーはバイトレベルの BPE で、GPT-2 スタイルの事前トークン化を使用し、語彙サイズは4096です。
現時点では研究・教育段階にあります。トレーニングされたモデルは流暢な英語を生成できますが、実際の世界知識はほとんどなく、有用なアシスタントではありません。事前学習データは、Gutenberg プロジェクトの古典文学(オースティン、ディケンズ、トルストイなど)と、FineWeb-Edu の高品質教育ウェブテキストから取られています。SFT は Alpaca 指示データを使用しています。ロードマップには、次のステップとして直接選好最適化(DPO)の実装と、モデルスケールの約270Mパラメータへの拡大が含まれています。
NanoEuler は MIT ライセンスで公開されており、すべてのコードとデータ生成スクリプトはオープンソースです。このプロジェクトの意義は、完全にスクラッチから構築された理解可能で検証可能な言語モデルトレーニング実装を提供し、深層学習の教育と実験に貢献することにあります。