"GPT-NeoX 20B" diegimas gamyboje yra iššūkis, ir mes tai sužinojome sunkiai NLP debesyje... Šiame straipsnyje papasakosime apie keletą gudrybių, susijusių su "GPT-NeoX 20B" naudojimu, ir ypač apie tai, kaip elgtis su "DeepSpeed" gamyboje.

"GPT-NeoX 20B" yra didžiausias atvirojo kodo natūralios kalbos apdorojimo modelis.
Prieš 2 savaites jį išleido "EleutherAI". Ji buvo apmokyta pagal 20 mlrd. parametrų po 1 metus trukusio sunkaus ir iššūkių kupino darbo. Atrodo, kad vienas iš pagrindinių jų sunkumų buvo gebėjimas sukurti tinkamą lygiagrečiąją architektūrą, kad modelį būtų galima efektyviai apmokyti naudojant kelis GPU.
Ankstesnis jų modelis GPT-J buvo apmokytas naudojant "Google" TPU ir buvo sukurtas naudoti TPU. GPT-NeoX 20B vidinė architektūra iš esmės skiriasi ir yra pritaikyta naudoti GPU. Manoma, kad tai turėtų būti pirmasis iš serijos dar didesnių modelių (šiuo atveju siekiama pasivyti GPT-3).
"GPT-NeoX 20" yra teksto generavimo modelis, o tai reiškia, kad jis gali už jus parašyti tekstą ir iš tikrųjų labai tiksliai atlikti beveik visus natūralios kalbos apdorojimo atvejus: tinklaraščio įrašų generavimas, pokalbių robotai, teksto klasifikavimas, nuotaikų analizė, raktažodžių išskyrimas, kodo generavimas, subjektų išskyrimas, ketinimų klasifikavimas, atsakymai į klausimus ir dar daugiau...
Be abejo, daugelis tyrėjų ir įmonių pasinaudos šiuo naujuoju modeliu ir pasieks puikių rezultatų. Tačiau kyla iššūkis: kaip įdiegti GPT-NeoX 20B?
Pirmasis iššūkis, su kuriuo susiduriama bandant įdiegti "GPT-NeoX 20B" gamyboje, yra reikalinga pažangi techninė įranga.
GPT-J vis dar buvo galima įdiegti vartotojiškoje aparatinėje įrangoje, net jei ji buvo labai brangi. Pavyzdžiui, ją buvo galima įdiegti labai gerame centriniame procesoriuje (net jei rezultatas buvo skausmingai lėtas) arba pažangiame žaidimų grafiniame procesoriuje, pavyzdžiui, NVIDIA RTX 3090. Tačiau "GPT-NeoX 20B" yra tokia didelė, kad tai nebeįmanoma.
Iš esmės "GPT-NeoX" reikia bent 42 GB VRAM ir 40 GB vietos diske (taip, čia kalbame apie ploną fp16 versiją). Šiuos reikalavimus atitinka nedaug GPU. Pagrindiniai iš jų yra NVIDIA A100, A40 ir RTX A6000.
Šie GPU ne tik labai brangūs, bet ir sunkiai pasiekiami dėl pasaulinio puslaidininkių trūkumo.
Geriausias sprendimas šiuo atveju - naudoti kelių procesorių architektūrą.
Jei modelio negalite sutalpinti į vieną grafinį procesorių, galite pabandyti jį padalyti į kelis GPU.
Tai įdomi galimybė dėl 2 priežasčių. Pirma, horizontalus infrastruktūros mastelio keitimas dažnai yra pigesnis nei vertikalus. Tai galioja ir serveriams, ir GPU. Antra, lengviau gauti kelis mažus GPU, pavyzdžiui, "NVIDIA Tesla T4", nei didesnius, pavyzdžiui, "NVIDIA A40".
Deja, mašininio mokymosi modelio padalijimas keliems GPU yra techninis iššūkis. "Hugging Face" parengė puikų straipsnį apie modelių lygiagretumą ir pasirinkimo galimybes. Perskaitykite jį čia. Tačiau, laimei, "EleutherAI" sukūrė "GPT-NeoX 20B" taip, kad jį būtų galima lengvai lygiagretinti keliuose GPU, nesvarbu, ar tai būtų mokymas, ar išvada.
"GPT-NeoX" architektūra pagrįsta "Deepspeed". "Deepspeed" yra "Microsoft" sukurta sistema, kuri iš pradžių buvo skirta lygiagretinti mokymus tarp kelių GPU, tačiau vis dažniau naudojama ir išvadoms daryti. EleutherAI atliko visą sunkų darbą, todėl GPT-NeoX lygiagretinti taip paprasta, kaip pakeisti skaičių konfigūracijos faile.

Extract from the GPT-NeoX docs about parallelism
Tačiau "Deepspeed" įdiegti į gamybą, kad būtų galima daryti išvadas internetu per API, yra sudėtinga... "Deepspeed" nebuvo sukurta taip, kad ją būtų galima lengvai integruoti į žiniatinklio serverius. "NLP Cloud" tai sužinojome sunkiai, tačiau po sunkaus darbo galiausiai pavyko rasti veiksmingą būdą, kaip priversti "Deepspeed" ir "GPT-NeoX" veikti už mūsų API.
Tarkime, kad jums pavyko užtikrinti tinkamą aparatinę įrangą ir teisingai įdiegti "GPT-NeoX 20B" su "Deepspeed". Dabar reikėtų žinoti keletą įspėjimų.
Pirma, palyginti su GPT-J, parametrai (top k, top p ir temperatūra) neturi tokio paties poveikio modeliui. Taigi, jei pavyko rasti gerą GPT-J konfigūraciją, nelaikykite to savaime suprantamu dalyku: turėsite atlikti naujus bandymus su GPT-NeoX.
Galiausiai, net jei įvesties dydis gali būti iki 2048 žetonų, tam reikės daugiau atminties nei pirmiau minėti 42 GB...
GPT modeliai yra gana lėti, ir "GPT-NeoX 20B" nėra išimtis. Todėl, norėdami padidinti savo programos našumą, galbūt norėsite sukurti paketinį išvadų darymo sprendimą.
Kol kas "NLP Cloud" nesugalvojome tinkamo sprendimo.
GPT-NeoX kodas sukurtas taip, kad vienu metu būtų galima atlikti kelias išvadas per vieną užklausą. Tačiau mūsų bandymų metu atsako laikas didėjo tiesiškai, o tai tarsi paneigia paketinio išvadų darymo tikslą...
"GPT-NeoX 20B" tikrai sunku įdiegti gamyboje. Teksto generavimo kokybė yra nuostabi, tačiau tik nedaugelis turės galimybių iš tikrųjų įdiegti šį modelį.
Atrodo, kad norint naudoti šį modelį labiau nei bet kada anksčiau reikės naudotis debesijos paslaugomis, pvz., NLP Cloud.
Jei turite atsiliepimų apie šį straipsnį, nedvejodami susisiekite su mumis, būtų malonu išgirsti jūsų nuomonę apie tai!
Julien Salinas
NLP Cloud techninis direktorius