Cum Latent Space a folosit biblioteca paralelismului modelului Amazon SageMaker pentru a împinge frontierele transformatoarelor la scară largă

Nodul sursă: 1204406

Acest blog este co-autor de Sarah Jane Hong CSO, Darryl Barnhart CTO și Ian Thompson CEO Latent Space și Prem Ranga de la AWS.

Spațiul latent este o reprezentare ascunsă a ideilor abstracte pe care modelele de învățare automată (ML) le învață. De exemplu, „câine”, „floare” sau „ușă” sunt concepte sau locații în spațiul latent. La Spațiu latent, lucrăm la un motor care vă permite să manipulați și să explorați acest spațiu atât cu solicitări de limbaj, cât și vizuale. Echipa Latent Space provine din două domenii care nu s-au suprapus de mult: grafica și procesarea limbajului natural (NLP). În mod tradițional, modalitățile imaginilor și textului au fost tratate separat, fiecare cu istoricul său de inginerie complexă, costisitoare și fragilă. Sarcinile NLP, cum ar fi înțelegerea documentelor sau răspunsul la întrebări, au avut de obicei puține în comun cu sarcinile de viziune, cum ar fi înțelegerea scenei sau redarea și, de obicei, folosim abordări și modele foarte diferite pentru fiecare sarcină. Dar acest lucru se schimbă rapid.

Această îmbinare a modalităților într-un singur spațiu latent partajat deblochează o nouă generație de aplicații creative și comerciale, de la jocuri până la înțelegerea documentelor. Dar deblocarea acestor noi aplicații într-un singur model deschide noi provocări de scalare, așa cum este subliniat în „Lecția amară” de Richard Sutton, și munca interesantă din ultimii ani privind legile de scalare. Pentru a face acest lucru posibil, Latent Space lucrează la cercetări de ultimă oră pentru a contopi aceste modalități într-un singur model, dar și pentru a scala și a face acest lucru în mod eficient. Aici intervine paralelismul model.

Amazon SageMakerPartiționarea automată unică a modelelor și abordarea eficientă a conductelor au făcut posibilă adoptarea paralelismului modelului cu un efort de inginerie redus și ne-am scalat instruirea de modele dincolo de 1 miliard de parametri (folosim p4d.24xlarge instanțe A100), care este o cerință importantă pentru noi. Mai mult, am observat că, atunci când ne antrenam cu un nod de 16, opt configurări de formare GPU cu biblioteca de paralelism model SageMaker, am înregistrat o îmbunătățire cu 38% a eficienței comparativ cu cursele noastre de antrenament anterioare.

Provocări cu antrenarea transformatoarelor la scară largă

La Latent Space, combinăm limbajul și viziunea în modele de transformatoare cu miliarde de parametri pentru a susține cazuri de utilizare „din distribuție” din imaginația unui utilizator sau care ar avea loc în lumea reală, dar nu și în datele noastre de instruire. Ne ocupăm de provocările inerente scalării la miliarde de parametri și nu numai în două moduri diferite:

Tehnicile de recuperare a informațiilor au fost mult timp o componentă cheie a motoarelor de căutare și a sarcinilor de asigurare a calității. Recent, s-au făcut progrese interesante combinând tehnicile IR clasice cu transformatoarele moderne, în special pentru sarcinile de răspuns la întrebări în care un model este instruit împreună cu un retriever neural care învață să recupereze documentele relevante pentru a ajuta la răspunsul la întrebări. Pentru o prezentare generală, consultați lucrările recente de la FAIR în Recuperare generație augmentată: eficientizarea creării de modele inteligente de procesare a limbajului natural și Fusion-in-Decoder, Google Brain's TĂMÂNUL, și a lui Nvidia Neural Retriever pentru răspuns la întrebări.

În timp ce tehnicile de recuperare ajută la costuri și eficiență, suntem încă incapabili să încadrăm modelul pe un singur GPU pentru cel mai mare model al nostru. Aceasta înseamnă că trebuie să folosim paralelismul modelului pentru a-l instrui. Cu toate acestea, datorită naturii arhitecturii noastre de recuperare, proiectarea împărțirii modelului nostru a fost o provocare din cauza interdependențelor dintre contextele recuperate între intrările de formare. Mai mult, chiar dacă stabilim modul în care ne-am împărțit modelul, introducerea paralelismului model a fost o sarcină de inginerie semnificativă pentru noi de a face manual pe parcursul ciclului nostru de viață de cercetare și dezvoltare.

