Par napja talaltam ra erre a nano meretu (par soros) GPT-2 implementaciora. Neki is alltam tesztelni!
1. kiserlet: a multkori RNN teszthez keszitett 400MB-os hup dataset. eloszor char alapon, majd sentencepiece tokenizalassal (8000-es vocab). mindket esetben nehany 1000 iteracio utan elszallt NaN-al. resume-olva az utolso jo checkpointbol ment meg egy kicsit, aztan megint megallt. ujrainditgattam eleg sokszor, de gyanusan gyenge volt a model minosege, igy elengedtem.
2. rakeresve a problemara, azt talaltam, hogy valoszinu tul keves az adat. ez igy nem LLM csak SLM :) nezzunk valami nagyobbat! osszecatoltam 3GB-nyi magyar szoveget, nagyobb hirportalok kb 20 eves termesebol (ez is tavaly nyari crawl), leszurve a min. 500 karakteres bekezdesekre. sajnos ez is elszallt ugyanugy...
3. tovabb kutakodva kiderult, hogy vszinu a float16 adattipus okozza a hibat. se a Tesla se a GTX1080 nem tamogatja a bfloat16 tipust, a sima float16 pedig konnyen tulcsordul, es ebbol lesz a NaN. van ra workaround, ki kell kapcsolni a fused AdamW optimalizaciot, igy valoban sokkal ritkabban szall el. de valoszinu amikor epp nem csordul tul, akkor se szamol tul jol, ezert nem fejlodott a model a tanitas soran...
4. hat valtsunk akkor float32-re, igy ugyan lefelezodik a batch size, a sebessegrol nem is beszelve, de legalabb stabil! es 1 nap tanitas utan mar egesz jol kezdi tanulni a nyelvet, kamuzni mar majdnem olyan jol tud, mint a nagyteso chatGPT, ime par pelda: