Activați un antrenament mai rapid cu biblioteca paralelă de date Amazon SageMaker | Amazon Web Services

Activați un antrenament mai rapid cu biblioteca paralelă de date Amazon SageMaker | Amazon Web Services

Instruirea modelelor de limbaj mari (LLM) a devenit din ce în ce mai populară în ultimul an, odată cu lansarea mai multor modele disponibile public, cum ar fi Llama2, Falcon și StarCoder. Clienții formează acum LLM-uri de dimensiuni fără precedent, variind de la 1 miliard la peste 175 de miliarde de parametri. Antrenarea acestor LLM-uri necesită resurse de calcul semnificative și timp, deoarece sute până la mii de unități de procesare grafică (GPU) trebuie folosite pentru a gestiona seturile de date vaste de antrenament și dimensiunile modelelor de astăzi. Un blocaj în instruirea distribuită poate fi comunicarea GPU gestionată de Biblioteca Colectivă de Comunicații NVIDIA (NCCL). În unele locuri de muncă de formare distribuite pe scară largă, se poate cheltui mai mult timp pentru comunicarea inter-GPU decât calculul real GPU. Pentru a atenua blocajul de comunicare GPU și a permite un antrenament mai rapid, Amazon SageMaker este încântat să anunțe o operațiune colectivă optimizată AllGather ca parte a bibliotecii paralele de date distribuite SageMaker (SMDDP). AllGather este cea mai utilizată operațiune colectivă în soluțiile populare de paralelism de date eficiente din punct de vedere al memoriei, cum ar fi DeepSpeed ​​Zero Redundancy Optimizer (ZeRO) și Paralelism de date complet fragmentat (FSDP), și este principalul contributor la suprasarcina de comunicare GPU. În această postare, arătăm o privire de ansamblu la nivel înalt asupra modului în care funcționează SMDDP, cum puteți activa SMDDP în scripturile de antrenament Amazon SageMaker și îmbunătățirile de performanță la care vă puteți aștepta.

Prezentare generală a soluțiilor

Tradiţional antrenament paralel de date implică replicarea unui întreg model pe mai multe GPU-uri, fiecare model antrenându-se pe diferite fragmente de date din setul de date. În timpul trecerii înapoi, gradienții sunt mediați între lucrătorii GPU, astfel încât fiecare replică de model să fie actualizată cu aceleași valori de gradient, în ciuda faptului că sunt antrenați cu fragmente de date diferite. Această tehnică permite antrenament mult mai rapid pe seturi de date vaste prin paralelizarea consumului de date de antrenament. Cu toate acestea, unele dintre modelele mari de astăzi (de exemplu, Llama2 70B) sunt mult prea mari pentru a se potrivi în întregime în memoria GPU, ceea ce face ca paralelismul tradițional de date să fie inutilizabil. Pentru a continua să culege beneficiile paralelismului de date, în timp ce depășim memoria GPU limitată, soluții paralele de date fragmentate, cum ar fi DeepSpeed ​​ZeRO, PyTorch FSDP și Amazon Biblioteca de paralelism model SageMaker au crescut în popularitate.

În paralelismul de date fragmentate, mai degrabă decât replicarea întregului model pe lucrătorii GPU, parametrii modelului, gradienții și stările de optimizare sunt împărțite și distribuite (adică, fragmentate) pe GPU-uri în munca de instruire. Pentru a efectua calcule de trecere înainte și înapoi, parametrii sunt adunați din fragmente de pe alți lucrători GPU pentru a forma unul sau mai multe straturi de model. După efectuarea calculului, aceste straturi sunt apoi eliberate din memorie pentru a permite colectarea următorului set de straturi. Rețineți că există variante de paralelism de date fragmentate în care sunt fragmentate doar stările și gradienții optimizatorului, dar nu și parametrii modelului. AllGather este încă folosit în acest tip de paralelism de date fragmentate, dar numai înainte de calculul trecerii înainte pentru a aduna parametrii de model care au fost actualizați de diferite fragmente de gradient sau de stare de optimizare de la alți lucrători GPU. Faceți referire la diferit Etape DeepSpeed ​​ZeRO si SHARD_GRAD_OP Strategia de fragmentare FSDP pentru mai multe detalii.

O operație colectivă AllGather este efectuată de fiecare dată când parametrii nu sunt fragmentați — NCCL oferă implementarea standard open-source a acestei rutine. După cum se arată în cele ce urmează, fiecare lucrător GPU implicat în AllGather începe cu un buffer de intrare și se termină cu toate tampoanele de intrare de la alți lucrători concatenate împreună. Când AllGather este utilizat în paralelismul de date sharded, buffer-urile de intrare conțin shard-urile parametrilor modelului, iar tampoanele mari de ieșire conțin unul sau mai multe straturi de model materializate din celelalte shard-uri.

