რას პროგნოზირებს ენის მოდელი
სტოქასტური გაგრძელების ძრავი
ენის მოდელი იღებს ტოკენების თანმიმდევრობას & მიანიჭებს სტოქასტურ განაწილებას იმ ტოკენზე, რომელიც მოდის შემდეგ. ჩაესვი the cat sat on the & ის გამოსცემს სტოქასტურობებს მთელ ლექსიკაზე: მაღალი მასა mat-ზე, floor-ზე, couch-ზე; დაბალი მასა xylophone-ზე, Tuesday-ზე.
ამ განაწილების სემპლირება, ტოკენის დამატება, & ხელახლა ჩასმა: ეს ციკლი გენერირებს ტექსტს ერთი ტოკენით ერთ ჯერზე. ავტორეგრესიული გენერაცია, სახელწოდება იმიტომ, რომ თითოეული ნაბიჯი რეგრესირებს საკუთარ წინა გამომავალზე.
სამი რიცხვი განსაზღვრავს ენობრივ მოდელს
ლექსიკის ზომა (V). რამდენი განსხვავებული ტოკენი შეუძლია მოდელს გამოუშვას. ANDREA-12M იყენებს 4,353 ტოკენს; ANDREA-120M იყენებს 8,449.
კონტექსტის ფანჯარა (T). რამდენი ტოკენი ეტევა ერთ forward pass-ში. ANDREA მოდელები იყენებენ T = 1,024.
პარამეტრების რაოდენობა (P). რამდენი შეხსენებული წონაა შიგნით. 12M, 120M, & 480M ასახელებს ოჯახს P-ით.
სამი წევრიანი ოჯახი
| ვარიანტი | d_model | თავები | ფენები | კონტექსტი | პარამეტრები |
|---|---|---|---|---|---|
| ANDREA-12M | 384 | 12 | 6 | 1024 | 12.8M |
| ANDREA-120M | 768 | 12 | 12 | 1024 | ~120M |
| ANDREA-480M | 1536 | 24 | 16 | 1024 | ~480M |
სამი მასშტაბირებადი პარამეტრი: d_model (ყოველი შიდა ვექტორის სიგანე), n_layer (გარდაქმნის ბლოკების ფენების სიღრმე), n_head (პარალელური ყურადღების პროექციები). ლექსიკა და კონტექსტი რჩება უცვლელი ოჯახის განმავლობაში.
ოჯახის ცხრილის წაკითხვა
რატომ არის მცირე მნიშვნელოვანი
შეზღუდვა როგორც განთავისუფლება
დიდი ენობრივი მოდელები, რომლებიც ასეულობით მილიარდ პარამეტრს შეიცავენ, საჭიროებენ ათასობით GPU-ს, პროპრიეტარულ მონაცემთა ნაკრებს და კორპორაციულ ბიუჯეტებს. მხოლოდ რამდენიმე ადამიანს შეუძლია ასეთი მოდელის გაწვრთნა. მხოლოდ რამდენიმე ადამიანს შეუძლია ასეთი მოდელის შეკეთება.
პატარა ენობრივი მოდელი ერთ GPU-ზე ამას 뒤집ავს. ნებისმიერს, ვინც 4090-ს (ან 3060-ს) ფლობს, შეუძლია ANDREA-ს ღია მონაცემებიდან გაამეოროს. გაწვრთნის რეცეპტი ორმაგ როლს თამაშობს მოდელის ბარათის სახით. ღია კოდი, ღია წონები, ღია მონაცემები; სრული პროვენიენსი 72 საათიანი გამოთვლის შემდეგ.
შეძლებლობა წინააღმდეგობა ხარისხისა
პატარა მოდელები ვერ იხსენებენ თავიანთი გაწვრთნის კორპუსს. ANDREA-12M, 12.8M პარამეტრით, არ გააჩნია შეძლებლობა ფაქტობრივი შინაარსის შესანახად; ის სწავლობს მორცულობის სტრუქტურას, ლექსიკის განაწილებას და პასუხის ფორმას. ANDREA-120M, 10× შეძლებლობით, სწავლობს ფაქტობრივ მოხსენებას, მრავალაბზანგიან თანმიმდევრულობას და დომენის სიგანეს (დამოწმებული გარე შეფასებით 9.5/10 ბიოლოგიისა და სიგნალური პროცესულის ნიმუშებზე).
ძირითადი შეტანა: შესაძლებლობები ჩამოყალიბებას უწესებს ზღვარს. კურიკულუმი განსაზღვრავს, მიეწვდება თუ არა ზღვარს. აქტივობები 14-23 მოიცავს კურიკულუმს. [TITLE decoder_only/]
ტრანსფორმერის სამი გემრიელი
ენკოდერი, დეკოდერი, ორივე
ორიგინალური ტრანსფორმერი (Vaswani et al., 2017) შეიცავდა ენკოდერს და დეკოდერს, რომლებიც ერთმანეთს შეუერთდნენ თარგმნისთვის. სამი არქიტექტურული ხაზი გამომდინარეობს ამ სტატიიდან:
მხოლოდ ენკოდერი (BERT-ის ხაზი). ორმხრივი ყურადღება, კაზუალური ნიღაბის გარეშე. ოპტიმიზებულია კლასიფიკაციისთვის, არა გენერაციისთვის. ტოკენი ხედავს როგორც თავის წარსულს, ასევე მომავალს ტრენინგის დროს.
ენკოდერ-დეკოდერი (T5, BART). ენკოდერი კითხულობს შეყვანას; დეკოდერი გენერირებს გამომავალს, ყურადღებას გამორთავს ენკოდერზე კროს-ყურადღებით. გამოიყენება თარგმნის, შეჯამებისთვის.
მხოლოდ დეკოდერი (GPT, ANDREA). კაუზალური მასკა: ყოველი ტოკენი ხედავს მხოლოდ თავის წარსულს. შეგეგება მომდევნო ტოკენის პროგნოზირებას. გენერაცია უფასოა; სწავლება და ინფერენსი იზიარებენ იგივე პირდაპირი გავლას.
რატომ იგებს მხოლოდ დეკოდერი ერთ GPU-ზე
სამი მიზეზი:
1. ერთი მიზანი. მომდევნო-ტოკენის პროგნოზი მუშაობს ნებისმიერ ტექსტზე. არ არის საჭირო გაწეული წყარო/სამიზნე.
2. სწავლებისა და გენერაციის სიმეტრია. იგივე პირდაპირი გავლა, გენერაციისთვის სპეციალური ლოგიკა არაა საჭირო.
3. მეხსიერების სიმარტივე. ჯვარედინი ყურება არაა; ერთი ფენების სტეკი; ერთი აქტივაციების ნაკადი.
ANDREA-მ მემკვიდრეობდა decoder-only არჩევანს microGPT-დან, რომელმაც მემკვიდრეობდა nanoGPT-დან, რომელმაც მემკვიდრეობდა GPT-2-დან. ხაზი სტანდარტული რჩება; რაც იცვლება, არის ტოკენიზაცია, სწავლების ინფრასტრუქტურა და კურიკულუმი.
რატომ იყენებს ANDREA Decoder-Only ტრანსფორმერს
რა ჯდება 24 გბ-ში
ბაიტი პარამეტრზე
RTX 4090-ს აქვს 24 გბ VRAM. ANDREA-12M-ის სწავლება გამოიყენა 1.4 გბ. ANDREA-120M-მა გაცილებით მეტი გამოიყენა. განსხვავება მარტივი აღრიცხვის ვარჯიშშია: ყოველი პარამეტრი მრავალჯერ გვხვდება მეხსიერებაში სწავლების დროს.
ყოველი პარამეტრისთვის სწავლება ინახავს:
- წონას თავად (1× წონა)
- Adam პირველი მომენტი (m): იგივე ფორმა, როგორც წონა (1× წონა)
- Adam მეორე მომენტი (v): იგივე ფორმა, როგორც წონა (1× წონა)
- გრადიენტები: იგივე ფორმა, როგორც წონა (1× წონა)
- აქტივაციები და დროებითი ცვლადები: ~2-4× წონა (ირჩევა ბატჩისა და კონტექსტის მიხედვით)
სულ: ~6-8× წონის რაოდენობა, ბაიტებში განისაზღვრება სიზუსტით.
სიზუსტე ყველაფერს მამრავლებს
| სიზუსტე | ბაიტი/პარამეტრი | სულ 120M წონისთვის | შენიშვნები |
|---|---|---|---|
| FP32 | 4 | 480 მბ | ბაზისური; უსაფრთხოest, ყველაზე ნელი |
| FP16 | 2 | 240 მბ | cuBLAS, ნახევარი მეხსიერება |
| FP8 E4M3 | 1 | 120 მბ | Tensor cores, NaN რისკი |
გაამრავლეთ 6-8×-ით სრული ტრენინგის ფუტპრინტისთვის. ANDREA-120M ტრენინგდება კომფორტულად FP16-ში (~2 გბ წონებისთვის + ოპტიმიზატორი + გრადიენტები); FP8 E4M3 ორჯერ ამცირებს ტრენინგის დროს RTX 4090 tensor cores-ზე.
აქტივობა 13 (grow_a_language_model_precision) დეტალურად განიხილავს FP სიზუსტის კომპრომისებს.
ANDREA-120M-ის ოპტიმიზატორის მდგომარეობის ზომის განსაზღვრა
ხარისხობრივი ოცა აქტივობა
ორი ნახევარი
ეს კურსი სუფთად იყოფა. პირველი ნახევარი მოიცავს იმას, რასაც microGPT ასწავლიდა სფეროს: ტრანსფორმერი, რომელიც მუშაობს ერთ GPU-ზე. მეორე ნახევარი მოიცავს ANDREA-ს ნამდვილ წვლილს: კურიკულუმს, რომელიც სწავლობს.
ნახევარი 1: ტრანსფორმერი ერთ GPU-ზე (აქტივობები 2-13)
| # | აქტივობა | რიტმი |
|---|---|---|
| 2 | ჰარისის მორფემის ტოკენიზატორი | დისტრიბუციული სეგმენტაცია, 256+N+1 ლექსიკა |
| 3 | ტოკენიზატორ-დიეტის შესაბამისობა | გაჯერების წერტილი, რატომ 12M დაკარგა 63.6% |
| 4 | ემბედინგები & პოზიცია | შეხსენებული ტოკენი + პოზიციის ძებნა |
| 5 | მასშტაბირებული ზედაპირის პროდუქტის ყურადღება | Q·Kᵀ/√d, კავზალური ნიღაბი, softmax |
| 6 | მრავალჰედიანი ყურადღება | ჰედის გაყოფა, პარალელური პროექციები |
| 7 | ტრანსფორმერის ბლოკი | MLP, რეზიდუალები, ფენის ნორმა |
| 8 | კროს-ენტროპია & პერპლექსია | ლოგ-სავარაუდოობა, SMMA ზარალი |
| 9 | ბექპროპი კასტომ CUDA-ში | ჯაჭვის წესი microgpt_cuda.cu-ზე მთელს |
| 10 | AdamW | დეკუპლირებული წონის დეკრემენტი; რატომ მოკვდა ვანილის ადამი |
| 11 | LR warmup + cosine decay | 2000-ნაბიჯიანი რამპი; რატომ ანადგურებს მყისიერი პიკი 120M-ს |
| 12 | გრადიენტის კლიპინგი | გლობალური L2 ნორმა; 3 CUDA კერნელი |
| 13 | FP32 / FP16 / FP8 E4M3 | სიზუსტის კომპრომისები; ტენსორის კორები |
ნახევარი 2: კურიკულუმი რომელიც სწავლობს (აქტივობები 14-24)
| # | აქტივობა | ბიტი |
|---|---|---|
| 14 | მრავალხელსული ბანდიტები | UCB1, შexploration vs exploitation |
| 15 | ფაზებზე დაფუძნებული კამათლის კონტროლი | 7/14/21/28/42 ფაზები, 1d3/1d4 კამათლები |
| 16 | ჯილდოს მიწერა & EMA | წყაროს მიხედვითი ზარალის EMA, 1000× მასშტაბირება |
| 17 | წყაროს ფენილი & ეპოქის სჯალი | 1/(1+epochs) ხელს უშლის მემორიზაციას |
| 18 | დაფარვის ბონუსი | დოკუმენტის დონის თვალყური, 1.3× სუნთქვა |
| 19 | კურიკულუმის გათბობა | 7 ჩატი/პროზის წყარო პირველ 20K ნაბიჯზე |
| 20 | ფილტრაცია ფორმით, არა სიმბოლოებით | has_system_prompt_shape() |
| 21 | კოჰერენტობით შეწყვეტა ადრეულად | bigram/trigram/word/char ავტო-შეჩერება |
| 22 | შენახვა, გაგრძელება, სიგნალები | ფორმატი, SIGTERM/SIGUSR1, loss.json უწყვეტობა |
| 23 | ნიმუშის აუდიტი & გარე შეფასება | გაშვების წაკითხვა, 9.5/10 ტერიტორია |
| 24 | მიკროGPT-დან ANDREA-120M-მდე | v1 ჩამონგრევა, v2 შეკეთება, v2.5 პაჩი, v3 გაპრიალება |
პლუს თანაგმირი: geometry_of_andrea ხედავს ყოველ ფენას როგორც გეომეტრიას (embedding სივრცე, attention როგორც პროექცია, loss ზედაპირი, bandit როგორც სიარული დისკრეტულ სიმპლექსზე).
შეხსენებული თანმიმდევრობა
აქტივობები 2-13 აგებს მუშაობს ტრანსფორმერს. გადადით მეორე ნახევარზე, თუ ადრე ხართ ვარჯიშობდით ტრანსფორმერებზე; დაბრუნდით, როდესაც კურიოზიტეტი გააღვიძებს.
თითოეული აქტივობა შესაძლოა დამოუკიდებლად მუშაობს. მათემატიკური მითითებები ადრეულ აქტივობებს მოიხსენიებს სახელით (იხ. აქტივობა 5: მასშტაბირებული ზედაპირული პროდუქტი). კოდის მითითებები მიუთითებს microgpt/microgpt_cuda.cu-ზე და microgpt/training_proxy.py-ზე ~/git/uncloseai-cli/-ში.