Biblioteca de paralelism model SageMaker

Paralelismul modelului este procesul de împărțire a unui model între mai multe dispozitive sau noduri (cum ar fi instanțele echipate cu GPU) și crearea unei conducte eficiente pentru a antrena modelul pe aceste dispozitive pentru a maximiza utilizarea GPU-ului. bibliotecă de paralelism model în SageMaker face paralelismul modelului mai accesibil oferind divizarea automată a modelului, denumită și partiționare automată a modelului și planificarea sofisticată a rulării conductelor. Algoritmii de divizare a modelului se pot optimiza pentru viteză sau consum de memorie. Biblioteca folosește un algoritm de partiționare care echilibrează memoria, minimizează comunicarea între dispozitive și optimizează performanța.

Partiționare automată a modelului

Pentru cazul nostru de utilizare PyTorch, biblioteca paralelă model rulează intern o etapă de urmărire (în prima etapă de antrenament) care construiește graficul modelului și determină tensorul și formele parametrilor. Apoi construiește un copac, care constă din cuibărit nn.Module obiecte din model, precum și date suplimentare colectate din urmărire, cum ar fi cantitatea stocată nn.Parameters, și timpul de rulare pentru fiecare nn.Module.

Biblioteca apoi parcurge acest arbore din rădăcină și rulează un algoritm de partiționare care echilibrează sarcina de calcul și utilizarea memoriei și minimizează comunicarea între instanțe. Dacă mai multe nn.Module partajează același nn.Parameter, aceste module sunt plasate pe același dispozitiv pentru a evita menținerea mai multor versiuni ale aceluiași parametru. După luarea deciziei de partiționare, modulele și greutățile atribuite sunt încărcate pe dispozitivele lor.

Programarea rulării conductelor

O altă caracteristică esențială a bibliotecii paralele cu model distribuit SageMaker este rulează prin conducte, care determină ordinea în care se fac calculele și datele sunt procesate pe diferite dispozitive în timpul antrenamentului modelului. Pipelining se bazează pe împărțirea unui mini-lot în microbatch-uri, care sunt introduse în conducta de antrenament unul câte unul și urmează un program de rulare definit de timpul de rulare al bibliotecii.

Conducta de microbatch asigură faptul că toate GPU-urile sunt pe deplin utilizate, ceea ce ar trebui să construim noi înșine, dar cu biblioteca de paralelism model acest lucru se întâmplă bine în culise. În sfârșit, putem folosi Amazon FSx, ceea ce este important pentru a ne asigura că viteza noastră de citire este rapidă, având în vedere numărul de fișiere citite în timpul antrenamentului unui model multimodal cu recuperare.

Arhitectura de instruire

Următoarea diagramă reprezintă modul în care ne-am configurat arhitectura de antrenament. Obiectivele noastre principale au fost îmbunătățirea vitezei de antrenament și reducerea costurilor. Transformatoarele de imagine și de limbaj pe care le pregătim sunt extrem de complexe, cu un număr semnificativ mare de straturi și greutăți în interior, care rulează la miliarde de parametri, ceea ce le face să nu se poată încadra în memoria unui singur nod. Fiecare nod poartă un subset al modelului, prin care fluxurile de date și transformările sunt partajate și compilate. Configurăm 16 p4d.24xlarge instanțe fiecare cu opt GPU-uri folosind următoarea reprezentare arhitecturală:

Pe măsură ce ne extindem modelele, o tendință obișnuită este să avem totul stocat în greutățile rețelei. Cu toate acestea, în scopuri practice, dorim să ne mărim modelele pentru a învăța cum să căutăm contexte relevante pentru a ajuta la sarcina de redare. Acest lucru ne permite să menținem costurile de servire reduse fără a compromite calitatea imaginii. Folosim un model NLP mare bazat pe transformatoare și, așa cum am menționat anterior, am observat o creștere cu 38% a eficienței antrenamentului cu biblioteca de paralelism model SageMaker, după cum se arată în următoarele:

  • Avem nevoie de o reducere pentru fiecare calcul în cazul paralelismului la nivelul tensorului. Aceasta face O (log_2 n) pași paraleli. Adică n mașini care fac O (n) pași, pentru O (n log_2 n) operațiuni totale.
  • Pentru paralelismul conductei, avem nevoie de pași paraleli O (1) pentru trecerea datelor în conductă
  • Având în vedere 16 mașini cu opt GPU-uri, avem costul O (1) pentru paralelele conductelor și O (log_2 (8)) = costul O (3) pentru paralelele modelului în profunzime.
  • În acest caz, vedem că costul rețelei este redus la 1/3 prin trecerea la conducta paralelă cu ceea ce folosim cu paralelismul modelului SageMaker și costul general al antrenamentului se reduce la 1/2 + 1/2 * 1 / log_2 ) = 16 din costul inițial ducând la o îmbunătățire a eficienței corespunzătoare.