Înainte și după operarea AllGather pe 4 GPU-uri

Deși NCCL este utilizat în mod obișnuit pentru AllGather în cadrul instruirii distribuite, implementarea sa de bază la nivel scăzut nu este adaptată infrastructurii de rețea a Amazon Elastic Compute Cloud (Amazon EC2), și astfel performanța sa poate încetini antrenamentul de la capăt la capăt. Biblioteca SMDDP este o bibliotecă de comunicare colectivă pentru GPU-urile NVIDIA care servește ca înlocuitor pentru NCCL și oferă performanțe mai bune pentru joburile de instruire distribuite cu PyTorch. Mai exact, SMDDP oferă o implementare optimizată a AllGather pentru tipuri de instanțe p4d/p4de.

Deoarece operațiunile colective precum AllGather blochează calculul trecerii înainte și înapoi, execuția mai rapidă a acestor operațiuni se traduce direct în timp de antrenament de la capăt la capăt mai scurt, fără efecte secundare asupra convergenței. Alte operațiuni colective care sunt utilizate mai rar în instruirea paralelă a datelor fragmentate sunt gestionate prin revenirea la NCCL.

walkthrough

AllGather optimizat pentru AWS

AllGather optimizat pentru AWS utilizează următoarele tehnici pentru a obține performanțe mai bune pe infrastructura AWS în comparație cu NCCL:

  1. Mutăm datele între instanțe prin Adaptor pentru țesături elastice (EFA) rețea cu un model de comunicare all-to-all. EFA este soluția de rețea AWS cu latență scăzută și debit mare, iar un model all-to-all pentru comunicarea în rețea între noduri este mai adaptat caracteristicilor infrastructurii de rețea EFA și AWS, necesitând mai puține sărituri de pachete în comparație cu inelul sau NCCL. model de comunicare arborescent.
  2. GDRCopy pentru a coordona traficul local de rețea NVLink și EFA. GDRCopy este o bibliotecă care oferă comunicații cu latență scăzută între procesele CPU și nucleele GPU CUDA. Cu această tehnologie, suntem capabili să canalizăm mișcarea datelor intra-nod și inter-nod.
  3. Utilizarea redusă a multiprocesoarelor de streaming GPU pentru a reda mai multă putere de calcul nucleelor ​​modelului. Instanțele AWS P4d/P4de sunt echipate cu GPU-uri NVIDIA A100, fiecare dintre ele având 108 multiprocesoare de streaming. În timp ce NCCL necesită până la 24 de multiprocesoare de streaming pentru a executa colective, SMDDP Collectives utilizează doar până la nouă multiprocesoare de streaming. Multiprocesoarele de streaming salvate pot fi preluate de nucleele de calcul model pentru o execuție mai rapidă.

Folosire

Colectivele SMDDP se integrează nativ cu PyTorch prin intermediul grup de procese abstractizare în torch.distributed modul. Un grup de procese definește interfețele pentru operațiuni colective comune, cum ar fi AllGather, ReduceScatter, AllReduce etc. Utilizatorii pot scrie cod distribuit generic și apoi pot alege baza backend, care oferă implementarea acestor operațiuni pe baza dispozitivului de calcul utilizat. Joburile de instruire CPU folosesc adesea gloo or mpi backend în timp ce GPU-urile NVIDIA utilizează nccl backend.

Biblioteca SMDDP intră în imagine prin înregistrarea ca backend personalizat în abstracția grupului de procese. Acest lucru se realizează prin instrucțiunea de import, care este afișată în următoarele fragmente de cod. Apoi, atunci când selectați backend-ul pentru munca dvs. de instruire distribuită bazată pe GPU, trebuie doar să înlocuiți nccl cu smddp. smddp backend-ul respectă aceeași semantică ca și nccl backend și acceptă aceleași scenarii de antrenament.

DeepSpeed

import smdistributed.dataparallel.torch.torch_smddp
deepspeed.init_distributed(dist_backend="smddp") # replacing "nccl"

FSDP

import smdistributed.dataparallel.torch.torch_smddp
dist.init_process_group(backend="smddp")  # replacing "nccl"

valori de referință

Am evaluat performanța AllGather de sine stătătoare în care operațiunea colectivă se desfășoară izolat, fără nicio pregătire pentru model. Mai jos este un exemplu de rezultat pentru 32 de instanțe p4d comparând NCCL și SMDDP AllGather. Axa X reprezintă dimensiunea de ieșire a AllGather, iar axa Y reprezintă rata de utilizare a rețelei a rețelei EFA de 4 Gbps a p400d. Cele 4 sub-grafice reprezintă modelele comune ale grupului de comunicare în care avem 1, 2, 4 și, respectiv, 8 ranguri per instanță p4d care participă la operațiunea AllGather.

