このリポジトリには、nanoGPT を最初から再現したものが保存されています。 git コミットは特にステップバイステップでクリーンな状態に保たれているため、git コミット履歴を簡単にたどって、ゆっくりと構築されたことを確認できます。さらに、YouTube には付属のビデオ講義があり、私が各コミットを紹介し、途中で部分を説明するのを見ることができます。
基本的には空のファイルから開始して、GPT-2 (124M) モデルの複製に取り組みます。忍耐力やお金があれば、コードで GPT-3 モデルを再現することもできます。 GPT-2 (124M) モデルは、おそらく当時 (2019 年、約 5 年前) までかなりの時間をかけてトレーニングされましたが、現在では、これを再現するのに約 1 時間と約 10 ドルかかります。十分でない場合はクラウド GPU ボックスが必要になります。そのためには Lambda をお勧めします。
GPT-2 と GPT-3、および両方の単純な言語モデルはインターネット ドキュメントでトレーニングされており、それらが行うことはインターネット ドキュメントを「夢見る」だけであることに注意してください。そのため、このリポジトリ/ビデオでは Chat の微調整については説明されておらず、ChatGPT と通信するのと同じように ChatGPT と通信することはできません。微調整プロセス (概念的には非常に単純ですが、SFT はデータセットを交換してトレーニングを継続するだけです) はこの部分の後にあり、後で説明します。今のところ、これは、10B トークンのトレーニング後に「こんにちは、私は言語モデルです」とプロンプトを出した場合に 124M モデルが言うような内容です。
Hello, I'm a language model, and my goal is to make English as easy and fun as possible for everyone, and to find out the different grammar rules
Hello, I'm a language model, so the next time I go, I'll just say, I like this stuff.
Hello, I'm a language model, and the question is, what should I do if I want to be a teacher?
Hello, I'm a language model, and I'm an English person. In languages, "speak" is really speaking. Because for most people, there's
40B トークンのトレーニング後:
Hello, I'm a language model, a model of computer science, and it's a way (in mathematics) to program computer programs to do things like write
Hello, I'm a language model, not a human. This means that I believe in my language model, as I have no experience with it yet.
Hello, I'm a language model, but I'm talking about data. You've got to create an array of data: you've got to create that.
Hello, I'm a language model, and all of this is about modeling and learning Python. I'm very good in syntax, however I struggle with Python due
笑。とにかく、ビデオが公開されたら、ここは FAQ の場所、修正と正誤表の場所にもなります。きっとたくさんあるでしょう :)
ディスカッションや質問については、「ディスカッション」タブを使用してください。より迅速なコミュニケーションのために、私の Zero To Hero Discord、チャンネル#nanoGPTをご覧ください。
GPT-2(124M)のYouTube講義を再現してみよう
マイナーなクリーンアップ。フラッシュ アテンションに切り替えた後、バイアスのregister_buffer
削除するのを忘れていましたが、最近の PR で修正されました。
PyTorch の以前のバージョンでは、uint16 から long への変換が難しい場合があります。 load_tokens
内にnpt = npt.astype(np.int32)
を追加して、numpy を使用して uint16 を int32 に変換してから、トーチ テンソルに変換してから Long に変換しました。
torch.autocast
関数は引数device_type
を受け取ります。これに、問題なく動作することを願って頑固にdevice
渡そうとしましたが、PyTorch は実際にはタイプだけを必要としており、PyTorch の一部のバージョンでエラーを作成します。したがって、たとえばデバイスcuda:3
をcuda
に取り除きます。現在、デバイスmps
(Apple Silicon) はdevice_type
CPU になりますが、これが意図した PyTorch の方法であるかどうかは 100% わかりません。
紛らわしいことに、 model.require_backward_grad_sync
は実際には前方パスと後方パスの両方で使用されます。前方へのパスにも適用されるようにラインを上げました。
nanoGPT によく似た実稼働グレードの実行については、次のリポジトリを参照することをお勧めします。
マサチューセッツ工科大学