minGPT-TF
Implementasi ulang TensorFlow dari mingpt
buku catatan
play_math.ipynb
dan play_char.ipynb
dilatih di colab. Tautan ada di bagian atas setiap notebook untuk melatih model di colab. play_char.ipynb
notebook batch_size
dikurangi agar sesuai dengan memori GPU
colab. Ubah parameter sesuai dengan memori GPU.
minGPT - Baca saya
Implementasi ulang pelatihan GPT oleh PyTorch. minGPT mencoba untuk menjadi kecil, bersih, dapat ditafsirkan dan mendidik, karena sebagian besar yang tersedia saat ini agak luas. GPT bukanlah model yang rumit dan implementasi ini terdiri dari sekitar 300 baris kode, termasuk boilerplate dan modul perhatian mandiri kausal khusus yang sama sekali tidak diperlukan. Bagaimanapun, semua yang terjadi adalah urutan indeks masuk ke dalam urutan blok transformator, dan distribusi probabilitas indeks berikutnya keluar. Kompleksitas lainnya hanyalah menjadi pintar dalam pengelompokan (baik antar contoh maupun panjang urutan) sehingga pelatihan menjadi efisien.
"Perpustakaan" minGPT inti (hah) terdiri dari dua file: mingpt/model.py
berisi definisi model Transformer sebenarnya dan mingpt/trainer.py
adalah boilerplate PyTorch (independen GPT) yang melatih model. Notebook Jupyter yang terlampir kemudian menunjukkan bagaimana "perpustakaan" (hah) dapat digunakan untuk melatih model urutan:
-
play_math.ipynb
melatih GPT yang berfokus pada penjumlahan (terinspirasi oleh bagian penjumlahan di makalah GPT-3) -
play_char.ipynb
melatih GPT untuk menjadi model bahasa tingkat karakter pada teks arbitrer, mirip dengan char-rnn lama saya tetapi dengan transformator, bukan RNN -
play_words.ipynb
versi BPE yang belum ada
Dengan encoder bpe, pelatihan terdistribusi, dan mungkin fp16 implementasi ini mungkin dapat mereproduksi hasil GPT-1/GPT-2, meskipun saya belum mencoba $$$. GPT-3 kemungkinan besar tidak dapat dijangkau karena menurut pemahaman saya, GPT-3 tidak cocok dengan memori GPU dan memerlukan perlakuan model paralel yang lebih hati-hati.
Contoh penggunaan
Kode ini cukup sederhana untuk hanya meretas inline, bukan "bekas", tetapi API saat ini terlihat seperti:
# you're on your own to define a class that returns individual examples as PyTorch LongTensors
from torch . utils . data import Dataset
train_dataset = MyDataset (...)
test_dataset = MyDataset (...)
# construct a GPT model
from mingpt . model import GPT , GPTConfig
mconf = GPTConfig ( vocab_size , block_size , n_layer = 12 , n_head = 12 , n_embd = 768 ) # a GPT-1
model = GPT ( mconf )
# construct a trainer
from mingpt . trainer import Trainer , TrainerConfig
tconf = TrainerConfig ( max_epochs = 10 , batch_size = 256 )
trainer = Trainer ( model , train_dataset , test_dataset , tconf )
trainer . train ()
# (... enjoy the show for a while... )
# sample from the model (the [None, ...] and [0] are to push/pop a needed dummy batch dimension)
from mingpt . utils import sample
x = torch . tensor ([ 1 , 2 , 3 ], dtype = torch . long )[ None , ...] # context conditioning
y = sample ( model , x , steps = 30 , temperature = 1.0 , sample = True , top_k = 5 )[ 0 ]
print ( y ) # our model filled in the integer sequence with 30 additional likely integers
Referensi
Kode:
- openai/gpt-2 memiliki model tetapi tidak memiliki kode pelatihan, dan di TensorFlow
- openai/image-gpt memiliki beberapa gpt-3 yang lebih modern seperti modifikasi dalam kodenya, referensi yang bagus juga
- huggingface/transformers memiliki contoh pemodelan bahasa. Ini berfitur lengkap tetapi akibatnya juga agak sulit untuk dilacak. Misalnya, beberapa fungsi besar memiliki sebanyak 90% kode yang tidak digunakan di balik berbagai pernyataan percabangan yang tidak digunakan dalam pengaturan default pemodelan bahasa sederhana.
Makalah + beberapa catatan implementasi:
Meningkatkan Pemahaman Bahasa dengan Pra-Pelatihan Generatif (GPT-1)
- Model kami sebagian besar mengikuti karya trafo asli
- Kami melatih transformator khusus dekoder 12 lapis dengan kepala perhatian mandiri bertopeng (768 status dimensi dan 12 kepala perhatian). Untuk jaringan feed-forward berdasarkan posisi, kami menggunakan status dalam 3072 dimensi.
- Kecepatan pembelajaran Adam maks 2,5e-4. (nantinya GPT-3 untuk ukuran model ini menggunakan 6e-4)
- Peluruhan LR: meningkat secara linier dari nol selama 2000 pembaruan pertama dan dianil ke 0 menggunakan jadwal kosinus
- Kami melatih selama 100 epoch pada minibatch yang terdiri dari 64 sampel acak, urutan 512 token yang berdekatan.
- Karena layernorm digunakan secara luas di seluruh model, inisialisasi bobot sederhana N(0, 0,02) sudah cukup
- kosakata bytepair coding (BPE) dengan 40.000 gabungan
- sisa, penyematan, dan penurunan perhatian dengan tingkat 0,1 untuk regularisasi.
- versi modifikasi dari regularisasi L2 yang diusulkan pada (37), dengan w = 0,01 pada semua bobot non bias atau gain
- Untuk fungsi aktivasi, kami menggunakan Gaussian Error Linear Unit (GELU).
- Kami menggunakan penyematan posisi yang dipelajari alih-alih versi sinusoidal yang diusulkan dalam karya aslinya
- Untuk menyempurnakan: Kami menambahkan dropout ke pengklasifikasi dengan tingkat 0,1. kecepatan pembelajaran 6,25e-5 dan ukuran batch 32,3 epoch. Kami menggunakan jadwal peluruhan kecepatan pembelajaran linier dengan pemanasan lebih dari 0,2% pelatihan. λ diatur ke 0,5.
- Model GPT-1 terdiri dari 12 lapisan dan d_model 768, ~117 juta parameter
Model Bahasa adalah Pembelajar Multitask Tanpa Pengawasan (GPT-2)
- LayerNorm dipindahkan ke input setiap sub-blok, mirip dengan jaringan sisa pra-aktivasi
- normalisasi lapisan tambahan ditambahkan setelah blok perhatian mandiri terakhir.
- inisialisasi yang dimodifikasi yang memperhitungkan akumulasi pada jalur sisa dengan kedalaman model digunakan. Kami menskalakan bobot lapisan sisa pada inisialisasi dengan faktor 1/√N dengan N adalah jumlah lapisan sisa. (aneh karena dalam kode rilis mereka saya hanya dapat menemukan penggunaan sederhana dari 0,02 lama... dalam rilis image-gpt mereka saya temukan itu digunakan untuk c_proj, itupun hanya untuk attn, bukan untuk mlp. ya. https: //github.com/openai/image-gpt/blob/master/src/model.py)
- kosakatanya diperluas menjadi 50.257
- tingkatkan ukuran konteks dari 512 menjadi 1024 token
- ukuran batch yang lebih besar yaitu 512 digunakan
- GPT-2 menggunakan 48 lapisan dan d_model 1600 (vs. 12 lapisan asli dan d_model 768). ~1,542B parameter
Model Bahasa adalah Pembelajar yang Sedikit Berkesempatan (GPT-3)
- GPT-3: 96 lapisan, 96 kepala, dengan d_model 12.288 (parameter 175B).
- Seperti GPT-1: 12 lapisan, 12 kepala, d_model 768 (125M)
- Kami menggunakan model dan arsitektur yang sama seperti GPT-2, termasuk inisialisasi yang dimodifikasi, pra-normalisasi, dan tokenisasi reversibel yang dijelaskan di dalamnya
- kami menggunakan pola perhatian jarang yang padat dan berpita lokal secara bergantian di lapisan transformator, mirip dengan Transformator Jarang
- kita selalu memiliki lapisan feedforward empat kali ukuran lapisan kemacetan, dff = 4 ∗ dmodel
- semua model menggunakan jendela konteks token nctx = 2048.
- Adam dengan β1 = 0,9, β2 = 0,95, dan eps = 10−8
- Semua model menggunakan penurunan bobot 0,1 untuk memberikan sedikit regularisasi. (CATATAN: GPT-1 menggunakan 0,01 Saya yakin, lihat di atas)
- klip norma global gradien pada 1,0
- Pemanasan LR linier pada 375 juta token pertama. Kemudian gunakan peluruhan kosinus untuk menurunkan kecepatan pembelajaran hingga 10% nilainya, lebih dari 260 miliar token.
- secara bertahap tingkatkan ukuran batch secara linier dari nilai kecil (32 ribu token) ke nilai penuh selama 4-12 miliar token pelatihan pertama, bergantung pada ukuran model.
- jendela konteks waktu penuh berukuran 2048 selalu digunakan, dengan pembatas token END OF DOCUMENT khusus
Lisensi
MIT