Rețeaua neuronală YaLM 100B în practică.

Программирование

La sfârșitul lunii iunie, Yandex
a lansat pentru public o rețea neuronală cu 100 de miliarde de parametri numită YaLM 100B . Este cea mai mare rețea neuronală de tip GPT din domeniul public. Povestește despre cum au predat, a arătat cele mai bune exemple și de ce este capabil neuronul. Dar este atât de bun în practică și de aplicabil acasă? Articolul tace despre acest lucru, în plus, nu este atât de ușor să îl rulați și să îl verificați, deoarece sunt necesari aproximativ 200 Gb de RAM GPU. Acest comentariu despre Habré
dezvăluie situația cel mai exact
.

Se presupune că, în Yandex, toți astfel de oameni inteligenți și nici măcar nu au postat o instrucțiune normală. Nu există api pentru un model mare, nu există un model mediu sau mic, gata făcut, pentru oameni obișnuiți (în Google Colab). Nu este dat niciun exemplu despre modul de configurare a modelului, despre cum se generează text. Doar că articolul indică câteva nuanțe pentru tocilari și atât. Este suficient să aruncați o privire mai atentă la modul în care banca a făcut-o cu litera „C” și să faceți același lucru. Am avut impresia că acest model este doar unul dintre experimentele eșuate care a fost păcat să-l arunc la gunoi, așa că a fost postat în Open Source pentru a arăta ce modele grozave creează Yandex și, în plus, este open source!

Există o mulțime de întrebări pe Internet cum să rulați yalm sau chiar să încercați online, dar nu există răspunsuri la aceasta. Am fost printre utilizatorii care au pus aceste întrebări. Și apucă-te să-ți dai seama. Din moment ce aveam nevoie de o modalitate de a genera texte pentru roboții financiari. Pentru ca aceștia să poată prezice nu numai valorile, ci și să le comenteze în text, pe baza rapoartelor financiare. În esență, va fi la fel cu ceea ce fac analiștii financiari, doar cu utilizarea inteligenței artificiale. Există două moduri de a rula yalm.
Închiriază un server în cloudcu 200+ Gb GPU RAM sau finalizați codul și rulați-l folosind deepspeed zero offload (atunci când GPU-ul procesează secvențial o parte a rețelei neuronale, iar restul este stocat în CPU RAM sau NVMe). Primul este foarte scump, aproximativ 2500 de ruble pe oră sau 1,7 milioane pe lună. A doua necunoscută, pentru că codul din depozit nu este furnizat, doar
indicii în problema depozitului, ceea ce nu este greu de făcut. Să începem simplu.

Instrucțiuni de lansare YaLM 100B

1. Închiriem 200 GB GPU RAM, de exemplu aici .

Rețeaua neuronală YaLM 100B în practică.

Aveți nevoie de cel puțin 200 GB de memorie video totală. 8×40 = 320 GB. Doar acesta se potrivește. Mai puțin de 200 este imposibil, se poate mai mult. Săgeata indică RAM-ul procesorului, nu ne uităm la ea. Ea poate fi oricine.

Indicăm un disc de aproximativ 300 GB, astfel încât cu un disc de rezervă și de preferință rapid, pentru că. zeci de gigaocteți de date vor fi transferați către și de la acesta.

Rețeaua neuronală YaLM 100B în practică.Când creați surse, selectați Ubuntu ML (Machine Learning). Acest lucru este obligatoriu pentru ca plăcile video să fie configurate și nu trebuie instalat nimic suplimentar.

După ce serverul este activat (poate dura 5-10 minute), conectați-vă la server prin ssh sau direct în consola web de pe pagina serverului și executați comanda.

nvidia-smi

Rezultatul ar trebui să fie un tabel cu plăci video, versiunea driverului și cuda. Cam asa.
Rețeaua neuronală YaLM 100B în practică.În antetul versiunii driverului și unde. În partea stângă sunt numerele dispozitivului, în centru este dimensiunea memoriei dispozitivului. Dacă nu aveți aceste informații, atunci ați colectat serverul din sursa greșită. Ubuntu ML (Machine Learnong) este necesar, așa cum este descris mai sus.

2. Clonează depozitul cu YaLM

sudo git clone https://github.com/yandex/YaLM-100B/ yalm
cd yalm

Clonează în folderul de acasă, astfel încât să nu mai fie nevoie să editezi configurația docker după aceea. Dacă ați clonat în altă parte, atunci
mergeți aici și adăugați calea unde a fost clonat.

3. Descărcați puncte de control (informații de bază pentru antrenamentul modelului)

sudo chmod +x ./download/download.sh
sudo bash ./download/download.sh

Acest lucru va dura aproximativ o oră. Pentru a nu pierde timpul în zadar, creăm o nouă conexiune ssh și în paralel începem să construim un container docker.

4. Instalați nvidiadocker 2

Dockerul normal nu este potrivit,
este necesar nvidia-docker2 .
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit

5. Construirea unui container pentru YaLM