În general, atunci când necesitatea justifică instruirea distribuită (probleme cu dimensiunea modelului de scalare sau datele de instruire), putem urma un set de bune practici pentru a determina ce abordare funcționează cel mai bine.

Cele mai bune practici pentru instruirea distribuită

Pe baza experienței noastre, vă sugerăm să începeți cu o abordare paralelă a datelor distribuite. Paralelismul de date distribuite, cum ar fi SageMaker a distribuit biblioteca paralelă de date rezolvă majoritatea problemelor de rețea cu replici de model, deci ar trebui să încadrați modelele în cel mai mic număr de noduri, apoi să le reproduceți pentru a scala dimensiunea lotului, după cum este necesar.

Dacă rămâneți fără memorie în timpul antrenamentului, așa cum am făcut în acest scenariu, poate doriți să treceți la o abordare paralelă model. Cu toate acestea, luați în considerare aceste alternative înainte de a încerca modelul de formare paralelă:

  • Pe hardware-ul echipat cu NVIDIA Tensor Core, utilizați antrenament de precizie mixtă pentru a crea accelerarea și a reduce consumul de memorie.
  • Reduceți dimensiunea lotului (sau reduceți rezoluția imaginii sau lungimea secvenței NLP, dacă este posibil).

În plus, preferăm modelele de modele care nu au normalizarea lotului, așa cum este descris în Recunoaștere a imaginilor la scară largă, de înaltă performanță, fără normalizare. Dacă nu poate fi evitată, asigurați-vă că normalizarea lotului este sincronizată între dispozitive. Când utilizați instruire distribuită, lotul dvs. este împărțit pe GPU-uri, astfel încât statisticile precise ale lotului necesită sincronizare pe toate dispozitivele. Fără aceasta, normalizarea va avea o eroare crescută și astfel va afecta convergența.

Începeți cu modelul de formare paralelă atunci când aveți următoarele constrângeri:

  • Modelul dvs. nu se potrivește pe un singur dispozitiv
  • Datorită dimensiunii modelului dvs., vă confruntați cu limitări în alegerea unor dimensiuni mai mari de lot, cum ar fi dacă greutățile modelului dvs. ocupă cea mai mare parte a memoriei GPU și sunteți forțați să alegeți o dimensiune de lot mai mică, suboptimală.

Când optimizați performanța, efectuați următoarele:

  • Utilizați conducte pentru comunicații între noduri pentru a minimiza latența și pentru a crește randamentul
  • Păstrați conductele cât mai scurte posibil pentru a minimiza eventualele bule. Numărul de microbatch-uri ar trebui să fie reglat pentru a echilibra eficiența de calcul cu dimensiunea bulei și să fie cel puțin lungimea conductei. Dacă este necesar, puteți forma microbatch-uri la nivelul simbolului, așa cum este descris în TeraPipe: Token Level Pipeline Paralelism pentru instruirea modelelor de limbaj pe scară largă

Când optimizați pentru costuri, utilizați Instanțele Spot gestionate de SageMaker pentru instruire. Acest lucru poate optimiza costul modelelor de instruire cu până la 90% față de instanțele la cerere. SageMaker gestionează întreruperile Spot în numele dvs.

Alți factori de luat în considerare:

  • Într-un nod, când există o interconectare rapidă, este mai nuanțat. Dacă există o capacitate amplă de rețea intra-nod, reorganizarea datelor pentru un calcul mai optim poate prezenta un beneficiu.
  • Dacă activările sunt mult mai mari decât tensorii de greutate, poate ajuta și un optimizator fragmentat. Va rog, referiti-va la Zero pentru mai multe detalii.

Următorul tabel oferă câteva scenarii obișnuite de formare și cum le puteți configura pe AWS.

