Training a GPT-2 Model via Colab

Batu YILDIRIM
7 min readFeb 5, 2021

--

GPT-2 (Generative Pre-trained Transformer) is OpenAI’s language model which is a large transformer-based language model with 1.5 billion parameters, trained on a dataset of 8 million web pages. GPT-2 is trained with a simple objective: predict the next word, given all of the previous words within some text.

Let’s train a simple GPT-2 model via Colab.

First of all, GPT-2 works fine with Tensorflow 1.x version. So, we will work with Tensorflow 1.x.

In Colab, we can activate version 1.x via the code under below.

Next step is downloading gpt-2 library from pip.

!pip install gpt-2-simple

The next step is choosing GPT-2 Model. You can choose models from small to Large. These models are 117M, 124M, 345M, 355M, 774M and 1558M.

gpt2_simple.download_gpt2(model_name='124M') #If you download to a specific location#gpt2_simple.download_gpt2(model_name='124M',model_dir="/mydrive/models")

For setting Google Drive location, you can use the code under below.

# Set drive location as /mydrive
!ln -s /content/drive/MyDrive/ /mydrive
# See inside of /mdrive folder
!ls /mydrive

In my example, I am aiming to create a rap lyrics writer as Turkish. I choose an artist and get its all song lyrics via lyricsgenius. IF you want how to download all lyrics, there is the link.

In colab, giving authorization for reaching Google Drive folder is necessary. So;

from google.colab import filesgpt2_simple.mount_gdrive()

Start the session.

#Start Tensorflow Session
sess = gpt2_simple.start_tf_sess()

Run the gpt-2’s finetune for training.

gpt2_simple.finetune(sess, dataset="/mydrive/dataset.txt", steps=2000, model_name='124M',run_name="run1",sample_every=100, save_every=1000, print_every=10, restore_from='fresh')# This will take time. Ignore the warnings.
#You can choose steps (epoch) 1000.

Every 100 epoch, the finetune will give you an example text . This is my output in 1000 epochs. I will delete some of text examples because of being too much of characters.

======== SAMPLE 1 ======== means there were a text which created by GPT-2. But I delete them because of being long.

Loading checkpoint models/124M/model.ckpt
INFO:tensorflow:Restoring parameters from models/124M/model.ckpt
0%| | 0/1 [00:00<?, ?it/s]Loading dataset...100%|██████████| 1/1 [00:00<00:00, 1.99it/s]dataset has 80086 tokens
Training...
[10 | 27.24] loss=4.19 avg=4.19
[20 | 49.69] loss=3.58 avg=3.88
[30 | 72.52] loss=3.61 avg=3.79
[40 | 95.69] loss=3.41 avg=3.69
[50 | 118.90] loss=3.11 avg=3.57
[60 | 141.92] loss=3.07 avg=3.49
[70 | 164.98] loss=2.76 avg=3.38
[80 | 188.14] loss=2.98 avg=3.33
[90 | 211.31] loss=2.53 avg=3.24
[100 | 234.45] loss=2.62 avg=3.17
======== SAMPLE 1 ========


Killa baba ya da, ya da?
Çiçetin son gözleri olmazı, gelleri olmaz
Alem afine çok götüler kışırtır, yara olmazı
Kalmaz olmazı, gülüm köre gülüm yıllarca
Yavaşlamışmazı, hepsin nerenin, nerem dikizlişmiş
Bu da da, yerinde yerinde


[110 | 269.53] loss=2.70 avg=3.13
[120 | 292.70] loss=2.25 avg=3.05
[130 | 315.81] loss=2.26 avg=2.99
[140 | 338.91] loss=2.61 avg=2.96
[150 | 362.02] loss=1.94 avg=2.89
[160 | 385.14] loss=1.99 avg=2.83
[170 | 408.24] loss=1.69 avg=2.75
[180 | 431.37] loss=1.58 avg=2.68
[190 | 454.49] loss=1.47 avg=2.61
[200 | 477.58] loss=1.61 avg=2.56
======== SAMPLE 1 ========

Yıkık sokak, hedefi göz üstüne durur au rosır Karış dünyaya bir öter
Bol bir bir daha korkulu f.s.c.
Başka sokaklarda f.s.c.
Elerikleri delirikleri kaslan dersin dönüp azte
Ceilir yolları mertliğin fazula bitar mertliğin bitar mertli
Şeytitler seize sessizle dört, sen hiç paslaş pat pat patı
Kırılır göz üzerinde düşmek yok bahç bi' kastından bir şey olmasın bakış kaslamı bıktın
Güzeli göz üzerinde düşmek yok işte

[210 | 511.69] loss=1.37 avg=2.49
[220 | 534.79] loss=0.99 avg=2.42
[230 | 557.90] loss=1.24 avg=2.36
[240 | 581.01] loss=1.01 avg=2.30
[250 | 604.14] loss=0.77 avg=2.23
[260 | 627.26] loss=0.53 avg=2.16
[270 | 650.36] loss=0.49 avg=2.09
[280 | 673.48] loss=0.51 avg=2.02
[290 | 696.58] loss=0.43 avg=1.96
[300 | 719.67] loss=0.46 avg=1.90
======== SAMPLE 1 ========