cd yalm
sudo chmod +x ./docker/*
sudo bash ./docker/build.sh

Este și cam o oră.

Truc. Puteți descărca puncte de control, puteți instala docker și puteți construi un container pe un server ieftin cu o singură placă video. Va fi la fel în timp, așa că puteți economisi puțin. După asamblare pe un server ieftin, îl ștergem și creăm un server de luptă folosind un disc de pe un server ieftin. Atunci nu veți plăti în exces timpul pentru așteptarea adunării și pomparea punctelor de control.

6. Pregătiți conținutul

6.1 Puncte de control

După ce descărcarea punctelor de control s-a încheiat, trebuie să le introduceți în configurații. Există două moduri, corectarea parametrilor sau transferul punctelor de control. Peste tot este de așteptat ca punctele de control să fie în directorul principal al proiectului, respectiv, ceea ce este descărcat trebuie transferat din folderul de descărcare de mai sus. Fiind în folderul yalm executați

mv ./download/yalm100b_checkpoint ./

Sau modificați căile către fișierele din fișierele exemplu
https://github.com/yandex/YaLM-100B/blob/c91b7d7fe8dbf39c9e307d6d324446d0df136a23/examples/generate_interactive.sh#L8-L9

6.2 Plăci video

Verificăm dacă plăcile video sunt corect setate. Dacă aveți opt plăci video, atunci nu trebuie schimbat nimic. Dacă numărul este diferit, atunci schimbăm aceste linii
Rețeaua neuronală YaLM 100B în practică.În a doua linie, numerele dispozitivelor utilizate (le puteți privi în nvidia-smi, pe care l-ați lansat deja). În al patrulea, numărul lor.

7. Rulați containerul docker

Fiind în folderul yalm, executați comanda

sudo bash ./docker/run.sh

Dacă totul este în regulă, atunci veți fi dus într-un container în care trebuie să mergeți la folderul yalm din directorul dvs. de acasă.

cd ~/yalm

8. Rulați exemplul din YaLM 100B

Suntem gata să lansăm unul dintre exemple. Ele sunt descrise
aici .

chmod +x ./examples/generate_interactive.sh
./examples/generate_interactive.sh

Aveți răbdare, rămâne să așteptați încă 10-15 minute până se creează modelul GPT2 și se încarcă greutățile de la punctele de control.
Rețeaua neuronală YaLM 100B în practică.

Când construcția se termină, MegatronML vă va solicita să introduceți un context pentru a genera text. Fii atent când tastezi. În anumite circumstanțe, apare o eroare, programul se blochează și trebuie să porniți din nou asamblarea. Prin urmare, este mai bine să folosiți exemple care preiau text dintr-un fișier.

9. Rezultatele lucrării

Rețeaua neuronală YaLM 100B în practică.
Rețeaua neuronală YaLM 100B în practică.Arata interesant. Desigur, acestea sunt doar exemple bune. Am efectuat testul pe diferite mostre. După cum era de așteptat, cu cât contextul este mai bun, cu atât textul va fi mai semnificativ. Setul complet de generații experimentale poate fi vizualizat la link-urile:

Pentru preț, m-a costat aproximativ 9 mii de ruble pentru închirierea de servere de diferite capacități de la formare și de la pregătire la generare. O dezamăgire deosebită a fost că nu poți genera instantaneu totul. Este nevoie de foarte mult timp pentru a începe și textul nu se generează atât de repede pe cât ne-am dori, având în vedere costul serverului pe oră.
Rețeaua neuronală YaLM 100B în practică. 

Cum să rulezi YaLM fără 200Gb GPU RAM?

Trebuie să adăugați deepspeed zero offload la configurație. Pentru cei care știu despre ce vorbim, va fi foarte ușor să o facă. Pentru alții, aceasta nu este deloc o sarcină banală. Este important să știți că descărcarea poate fi fie în RAM CPU, fie în NVMe. Puteți uita de NVMe în acest moment, pentru că. o cantitate foarte mare de date este procesată și discul nu poate face față acesteia. CPU zero offload este mai real. Adevărat, pentru aceasta trebuie să aveți în stoc 200+ Gb CPU RAM, ceea ce nu este nici ieftin. Și un text va fi generat pentru aproximativ 20-40 de minute, deoarece nu a fost încă posibilă paralelizarea pe două plăci video. După cum puteți vedea în captura de ecran de mai jos, o singură placă video a fost implicată în generație și apoi doar pentru un sfert din memorie. Rămâne de văzut de ce nu sunt folosiți toți cei 24 GB,
Rețeaua neuronală YaLM 100B în practică.Ei bine, în concluzie, voi spune că este posibil să rulați chiar și pe un singur RTX 3070 TI. Dar nu are un sens special în asta, pentru că. NVMe nu vă va permite să procesați rapid 150 GB de date în schimb, care se află în anexa a 96 GB de RAM.
Rețeaua neuronală YaLM 100B în practică.

Rezumând

Desigur, voi încerca în continuare să găsesc căile optime de lansare. Dar până acum am ajuns la concluzia că YaLM 100b este prea scump/prea lent pentru sarcinile mele. Pentru aceiași bani, oamenii vor scrie mult mai mult și mult mai bine. Dar cred că e temporar, vom vedea. Dacă aveți nevoie de ajutor pentru lansarea, configurarea yalm sau doriți să vedeți rezultatele în exemplele dvs. de context, scrieți prin e-mail sau telegramă.

pskucherov
Rate author
Add a comment

  1. Olha

    Статья на Мега актуальную тему! Спасибо.

    Reply
  2. Данила

    Крутая статья! Спасибо автору!

    Reply
  3. Дмитрий

    СПАСИБО !!!
    три дня эту информацию искал
    нет подобного о RuGPT3 и Порфириче?

    Reply