Implementarea GPT-NeoX 20B în producție este o provocare și am învățat-o pe calea cea mai grea la NLP Cloud... În acest articol vă spunem mai multe despre câteva trucuri legate de utilizarea GPT-NeoX 20B și, în special, despre cum să vă descurcați cu DeepSpeed în producție.

GPT-NeoX 20B este cel mai mare model open-source de procesare a limbajului natural la momentul redactării acestui articol.
Acesta a fost lansat de EleutherAI în urmă cu 2 săptămâni. A fost antrenat pe 20 de miliarde de parametri, după un an de muncă grea și plină de provocări. Una dintre dificultățile principale pare să fi fost capacitatea de a configura o arhitectură paralelă adecvată, astfel încât modelul să poată fi antrenat eficient pe mai multe GPU-uri.
Modelul lor anterior, GPT-J, a fost antrenat pe Google TPU și a fost conceput pentru a fi utilizat pe TPU. Arhitectura internă a GPT-NeoX 20B este radical diferită și este concepută pentru a fi utilizată pe GPU-uri. Ideea este că acesta ar trebui să fie primul dintr-o serie de modele și mai mari (scopul aici este de a ajunge din urmă GPT-3).
GPT-NeoX 20 este un model de generare de text, ceea ce înseamnă că poate scrie text în locul dumneavoastră și poate realiza aproape orice caz de utilizare a procesării limbajului natural cu o acuratețe deosebită: generarea de postări pe blog, chatbots, clasificarea textului, analiza sentimentului, extragerea de cuvinte cheie, generarea de coduri, extragerea de entități, clasificarea intențiilor, răspunsuri la întrebări și multe altele...
Fără îndoială, mulți cercetători și companii vor profita de acest nou model și vor obține rezultate excelente. Dar există o provocare: cum să implementăm GPT-NeoX 20B?
Prima provocare cu care te confrunți atunci când încerci să implementezi GPT-NeoX 20B în producție este hardware-ul avansat pe care îl necesită.
Era încă posibil să se implementeze GPT-J pe hardware de consum, chiar dacă era foarte scump. De exemplu, puteai să îl implementezi pe un procesor foarte bun (chiar dacă rezultatul era dureros de lent) sau pe un GPU de jocuri avansat, cum ar fi NVIDIA RTX 3090. Dar GPT-NeoX 20B este atât de mare încât acest lucru nu mai este posibil.
Practic, GPT-NeoX necesită cel puțin 42 GB de VRAM și 40 GB de spațiu pe disc (și da, vorbim aici de versiunea slim fp16). Puține GPU-uri corespund acestor cerințe. Principalele sunt NVIDIA A100, A40 și RTX A6000.
Nu numai că aceste GPU-uri sunt foarte scumpe, dar este și greu să pui mâna pe unul dintre ele în zilele noastre din cauza lipsei globale de semiconductori.
Cea mai bună soluție în acest caz este să alegeți o arhitectură multi-GPU.
Dacă nu vă puteți încadra modelul într-un singur GPU, puteți încerca să îl împărțiți în mai multe GPU.
Este o opțiune interesantă din două motive. În primul rând, extinderea unei infrastructuri pe orizontală este adesea mai ieftină decât extinderea pe verticală. Acest lucru este valabil atât pentru servere, cât și pentru GPU. În al doilea rând, este mai ușor să pui mâna pe mai multe GPU mici, cum ar fi NVIDIA Tesla T4, decât pe GPU mai mari, cum ar fi NVIDIA A40.
Din păcate, împărțirea unui model de învățare automată în mai multe GPU-uri reprezintă o provocare tehnică. Hugging Face a realizat un articol excelent despre paralelismul modelului și despre alegerile pe care le aveți. Citește-l aici. Dar, din fericire, EleutherAI a proiectat GPT-NeoX 20B astfel încât să fie ușor de paralelizat pe mai multe GPU-uri, fie că este vorba de instruire sau de inferență.
Arhitectura GPT-NeoX se bazează pe Deepspeed. Deepspeed este un cadru de lucru de la Microsoft care a fost conceput inițial pentru a paraleliza antrenamentele între mai multe GPU-uri și este din ce în ce mai mult utilizat și pentru inferență. EleutherAI a făcut toată munca grea, astfel încât paralelizarea GPT-NeoX este la fel de simplă ca și schimbarea unui număr într-un fișier de configurare.

Extract from the GPT-NeoX docs about parallelism
Cu toate acestea, implementarea Deepspeed în producție pentru inferența online prin intermediul unui API este dificilă... Deepspeed nu a fost conceput pentru a fi integrat cu ușurință în serverele web. La NLP Cloud, am învățat acest lucru pe calea cea mai grea, dar, după o muncă grea, am reușit în cele din urmă să găsim o modalitate eficientă de a face ca Deepspeed și GPT-NeoX să funcționeze în spatele API-ului nostru.
Să presupunem că ați reușit să furnizați hardware-ul adecvat și să implementați corect GPT-NeoX 20B cu Deepspeed. Există acum câteva avertismente de care trebuie să țineți cont.
În primul rând, în comparație cu GPT-J, parametrii (top k, top p și temperatura) nu au aceleași efecte asupra modelului. Așadar, dacă ați reușit să găsiți o configurație bună pentru GPT-J, nu o luați ca pe ceva de la sine înțeles: va trebui să faceți noi teste cu GPT-NeoX.
În cele din urmă, chiar dacă dimensiunea de intrare poate ajunge până la 2048 de jetoane, va necesita mai multă memorie decât cei 42GB de bază menționați mai sus...
Modelele GPT sunt destul de lente, iar GPT-NeoX 20B nu face excepție. Prin urmare, pentru a îmbunătăți randamentul aplicației dvs., ar fi bine să lucrați la o soluție de inferență pe loturi.
Deocamdată nu am găsit o soluție bună pentru asta la NLP Cloud.
Codul GPT-NeoX este conceput astfel încât se pot efectua mai multe inferențe în același timp, în cadrul unei singure cereri. Dar, în testele noastre, timpul de răspuns a crescut liniar cu numărul de inferențe, ceea ce contrazice oarecum scopul inferențelor pe loturi...
GPT-NeoX 20B este cu siguranță greu de implementat în producție. Calitatea generării textului este uimitoare, dar puțini vor avea capacitatea de a instala efectiv acest model.
Mai mult ca oricând, se pare că soluția va fi să ne bazăm pe un serviciu cloud precum NLP Cloud pentru a utiliza acest model.
Dacă aveți comentarii cu privire la acest articol, vă rugăm să nu ezitați să ne contactați, va fi minunat să vă auzim părerea!
Julien Salinas
CTO la NLP Cloud