Utilizarea rețelei SMDDP și NCCL AllGather pe 32 de noduri

Aceste microbenchmark-uri arată că SMDDP depășește NCCL cu două caracteristici cheie:

  1. Performanța maximă a SMDDP (utilizare a lățimii de bandă de aproximativ 90%) este mai mare decât cea a NCCL (utilizarea lățimii de bandă de aproximativ 80%) în toate configurațiile.
  2. SMDDP atinge performanța de vârf la dimensiuni mult mai mici ale tamponului decât NCCL. Acest lucru îmbunătățește în special vitezele de antrenament pentru modele mai mici sau atunci când utilizatorul setează o dimensiune mică a bufferului AllGather în DeepSpeed ​​(unde dimensiunea AllGather nu trebuie să fie egală cu dimensiunea stratului).

Model de repere de antrenament

În locurile de muncă de antrenament pe scară largă în care comunicarea GPU este un blocaj semnificativ, SMDDP poate îmbunătăți semnificativ vitezele de antrenament, măsurate de modelul TFLOPS/GPU.

Configuraţie Performanţă
Model/Instruire Grup Soluție de paralelism de date fragmentate Model TFLOPS/GPU cu NCCL Model TFLOPS/GPU cu SMDDP % accelerare
13B Lama2
Lungime secv.: 4096
Dimensiunea globală a lotului: 4M de jetoane
64 de noduri p4d.24xlarge (512 GPU-uri NVIDIA A100) PyTorch FSDP 97.89 121.85 24.40%
65B GPT-NeoX
Lungime secv.: 2048
Dimensiunea globală a lotului: 4M de jetoane
64 de noduri p4d.24xlarge (512 GPU-uri NVIDIA A100) DeepSpeed ​​ZeRO Stage 3* 99.23 108.66 9.50%

*Megatron-DeepSpeed ​​de la EleutherAI a fost folosit depozitul. Paralelismul tensorului a fost, de asemenea, activat cu un grad tensor-paralel de opt.

Notă: Modelul TFLOPS/GPU se bazează pe calculul de utilizare a modelului FLOPS definit în lucrare aici iar cifrele de referință din altă parte pot cita hardware-ul TFLOPS/GPU ca măsurătoare de performanță. Hardware TFLOPS/GPU poate fi aproximativ 4/3 x model TFLOPS/GPU.

Concluzie

În această postare, v-am arătat cum să accelerați semnificativ joburile de instruire paralelă a datelor fragmentate pe Amazon SageMaker cu doar două linii de modificare a codului. Formarea distribuită la scară largă devine din ce în ce mai omniprezentă odată cu apariția sau LLM-urile, dar cu această scară vin costuri mari. Prin reducerea blocajului de comunicare dintre GPU-uri, SMDDP vă ajută să vă antrenați mai rapid la scară și să economisiți resurse de calcul. Puteți găsi mai multe exemple SMDDP cu antrenament paralel de date fragmentate în Amazon SageMaker Exemple de depozit GitHub.


Despre Autori

Activați un antrenament mai rapid cu biblioteca paralelă de date Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Apoorv Gupta este inginer de dezvoltare software la AWS, concentrat pe construirea de sisteme optime de învățare profundă pentru infrastructura și hardware-ul AWS. El este interesat de calculul distribuit, sistemele de învățare profundă și acceleratoarele ML. În afara serviciului, lui Apoorv îi plac călătoriile, drumețiile și jocurile video.

Activați un antrenament mai rapid cu biblioteca paralelă de date Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Karan Dhiman este inginer de dezvoltare software la AWS, cu sediul în Toronto, Canada. Este foarte pasionat de spațiul de învățare automată și de crearea de soluții pentru accelerarea sarcinilor de lucru calculate distribuite.

Activați un antrenament mai rapid cu biblioteca paralelă de date Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Ruhan Prasad este inginer de dezvoltare software la AWS, care lucrează pentru a face formarea de deep learning distribuită mai rapidă, mai ieftină și mai ușor de utilizat pe SageMaker. În afara serviciului, lui Ruhan îi place să joace tenis, să călătorească și să gătească.

Activați un antrenament mai rapid cu biblioteca paralelă de date Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Zhaoqi Zhu este inginer senior de dezvoltare software la AWS, pasionat de sistemele distribuite și optimizările la nivel scăzut. Îi face plăcere să se uite la meciuri de fotbal în timp ce bea sifon (fără diete).

Timestamp-ul:

Mai mult de la Învățare automată AWS