みなさんこんにちは、
これをしばらく取り組んでいて、ここでも共有しようと思いました。PyTorchで、最初からまったくの自作で小さなトランスフォーマー言語モデルを作りました。事前学習済みの重みはなし、HuggingFaceのダウンロードもなしです。すべてのパラメータを、単一のコンシューマーGPUで、生テキストから学習しました。
現在のリリースはPlasma 1.0です(235M params、18層、隠れ次元1024)。LLaMAスタイル:GQAで、クエリヘッド16、KVヘッド4(head_dim 64)。FFNはSwiGLUで中間次元2816、RoPEはtheta 10000、RMSNormのpre-norm、埋め込みの重み共有(tied embeddings)。32kのSentencePiece BPEボキャブラリ。bf16の混合精度に加えて、5080に収めるために勾配チェックポイントを使い、seq len 1024で約5Bトークン学習しました。
また、完全なパイプラインも自分で書きました:
- データ:FineWeb-Edu、Wikipedia、StackExchange、コード、ArXiv
- 品質および毒性のフィルタリング
- MinHashによる重複排除
- カスタムのSentencePieceトークナイザ
- ドメインに重み付けしたデータ混合
- 損失マスキング付きでの事前学習とインストラクション・チューニング(アシスタントのトークンからのみ学習する)
インストラクション・チューニング後のサンプル出力:
You: When was World War 1? 1386.ai: World War I began on June 26, 1914.
You: What is a steak made of? 1386.ai: A steak can be made from various types of meat, including beef.
言うまでもなく、Llama 3と競っているわけではありません。このスケールでは、幻覚(ハルシネーション)や奇妙な出力、そしてかなり厳しい天井があります。ですが、このやり方で実装すると、大きいモデルを単にファインチューニングするだけでは得られないことをたくさん学べました。
Plasma 1.1は現在学習中です(500M params)。マルチターンの性能向上と、バイトフォールバック付きのより大きなボキャブラリを目指しています。
リポジトリ:github.com/eb1386/1386.ai
パイプラインやアーキテクチャ選択についての質問なら何でもお答えします。
[link] [comments]