Sokak oyun lakin oldu konuş uykudayken rengine
Ben kucudu hemi de kaltayrevolur misali bir bakı söng böng
Tepedeni yapkong bilelim biledenin peşinden erkenci lan
Tepedeni yapkreyenin anlamak binelim biledenin peşinden erkenci
Bu tefandır bazen ağır oldu laf ofar
Bilmediğin yerinde yatap sahtefandır duvarı
Viski tayfa oldu çevkis ortaya boşa duybundum çivki var
Sevkaran namet sikimande. Durmazt Kartiste. Cem göz kaldı zevkispen
Bir gün gelir veren zinc bir AK, sözün pskandan kahmadan bir o yarı

[310 | 753.16] loss=0.30 avg=1.84
[320 | 776.27] loss=0.41 avg=1.79
[330 | 799.40] loss=0.23 avg=1.73
[340 | 822.52] loss=0.31 avg=1.68
[350 | 845.66] loss=0.16 avg=1.63
[360 | 868.79] loss=0.21 avg=1.59
[370 | 891.90] loss=0.17 avg=1.54
[380 | 915.04] loss=0.09 avg=1.49
[390 | 938.13] loss=0.09 avg=1.45
[400 | 961.24] loss=0.08 avg=1.41
======== SAMPLE 1 ========

Hayde bre, her taşa wack!--Killa baba karşına ve siyah Hussein
Bir Deşande Killa, Maşahuş Italia
Die de müslennt mir yok bildiğin, Vert Sidi
Süpber 2008, Bemane rüzgarımı ezilir
Yıkılmamı çok bok sızın boksa koktan
Soğukta aldın, cityeler kötü güne hazır
Sana iti korkardır flogging canım
Sana iti korkardır gay rahattan
Sağdan kafeste işleri görüp bırakır
Burnt-offin mi jetrisip evim gördüm
Ve bunun uzaktan değil ki bazen al sana
Hepersin yerinde ateşi yok işte bağlısın bekler
Sıra sıra sokaklar hep yıldızlar
Ve kere zırlar doğru yorumazlar
Güzelliklerik her zaman eskiden

[410 | 995.09] loss=0.08 avg=1.37
[420 | 1018.24] loss=0.10 avg=1.33
[430 | 1041.39] loss=0.07 avg=1.30
[440 | 1064.52] loss=0.08 avg=1.26
[450 | 1087.64] loss=0.07 avg=1.23
[460 | 1110.71] loss=0.06 avg=1.20
[470 | 1133.79] loss=0.08 avg=1.17
[480 | 1156.88] loss=0.07 avg=1.14
[490 | 1179.95] loss=0.06 avg=1.11
[500 | 1203.02] loss=0.05 avg=1.09
======== SAMPLE 1 ========

[510 | 1237.34] loss=0.05 avg=1.06
[520 | 1260.49] loss=0.06 avg=1.04
[530 | 1283.61] loss=0.05 avg=1.01
[540 | 1306.68] loss=0.06 avg=0.99
[550 | 1329.72] loss=0.05 avg=0.97
[560 | 1352.78] loss=0.05 avg=0.95
[570 | 1375.86] loss=0.07 avg=0.93
[580 | 1398.93] loss=0.03 avg=0.91
[590 | 1422.03] loss=0.04 avg=0.89
[600 | 1445.14] loss=0.05 avg=0.87
======== SAMPLE 1 ========


[610 | 1478.90] loss=0.05 avg=0.85
[620 | 1502.04] loss=0.06 avg=0.83
[630 | 1525.18] loss=0.05 avg=0.82
[640 | 1548.30] loss=0.05 avg=0.80
[650 | 1571.40] loss=0.04 avg=0.78
[660 | 1594.49] loss=0.05 avg=0.77
[670 | 1617.59] loss=0.05 avg=0.75
[680 | 1640.67] loss=0.06 avg=0.74
[690 | 1663.78] loss=0.05 avg=0.73
[700 | 1686.87] loss=0.02 avg=0.71
======== SAMPLE 1 ========


[710 | 1720.65] loss=0.05 avg=0.70
[720 | 1743.78] loss=0.05 avg=0.69
[730 | 1766.94] loss=0.06 avg=0.67
[740 | 1790.05] loss=0.05 avg=0.66
[750 | 1813.14] loss=0.04 avg=0.65
[760 | 1836.24] loss=0.05 avg=0.64
[770 | 1859.33] loss=0.03 avg=0.63
[780 | 1882.42] loss=0.04 avg=0.62
[790 | 1905.52] loss=0.04 avg=0.61
[800 | 1928.59] loss=0.05 avg=0.60
======== SAMPLE 1 ========
Bazen oynarsan ölmekten
Şaşmaz bırak bana derler üstünde yürüyoruz geçil
Sus la geçtiçin biter
Sessizksin gözler
Pat pat patır, çatırdatır
Güzel güzler kaç pat patı
Sustasız yanlış, çatırdatır
Daldan kiviş, çatırdatır