Scenariu Când se aplică? Soluţie
Scalarea de la un singur GPU la mai multe GPU-uri Când cantitatea de date de antrenament sau dimensiunea modelului este prea mare Treceți la o instanță multi-GPU, cum ar fi p3.16xlarge, care are opt GPU-uri, cu datele și procesarea împărțite pe cele opt GPU-uri și producând o viteză aproape liniară în timpul necesar pentru a vă antrena modelul.
Scalarea de la o singură instanță la mai multe instanțe Când nevoile de scalare se extind dincolo de modificarea dimensiunii instanței Scalați numărul de instanțe cu funcția de estimare a SageMaker Python SDK setând instanța_tip la p3.16xlarge și instanța_count la 2. În loc de cele opt GPU-uri pe un singur p3.16xlarge, aveți 16 GPU-uri pe două instanțe identice. Luați în considerare utilizarea SageMaker a distribuit biblioteca paralelă de date.
Selectarea unei abordări paralele model pentru instruire Când întâmpinați erori de memorie în timpul antrenamentului Treceți la o abordare paralelă model utilizând SageMaker distribuie model paralel de bibliotecă.
Performanța rețelei pentru comunicații între noduri Pentru instruirea distribuită cu mai multe instanțe (de exemplu, comunicarea între nodurile din cluster atunci când efectuați o operație AllReduce) Instanțele dvs. trebuie să se afle în aceeași regiune și în aceeași zonă de disponibilitate. Când utilizați SageMaker Python SDK, acest lucru este gestionat pentru dvs. Datele dvs. de instruire ar trebui să fie, de asemenea, în aceeași zonă de disponibilitate. Luați în considerare utilizarea SageMaker a distribuit biblioteca paralelă de date.
GPU optimizat, rețea și stocare Pentru nevoi de formare distribuite la scară largă Tipul de instanță p4d.24xlarge a fost conceput pentru stocare locală rapidă și un backplane de rețea rapid cu până la 400 de gigabiți și îl recomandăm cu tărie ca fiind cea mai performantă opțiune pentru instruirea distribuită.

Concluzie

Cu biblioteca paralelă de modele din SageMaker, obținem o mulțime de beneficii din cutie, cum ar fi partiționarea automată a modelelor și linii de conducte eficiente. În acest post, am împărtășit provocările noastre cu cazul nostru de utilizare ML, considerațiile noastre cu privire la diferite abordări de formare și modul în care am folosit biblioteca de paralelism model Amazon SageMaker pentru a accelera formarea noastră. Cel mai bine, acum poate dura doar câteva ore pentru a adopta cele mai bune practici pentru paralelismul modelului și îmbunătățirile de performanță descrise aici. Dacă această postare vă ajută sau vă inspiră să rezolvați o problemă, ne-ar plăcea să auzim despre ea! Vă rugăm să împărtășiți comentariile și feedback-ul dvs.

Referinte

Pentru mai multe informații, consultați următoarele:


Despre Autori

Prem Ranga este un arhitect de soluții pentru întreprinderi din Atlanta, GA. Face parte din comunitatea tehnică de învățare automată și iubește să lucreze cu clienții în călătoria lor ML și AI. Prem este pasionat de robotică, este cercetător autonom al vehiculelor și a construit, de asemenea, Beer Pours controlate de Alexa în Houston și în alte locații.

Sarah Jane Hong este co-fondator și șef șef la Latent Space. Fundalul ei se află la intersecția interacțiunii om-computer și a învățării automate. Anterior, ea a condus cercetarea NLP la Sonar (achiziționată de Marchex), care deservește companiile din spațiul de conversație AI. Ea este, de asemenea, un dezvoltator AR / VR apreciat, după ce a primit premii și burse de la Oculus, Mozilla Mixed Reality și Microsoft Hololens.

Darryl Barnhart este co-fondator și Chief Technology Officer la Latent Space. Este un dezvoltator experimentat cu experiență în accelerarea GPU, grafică pe computer, date la scară largă și învățare automată. Alte pasiuni includ matematica, dezvoltarea jocului și studiul informațiilor.

Ian Thompson este fondatorul și CEO la Latent Space. Ian este un inginer și cercetător inspirat de „posibilul adiacent” - tehnologii pe cale să aibă un impact mare asupra vieții noastre. În prezent, concentrat pe simplificarea și scalarea reprezentării multimodale de învățare pentru a contribui la construirea unei AI sigure și creative. Anterior, a ajutat la construirea de companii în grafică / realitate virtuală (AltspaceVR, achiziționată de Microsoft) și educație / NLP (HSE).

Sursa: https://aws.amazon.com/blogs/machine-learning/how-latent-space-used-the-amazon-sagemaker-model-parallelism-library-to-push-the- frontiers-of-large- transformatoare de scara /

Timestamp-ul:

Mai mult de la Blog de AWS Machine Learning