În ultimii ani s-au înregistrat o dezvoltare rapidă în domeniul procesării limbajului natural (NLP). În timp ce hardware-ul s-a îmbunătățit, cum ar fi cu cea mai recentă generație de acceleratoare de la NVIDIA și Amazon, practicienii avansati de învățare automată (ML) încă se confruntă în mod regulat cu probleme de scalare a modelelor lor mari de limbaj pe mai multe GPU-uri.
În această postare pe blog, rezumăm pe scurt creșterea modelelor NLP la scară mare și mică, în primul rând prin abstractizarea oferită de Hugging Face și cu backend-ul modular al Amazon SageMaker. În special, evidențiem lansarea a patru funcții suplimentare în cadrul bibliotecii paralele de modele SageMaker, care deblochează 175 de miliarde de parametri pentru pregătirea și reglarea fină a modelului NLP pentru clienți.
Am folosit această bibliotecă pe platforma de antrenament SageMaker și am obținut un debit de 32 de mostre pe secundă pe 120 ml.p4d.24xlarge instanțe și 175 miliarde de parametri. Anticipăm că, dacă am mări acest lucru la 240 de cazuri, modelul complet ar dura 25 de zile pentru a se antrena.
Pentru mai multe informații despre paralelismul modelului, consultați lucrarea Paralelismul modelelor Amazon SageMaker: un cadru general și flexibil pentru formarea modelelor mari.
Puteți vedea, de asemenea, notebook-ul GPT2 pe care l-am folosit pentru a genera aceste numere de performanță pe sistemul nostru GitHub depozit.
Pentru a afla mai multe despre cum să utilizați noile funcții din modelul SageMaker paralel, consultați Caracteristici extinse ale bibliotecii paralele de modele SageMaker pentru PyTorch, și Utilizați cu SageMaker Python SDK.
NLP pe Amazon SageMaker – Hugging Face și paralelism model
Dacă sunteți nou la Hugging Face și NLP, cel mai mare aspect pe care trebuie să-l știți este că aplicațiile care utilizează procesarea limbajului natural (NLP) încep să atingă performanțe la nivel uman. Acest lucru este în mare măsură condus de un mecanism de învățare, numit atenţie, care a dat naștere unui model de învățare profundă, numit transformator, care este mult mai scalabil decât metodele secvențiale anterioare de deep learning. Cel de acum faimos modelul BERT a fost dezvoltat pentru a valorifica transformatorul și a dezvoltat mai multe tactici utile NLP pe parcurs. Transformers și suita de modele, atât în interiorul, cât și în afara NLP, care au fost toate inspirate de BERT, sunt motorul principal din spatele rezultatelor căutării dvs. Google, în dumneavoastră Rezultate Google Translate, și o serie de noi startup-uri.
SageMaker și Hugging Face au colaborat pentru a face acest lucru mai ușor pentru clienți decât oricând. Am lansat containerele de învățare profundă (DLC) Hugging Face pentru ca tu să antrenezi și să găzduiești modele pre-antrenate direct de la Hugging Face. depozit de peste 26,000 de modele. Am lansat Compilatorul de instruire SageMaker pentru ca tu să accelerezi durata de rulare a buclelor tale de antrenament Hugging Face cu până la 50%. Ne-am integrat și noi SDK-ul emblematic Hugging Face Transformers cu bibliotecile noastre de instruire distribuite pentru a face extinderea modelelor dvs. NLP mai ușor decât oricând.
Pentru mai multe informații despre modelele Hugging Face Transformer de pe Amazon SageMaker, consultați Suport pentru modelele Hugging Face Transformer.
Caracteristici noi pentru instruirea pe scară largă a modelelor NLP cu biblioteca paralelă de modele SageMaker
La AWS re:Invent 2020, SageMaker a lansat biblioteci distribuite care oferă cea mai bună performanță pe cloud pentru antrenarea modelelor de viziune computerizată, cum ar fi Masca-RCNN și modele NLP ca T5-3B. Acest lucru este posibil prin primitive de comunicare îmbunătățite care sunt cu 20-40% mai rapide decât NCCL pe AWS și prin tehnici de distribuție a modelelor care permit modelelor de limbaj extrem de mari să se scaleze pe zeci până la sute până la mii de GPU.
Biblioteca de modele paralele (SMP) SageMaker v-a oferit întotdeauna posibilitatea de a prelua modelul dvs. NLP predefinit în PyTorch, fie acesta prin Hugging Face sau în altă parte, și de a partiționa acel model pe mai multe GPU-uri din clusterul dvs. Altfel spus, SMP împarte modelul în bucăți mai mici, astfel încât să nu întâmpinați erori de memorie lipsită de memorie (OOM). Ne face plăcere să adăugăm tehnici suplimentare de economisire a memoriei care sunt critice pentru modelele la scară mare, și anume:
- Paralelismul tensorului
- Partajarea stării optimizatorului
- Punct de control pentru activare
- Descărcare de activare
Puteți combina aceste patru caracteristici care pot fi combinate pentru a utiliza memoria mai eficient și pentru a antrena următoarea generație de modele NLP la scară extremă.
Antrenament distribuit și paralelism tensor
Pentru a înțelege paralelismul tensor, este util să știți că există multe tipuri de antrenament distribuit sau paralelism. Probabil că ești deja familiarizat cu cel mai comun tip, paralelism de date. Miezul paralelismului de date funcționează astfel: adăugați un nod suplimentar clusterului dvs., cum ar fi trecerea de la una la două instanțe ml.EC2 în estimatorul SageMaker. Apoi, utilizați un cadru paralel de date precum Horovod, PyTorch Distributed Data Parallel sau SageMaker Distributed. Acest lucru creează replici ale modelului dvs., una pentru fiecare accelerator și se ocupă de împărțirea datelor către fiecare nod, împreună cu aducerea tuturor rezultatelor împreună în timpul etapei de propagare înapoi a rețelei dvs. neuronale. Gândiți-vă la coborâre în gradient distribuit. Paralelismul datelor este, de asemenea, popular în cadrul serverelor; distribuiți date în toate GPU-urile și, ocazional, procesoarele, pe toate nodurile dvs. Următoarea diagramă ilustrează paralelismul datelor.
Paralelismul modelului este ușor diferită. În loc să facem copii ale aceluiași model, vă împărțim modelul în bucăți. Apoi gestionăm rularea acestuia, astfel încât datele tale încă mai circulă prin rețeaua neuronală exact în același mod din punct de vedere matematic, dar diferite părți ale modelului tău se află pe GPU-uri diferite. Dacă utilizați un ml.p3.8xlarge, aveți patru NVIDIA V100, așa că probabil ați dori să vă împărțiți modelul în 4 bucăți, o bucată per GPU. Dacă săriți până la două ml.p4d.24xlarge, înseamnă un total de 16 A100 în grupul dvs., așa că s-ar putea să vă rupeți modelul în 16 bucăți. Aceasta se mai numește uneori paralelismul conductelor. Acest lucru se datorează faptului că setul de straturi din rețea sunt partiționați pe GPU-uri și rulează într-o manieră pipeline pentru a maximiza utilizarea GPU-ului. Următoarea diagramă ilustrează paralelismul modelului.
Pentru a face paralelismul modelului să se întâmple la scară, avem nevoie de un al treilea tip de distribuție: paralelism tensor. Paralelismul tensorului aplică aceleași concepte la un pas mai departe - despărțim cele mai mari straturi ale rețelei tale neuronale și plasăm părți ale straturilor pe dispozitive diferite. Acest lucru este relevant atunci când lucrezi cu 175 de miliarde de parametri sau mai mult și încerci să încadrezi chiar și câteva înregistrări în RAM, împreună cu părți ale modelului tău, pentru a antrena acel transformator. Următoarea diagramă ilustrează paralelismul tensor.
Pentru a permite paralelism tensor, setați-l în opțiunile smp treci la estimatorul tău.
În codul precedent, pipeline_parallel_degree
descrie în câte segmente ar trebui să fie fragmentat modelul dvs., pe baza paralelismului conductei pe care l-am discutat mai sus. Un alt cuvânt pentru asta este scoruri.
Pentru a activa paralelismul tensor, setați tensor_parallel_degree
la nivelul dorit. Asigurați-vă că alegeți un număr egal sau mai mic decât numărul de GPU-uri per instanță, deci nu mai mare de 8 pentru mașinile ml.p4d.24xlarge. Pentru modificări suplimentare de script, consultați Rulați un job de antrenament paralel model distribuit SageMaker cu Tensor Parallelism.
Parametrul ddp se referă la date distribuite în paralel. De obicei, activați acest lucru dacă utilizați paralelism de date sau paralelism tensor, deoarece biblioteca de paralelism model se bazează pe DDP pentru aceste caracteristici.
Partajarea stării optimizatorului, descărcarea activării și punctele de control
Dacă aveți un model extrem de mare, aveți nevoie și de o stare de optimizare extrem de mare. Pregătirea optimizatorului pentru SMP este simplă: pur și simplu ridicați-l de pe disc din scriptul dvs. și încărcați-l în smp.DistributedOptimizer()
obiect.
Asigurați-vă că activați acest lucru la estimator prin setare shard_optimizer_state
la Adevărat în smp_options
utilizați pentru a configura SMP:
Similar cu paralelismul tensorului și conductei, SMP vă profilează modelul și dimensiunea lumii (numărul total de GPU-uri din toate nodurile de antrenament), pentru a găsi cele mai bune strategii de plasare.
În deep learning, ieșirile stratului intermediar sunt numite și activări, iar acestea trebuie stocate în timpul trecerii înainte. Acest lucru se datorează faptului că trebuie utilizate pentru calculul gradientului în trecerea înapoi. Într-un model mare, stocarea simultană a tuturor acestor activări în memorie poate crea blocaje semnificative ale memoriei. Pentru a rezolva acest blocaj, puteți utiliza punct de control de activare, a treia caracteristică nouă din biblioteca de paralelism model SageMaker. Punct de verificare pentru activare sau punct de control în gradient, este o tehnică de reducere a utilizării memoriei prin ștergerea activărilor anumitor straturi și recalcularea lor în timpul unei treceri înapoi. Acest lucru schimbă efectiv timp de calcul suplimentar pentru o utilizare redusă a memoriei.
În cele din urmă, descărcare de activare utilizează direct punctele de control de activare. Este o strategie de a păstra doar câteva activări de tensor pe RAM-ul GPU-ului în timpul antrenamentului de model. Mai exact, mutăm activările cu puncte de control în memoria CPU în timpul trecerii înainte și le încărcăm înapoi pe GPU pentru trecerea înapoi a unui anumit micro-lot.
Micro-loturi și strategii de plasare
Alte subiecte care provoacă uneori confuzie clienților sunt micro-loturile și strategiile de plasare. Ambii sunt hiperparametri pe care îi puteți furniza bibliotecii paralele de modele SageMaker. În mod specific, micro-loturile sunt relevante atunci când se implementează modele care se bazează pe paralelismul conductelor, cum ar fi acei cel puțin 30 de miliarde de parametri ca dimensiune sau mai mult.
Micro-loturile sunt subseturi de mini-loturi. Când modelul dvs. este în bucla de antrenament, definiți un anumit număr de înregistrări pentru a le prelua și a trece înainte și înapoi prin straturi - acest lucru se numește minilot, sau uneori doar a lot. O trecere completă prin setul de date se numește an epocă. Pentru a rula treceri înainte și înapoi cu paralelism pipeline, biblioteca paralelă model SageMaker fragmentează loturile în subseturi mai mici numite micro-loturi, care sunt rulate pe rând pentru a maximiza utilizarea GPU-ului. Setul rezultat, mult mai mic de exemple per GPU, se numește micro-lot. În exemplul nostru GPT-2, am adăugat o valoare implicită de 1 microbatch direct la scriptul de antrenament.
Pe măsură ce extindeți configurația de antrenament, vi se recomandă insistent să modificați dimensiunea lotului și dimensiunea micro-loturii în consecință. Acesta este singurul mod de a asigura o performanță bună: atunci când vă bazați pe paralelismul conductelor, trebuie să luați în considerare dimensiunea lotului și dimensiunile micro-loturi în funcție de dimensiunea globală a lumii.
Strategiile de plasare sunt modalitatea de a spune fizic lui SageMaker unde să plaseze partițiile modelului. Dacă utilizați atât modelul paralel, cât și datele paralele, setarea placement_strategy
la “cluster”
plasează replici ale modelului în ID-uri de dispozitiv (GPU) care sunt fizic aproape unul de celălalt. Cu toate acestea, dacă doriți cu adevărat să fiți mai prescriptiv cu privire la strategia dvs. de paralelism, o puteți descompune într-un singur șir cu diferite combinații de trei litere: D pentru paralelismul de date, P
indică paralelismul conductelor și T
pentru paralelismul tensor. Vă recomandăm, în general, să păstrați plasarea implicită a "cluster"
, deoarece acest lucru este cel mai potrivit pentru formarea modelelor la scară largă. Locația „cluster” corespunde cu „DPT
".
Pentru mai multe informații despre strategiile de plasare, consultați Strategie de plasare cu paralelism tensor.
Exemplu de caz de utilizare
Să ne imaginăm că ai un ml.p3.16xlarge în munca ta de antrenament. Asta iti da 8 NVIDIA V100 per nod. Amintiți-vă, de fiecare dată când adăugați o instanță suplimentară, aveți o suprasarcină suplimentară de lățime de bandă, așa că este întotdeauna mai bine să aveți mai mulți GP'Us pe un singur nod. În acest caz, vă este mai bine cu un ml.p3.16xlarge decât, de exemplu, cu doi ml.p3.8xlarges. Chiar dacă numărul de GPU-uri este același, suprasarcina suplimentară a lățimii de bandă a nodului suplimentar încetinește debitul.
Următoarea diagramă ilustrează paralelismul modelului în patru direcții, combinat cu paralelismul datelor în două sensuri. Aceasta înseamnă că aveți de fapt două replici ale modelului dvs. (gândiți-vă la date paralele), fiecare dintre ele împărțită pe patru GPU-uri (model paralel).
Dacă oricare dintre aceste partiții model este prea mare pentru a se potrivi pe un singur GPU, puteți adăuga un tip suplimentar de distribuție - paralelism tensor - pentru a o scuipa și a utiliza ambele dispozitive.
Concluzie
În această postare pe blog am discutat despre bibliotecile de instruire distribuite de SageMaker, concentrându-ne în special pe paralelismul modelului. Am împărtășit criteriile de performanță de la cel mai recent test al nostru, obținând 32 de mostre pe secundă în 120 ml.p4d.24xlarge instanțe și 175B parametri pe Amazon SageMaker. Anticipăm că, dacă am mări acest lucru la 240 de instanțe p4, am putea antrena un model de parametri 175B în 25 de zile.
Am discutat, de asemenea, despre cele mai noi caracteristici, activarea antrenamentului la scară largă, și anume paralelismul tensorului, fragmentarea stării optimizatorului, punctul de control al activării și descărcarea activării. Am împărtășit câteva sfaturi și trucuri pentru a activa acest lucru prin instruire pe Amazon SageMaker.
Încercați-l singur folosind același blocnotes care a generat numerele noastre, care este disponibil pe GitHub aici. De asemenea, puteți solicita mai multe GPU-uri pentru contul dvs. AWS prin intermediul solicitând o aprobare a limitei de servicii chiar aici.
Despre Autori
Emily Webber sa alăturat AWS imediat după lansarea SageMaker și de atunci a încercat să spună lumii despre asta! În afară de a construi noi experiențe ML pentru clienți, lui Emily îi place să mediteze și să studieze budismul tibetan.
Aditya Bindal este Senior Product Manager pentru AWS Deep Learning. El lucrează la produse care fac mai ușor pentru clienți să instruiască modele de învățare profundă pe AWS. În timpul liber, îi place să-și petreacă timpul cu fiica sa, să joace tenis, să citească ficțiune istorică și să călătorească.
Luis Quintela este Managerul dezvoltatorului de software pentru biblioteca paralelă de modele AWS SageMaker. În timpul liber, el poate fi găsit călărind în Harley-ul lui în zona golfului SF.
- Coinsmart. Cel mai bun schimb de Bitcoin și Crypto din Europa.
- Platoblockchain. Web3 Metaverse Intelligence. Cunoștințe amplificate. ACCES LIBER.
- CryptoHawk. Radar Altcoin. Încercare gratuită.
- Sursa: https://aws.amazon.com/blogs/machine-learning/train-175-billion-parameter-nlp-models-with-model-parallel-additions-and-hugging-face-on-amazon-sagemaker/
- "
- 000
- 100
- 2020
- 39
- Despre Noi
- accelerator
- Cont
- realizat
- peste
- Suplimentar
- adresa
- avansat
- TOATE
- deja
- Amazon
- O alta
- aplicatii
- ZONĂ
- disponibil
- AWS
- Golf
- CEL MAI BUN
- Cea mai mare
- Miliard
- Blog
- Clădire
- Provoca
- Schimbare
- Cloud
- cod
- combinaţii
- Comun
- Comunicare
- Configuraţie
- confuzie
- Containere
- Nucleu
- ar putea
- clienţii care
- de date
- dezvoltat
- Dezvoltator
- Dezvoltare
- dispozitiv
- Dispozitive
- diferit
- distribuite
- distribuire
- jos
- condus
- permițând
- mai ales
- exemplu
- experienţă
- Experiențe
- extremă
- Față
- mai repede
- Caracteristică
- DESCRIERE
- Ficţiune
- potrivi
- următor
- Înainte
- găsit
- Cadru
- Complet
- funcţie
- General
- genera
- GitHub
- merge
- bine
- Cautare Google
- GPU
- Piese metalice
- util
- Evidențiați
- istoric
- Cum
- Cum Pentru a
- HTTPS
- sute
- a crescut
- informații
- inspirat
- integrate
- probleme de
- IT
- Loc de munca
- alăturat
- a sari
- păstrare
- limbă
- mare
- Ultimele
- lansa
- AFLAȚI
- învăţare
- Nivel
- Bibliotecă
- încărca
- maşină
- masina de învățare
- Masini
- Efectuarea
- manager
- Memorie
- ML
- model
- Modele
- modular
- cele mai multe
- muta
- și anume
- Natural
- reţea
- Funcții noi
- noduri
- caiet
- numere
- Altele
- Hârtie
- parteneriat
- performanță
- bucată
- platformă
- Popular
- posibil
- primar
- Produs
- Produse
- Profiluri
- furniza
- RAM
- RE
- Citind
- recomanda
- înregistrări
- reduce
- REZULTATE
- Alerga
- funcţionare
- Said
- scalabil
- Scară
- scalare
- sdk
- Caută
- serviciu
- set
- instalare
- sharding
- comun
- semnificativ
- Mărimea
- So
- Software
- specific
- viteză
- Cheltuire
- împărţi
- Stat
- strategii
- Strategie
- livra
- tactică
- tehnici de
- test
- lumea
- mii
- Prin
- timp
- Sfaturi
- Sfaturi și trucuri
- împreună
- subiecte
- meserii
- Pregătire
- înţelege
- utilizare
- folosi
- viziune
- în
- de lucru
- fabrică
- lume
- ani