[810 | 1962.76] loss=0.06 avg=0.59
[820 | 1985.88] loss=0.05 avg=0.58
[830 | 2009.02] loss=0.06 avg=0.57
[840 | 2032.11] loss=0.04 avg=0.56
[850 | 2055.17] loss=0.04 avg=0.55
[860 | 2078.24] loss=0.03 avg=0.54
[870 | 2101.33] loss=0.04 avg=0.53
[880 | 2124.40] loss=0.04 avg=0.52
[890 | 2147.49] loss=0.04 avg=0.52
[900 | 2170.57] loss=0.04 avg=0.51
======== SAMPLE 1 ========


[910 | 2204.38] loss=0.03 avg=0.50
[920 | 2227.48] loss=0.05 avg=0.49
[930 | 2250.57] loss=0.04 avg=0.48
[940 | 2273.69] loss=0.06 avg=0.48
[950 | 2296.77] loss=0.04 avg=0.47
[960 | 2319.90] loss=0.05 avg=0.46
[970 | 2343.03] loss=0.04 avg=0.46
[980 | 2366.17] loss=0.04 avg=0.45
[990 | 2389.30] loss=0.05 avg=0.44
[1000 | 2412.41] loss=0.05 avg=0.44
======== SAMPLE 1 ========
m komşunla panikli burada bile bile kapıda yapıdıda sordun
Yansın ya da ayrı güzel sabıla konuşmana sonda kaldısın arkası
Sen istersen ufukta sabıla oyna kulaklarına bakizi rowanlarında uyu
Bat karanlıkta rüzgarın eseri kalır giden yaslar
Sen uykudayken başlar hayat bazen ellerinle kırkiste kırık tanımda tanserket diye beş yere içeceksin
Killa dirilip öyle öle öle değilir köpeği ustalim
Olsun ne fayda fayda fayda ya
Bu işler böyle bakar fırla alır gider karışır ne
Hepgeirata yatırda kılırda kuş çöker orada yaparsın
Belli eder onu aşıların bir gün gece geçer gücürleri yapasın hayatın bunu
Kendi kendinden şansıer gelecektir yüzüne oturup aynı andanları sevgilen
Bekledim psikopat uçak zaman bitecem taktikturdun yarım başladı yakın.
Killa kurtulmak istersen takmam takmam
Wat karanlık vuruluruz machin wasim duymam barış barısından
Ekmek elden meydan o abartmış o zaman sonunda
Ab eser ve de kendini kendinden oturmuş artık



Beat Flow rap hızlı
Slow türkçe style uçar fly
Beatim bonnie bende
Slide aiight aiight aiight

Sırtını duvara daya ortam tehliğin aşık oldun
Put it this way, I'm on my way
Call your bluff and do what I gotta do
Kneel my while as much as I can
Get beat up as much as I can
Designated player as much as I can

Pardon, serenity, seamanlı malama malama
Yutarı ovuaniyor yalanlar
Coştururuz getup ja isteyen yaşamın çalıh
Emin ellerde evini bir çok bi'lam later this month
sen yundan için çim için nöbet tutan kanlayı madde
Olsun sonra krass öyle değil ki uçayım boşuna
Yakıştın bol kustu alır boşuna
Karma mantisın adına unayım şu anda yeni gibisin
Olsun sonra yızmış karışık karkına gerek yoksa sürek
Tam yere yapıştın da biraz hoting görünce ağır gözlerim
Bağırma sakın kula bu işer
Stres yara yaşıladım soru
Bir de coştu gider gider düştüm
Dem de coştu yerler
Sessiz kaldı geceler sessiz kaldı yerler
Altaktan mert alalımım olsun
Ortalığı stress sertt
Düşman çaktavaşiyonnı stressan derler
Duyu istesen de basacak duruyor
Bana bir daha karşıönük canım geldi mi bakarsın
Mert bana bana belki de yüksekler
[Verse 4: Khontkar,
Killa Hakan
]
Hrra, hedefi yolu da belli konu da belli

After training, save checkpoint and copy to drive.

gpt2_simple.copy_checkpoint_to_gdrive(run_name='killa')gpt2_simple.copy_file_to_gdrive()

Finally, you can generate text via:

gpt2_simple.generate(sess, run_name='run1', length=3000)
#Length is the number of characters in text.

Thanks for reading this article. I hope it will be helpful to you.

--

--

Batu YILDIRIM

Electric Electronic Engineer. Skilled in working on analog design, PCB design, C++ and Python also starts to learn IoT and machine learning applications.