Evoluțiile recente ale învățării profunde au condus la modele din ce în ce mai mari, cum ar fi GPT-3, BLOOM și OPT, dintre care unele depășesc deja 100 de miliarde de parametri. Deși modelele mai mari tind să fie mai puternice, antrenarea unor astfel de modele necesită resurse de calcul semnificative. Chiar și cu utilizarea bibliotecilor de instruire distribuite avansate, cum ar fi FSDP și DeepSpeed, este obișnuit ca joburile de formare să necesite sute de dispozitive de accelerare timp de câteva săptămâni sau luni simultan.
La sfârșitul anului 2022, AWS a anunțat disponibilitatea generală a Instanțele Amazon EC2 Trn1 powered by AWS Trainium— un accelerator de învățare automată (ML) conceput special, optimizat pentru a oferi o platformă de înaltă performanță, rentabilă și masiv scalabilă pentru formarea modelelor de învățare profundă în cloud. Instanțele Trn1 sunt disponibile într-un număr de dimensiuni (vezi tabelul următor), cu până la 16 acceleratoare Trainium per instanță.
Dimensiunea instanței | Acceleratoare Trainium | Memoria acceleratorului (GB) | vCPU-uri | Memoria de instanță (GiB) | Lățimea de bandă a rețelei (Gbps) |
trn1.2xlarge | 1 | 32 | 8 | 32 | Până la 12.5 |
trn1.32xlarge | 16 | 512 | 128 | 512 | 800 |
trn1n.32xlarge (în curând) | 16 | 512 | 128 | 512 | 1600 |
Instanțele Trn1 pot fi fie implementate ca instanțe de sine stătătoare pentru joburi de formare mai mici, fie în ultraclustere extrem de scalabile care acceptă instruirea distribuită pe zeci de mii de acceleratoare Trainium. Toate instanțele Trn1 acceptă configurația autonomă, în timp ce ultraclusterele Trn1 necesită instanțe trn1.32xlarge sau trn1n.32xlarge. Într-un ultracluster, mai multe instanțe Trn1 sunt amplasate într-o anumită zonă de disponibilitate AWS și sunt conectate cu o rețea Elastic Fabric Adapter (EFA) de mare viteză, cu latență redusă, care oferă 800 Gbps de lățime de bandă a rețelei neblocante per instanță pentru operațiuni de calcul colective . Tipul de instanță trn1n.32xlarge, lansat la începutul lui 2023, va crește această lățime de bandă la 1600 Gbps per instanță.
Mulți clienți de întreprindere aleg să-și implementeze sarcinile de lucru de deep learning folosind Kubernetes — standardul de facto pentru orchestrarea containerelor în cloud. Clienții AWS implementează adesea aceste sarcini de lucru folosind Serviciul Amazon Elastic Kubernetes (Amazon EKS). Amazon EKS este un serviciu Kubernetes gestionat care simplifică crearea, configurarea, ciclul de viață și monitorizarea clusterelor Kubernetes, oferind în același timp flexibilitatea deplină a Kubernetes în amonte.
Astăzi, suntem încântați să anunțăm asistența oficială pentru joburile de instruire distribuite folosind instanțele Amazon EKS și EC2 Trn1. Cu acest anunț, acum puteți rula cu ușurință joburi de formare în containere pe scară largă în Amazon EKS, profitând în același timp de prețul-performanță, scalabilitate și ușurință de utilizare oferite de instanțe Trn1.
Împreună cu acest anunț, publicăm și un tutorial detaliat care vă ghidează prin pașii necesari pentru a rula o lucrare de instruire distribuită cu mai multe instanțe (pre-training BERT faza 1) utilizând instanțele Amazon EKS și Trn1. În această postare, veți afla despre arhitectura soluției și veți revizui câțiva pași cheie din tutorial. Consultați depozitul oficial de tutoriale pentru fluxul de lucru complet de la capăt la capăt.
Pentru a urma, o familiaritate largă cu serviciile de bază AWS, cum ar fi Cloud Elastic de calcul Amazon (Amazon EC2) și Amazon EKS sunt implicite, iar familiaritatea de bază cu deep learning și PyTorch ar fi de ajutor.
Arhitectura soluțiilor
Următoarea diagramă ilustrează arhitectura soluției.
Soluția constă din următoarele componente principale:
- Un cluster EKS
- Un grup de noduri EKS format din instanțe trn1.32xlarge
- AWS Neuron SDK
- Pluginuri EKS pentru Neuron și EFA
- An Registrul Amazon de containere elastice (Amazon ECR) Rrepository
- O imagine a containerului de antrenament
- An Amazon FSx pentru Luster Sistemul de fișiere
- Un programator de loturi Volcano și un server etcd
- Lansatorul de joburi universal TorchX
- Modulul TorchX DDP pentru Trainium
În centrul soluției se află un cluster EKS care vă oferă funcționalitatea de bază de gestionare Kubernetes prin intermediul unui punct final al serviciului EKS. Unul dintre beneficiile Amazon EKS este că serviciul monitorizează și scala în mod activ planul de control în funcție de încărcare, ceea ce asigură performanțe ridicate pentru sarcini mari de lucru, cum ar fi instruirea distribuită. În interiorul clusterului EKS se află un grup de noduri format din două sau mai multe instanțe bazate pe Trainium trn1.32xlarge care locuiesc în aceeași zonă de disponibilitate.
Neuron SDK este stiva de software care oferă driverul, compilatorul, timpul de execuție, integrarea cadrului (de exemplu, PyTorch Neuron) și instrumentele de utilizator care vă permit să accesați beneficiile acceleratoarelor Trainium. Driverul de dispozitiv Neuron rulează direct pe nodurile EKS (instanțe Trn1) și oferă acces la cipurile Trainium din interiorul containerelor de antrenament care sunt lansate pe noduri. Pluginurile Neuron și EFA sunt instalate în clusterul EKS pentru a oferi acces la cipurile Trainium și la dispozitivele de rețea EFA necesare pentru antrenamentul distribuit.
Un depozit ECR este utilizat pentru a stoca imaginile containerului de antrenament. Aceste imagini conțin SDK-ul Neuron (excluzând driverul Neuron, care rulează direct pe instanțele Trn1), scriptul de antrenament PyTorch și dependențele necesare. Când o lucrare de instruire este lansată pe clusterul EKS, imaginile containerului sunt mai întâi extrase din Amazon ECR pe nodurile EKS, iar containerele de lucru PyTorch sunt apoi instanțiate din imagini.
Spațiul de stocare partajat este furnizat folosind un sistem de fișiere FSx for Luster de înaltă performanță care există în aceeași zonă de disponibilitate ca și instanțele trn1.32xlarge. Crearea și atașarea sistemului de fișiere FSx pentru Luster la clusterul EKS este mediată de Driver Amazon FSx pentru Luster CSI. În această soluție, stocarea partajată este utilizată pentru a stoca setul de date de antrenament și orice jurnal sau artefacte create în timpul procesului de antrenament.
Soluția utilizează Lansatorul de joburi universal TorchX pentru a lansa joburi de instruire distribuite în Amazon EKS. TorchX are două dependențe importante: planificatorul batch Volcano și serverul etcd. Volcano se ocupă de programarea și punerea în coadă a joburilor de instruire, în timp ce serverul etcd este un magazin cheie-valoare utilizat de TorchElastic pentru sincronizare și descoperire peer în timpul pornirii jobului.
Când o sarcină de antrenament este lansată utilizând TorchX, comanda de lansare folosește modulul DDP distribuit TorchX furnizat pentru Trainium pentru a configura jobul general de antrenament și apoi rula comenzile torchrun corespunzătoare pe fiecare dintre podurile de lucru PyTorch. Când rulează un job, acesta poate fi monitorizat folosind instrumente standard Kubernetes (cum ar fi kubectl) sau prin seturi de instrumente ML standard, cum ar fi TensorBoard.
Prezentare generală a soluțiilor
Să ne uităm la pașii importanți ai acestei soluții. În această prezentare generală, ne referim la Lansați un job de antrenament neuron PyTorch cu mai multe noduri pe Trainium folosind TorchX și EKS tutorial pe GitHub.
Creați un cluster EKS
Pentru a începe cu joburi de instruire distribuite în Amazon EKS cu instanțe Trn1, mai întâi creați un cluster EKS așa cum este prezentat în tutorial pe GitHub. Crearea clusterelor poate fi realizată folosind instrumente standard, cum ar fi eksctl
și Formarea AWS Cloud.
Creați un grup de noduri EKS
În continuare, trebuie să creăm un grup de noduri EKS care să conțină două sau mai multe instanțe trn1.32xlarge într-o regiune acceptată. În tutorial, AWS CloudFormation este utilizat pentru a crea un șablon de lansare EC2 specific Trainium, care asigură că instanțele Trn1 sunt lansate cu o imagine de mașină Amazon (AMI) adecvată și configurația corectă a rețelei EFA necesară pentru a sprijini instruirea distribuită. AMI include, de asemenea, driverul de dispozitiv Neuron care oferă suport pentru cipurile acceleratoare Trainium. Cu eksctl
Instrument de management Amazon EKS, puteți crea cu ușurință un grup de noduri Trainium folosind un manifest YAML de bază care face referire la șablonul de lansare nou creat. De exemplu:
În manifestul precedent, mai multe atribute sunt configurate pentru a permite utilizarea instanțelor Trn1 în clusterul EKS. Primul, metadata.region
este setat la una dintre regiunile care acceptă instanțe Trn1 (în prezent us-east-1
și us-west-2
). Apoi, pentru zonele de disponibilitate, Amazon EKS necesită specificarea a două zone de disponibilitate. Una dintre aceste zone de disponibilitate trebuie să accepte utilizarea instanțelor Trn1, în timp ce cealaltă poate fi aleasă la întâmplare. Tutorialul arată cum determinați ce zone de disponibilitate vor permite instanțe Trn1 în contul dvs. AWS. Aceeași zonă de disponibilitate care acceptă Trn1 trebuie de asemenea specificată folosind availabiltyZones
atribut asociat grupului de noduri EKS. efaEnabled
este setat la true
pentru a configura nodurile cu configurația de rețea EFA corespunzătoare care este necesară pentru instruirea distribuită. În cele din urmă, launchTemplate.id
atributul asociat grupului de noduri indică șablonul de lansare EC2 creat prin AWS CloudFormation într-un pas anterior.
Presupunând că ați aplicat deja șablonul CloudFormation și ați instalat eksctl
instrument de management, puteți crea un grup de noduri EKS compatibil Trainium rulând următorul cod:
Instalați pluginuri Kubernetes pentru dispozitivele Trainium și EFA
Cu grupul de noduri la loc, următorul pas este instalarea pluginurilor Kubernetes care oferă suport pentru acceleratoarele Trainium (prin pluginul Neuron) și dispozitivele EFA (prin pluginul EFA). Aceste plugin-uri pot fi instalate cu ușurință pe cluster folosind standardul kubectl
instrument de management, așa cum se arată în tutorial.
Pentru a utiliza lansatorul universal PyTorch TorchX pentru a lansa joburi de instruire distribuite, sunt necesare două cerințe preliminare: programatorul de loturi Volcano și serverul etcd. La fel ca și pluginurile Neuron și EFA, putem folosi kubectl
instrument pentru a instala Volcano și serverul etcd pe clusterul EKS.
Atașați spațiu de stocare partajat la clusterul EKS
În tutorial, FSx for Luster este folosit pentru a oferi un sistem de fișiere partajat de înaltă performanță, care poate fi accesat de diferitele poduri de lucru EKS. Această stocare partajată este utilizată pentru a găzdui setul de date de antrenament, precum și orice artefacte și jurnalele create în timpul procesului de antrenament. Tutorialul descrie cum să creați și să atașați spațiul de stocare partajat la cluster folosind Driver Amazon FSx pentru Luster CSI.
Creați o imagine a containerului de antrenament
În continuare, trebuie să creăm o imagine container de antrenament care să includă scriptul de antrenament PyTorch împreună cu orice dependențe. Un exemplu Dockerfile este inclus în tutorial, care încorporează scriptul de pre-antrenare BERT împreună cu dependențele sale de software. Fișierul Docker este folosit pentru a construi imaginea containerului de antrenament, iar imaginea este apoi împinsă într-un depozit ECR din care lucrătorii PyTorch pot extrage imaginea atunci când o lucrare de antrenament este lansată pe cluster.
Configurați datele de antrenament
Înainte de a lansa un job de antrenament, datele de antrenament sunt mai întâi copiate în volumul de stocare partajat de pe FSx pentru Lustre. Tutorialul prezintă cum să creați un pod Kubernetes temporar care are acces la volumul de stocare partajat și arată cum să vă conectați la pod pentru a descărca și extrage setul de date de antrenament utilizând comenzi standard Linux shell.
Cu diversele precondiții de infrastructură și software existente, acum ne putem concentra pe aspectele Trainium ale soluției.
Precompilați modelul dvs
Neuron SDK acceptă PyTorch printr-un strat de integrare numit Neuronul PyTorch. În mod implicit, PyTorch Neuron operează cu compilare just-in-time, în care diferitele grafice de calcul ale rețelei neuronale din cadrul unui job de antrenament sunt compilate pe măsură ce sunt întâlnite în timpul procesului de antrenament. Pentru modelele mai mari, poate fi mai convenabil să utilizați cel furnizat neuron_parallel_compile
instrument de precompilare și stocare în cache a diferitelor grafice de calcul în avans, astfel încât să se evite compilarea graficelor în timpul antrenamentului. Înainte de a lansa jobul de instruire pe clusterul EKS, tutorialul arată cum să lansați mai întâi un job de precompilare prin TorchX utilizând neuron_parallel_compile
instrument. După finalizarea sarcinii de precompilare, compilatorul Neuron va fi identificat și compilat toate graficele de calcul ale rețelei neuronale și le va fi stocat în cache în volumul de stocare partajat pentru a fi utilizate ulterioară în timpul sarcinii de pre-antrenament BERT.
Lansați jobul de formare distribuită
Odată cu precompilarea completă, TorchX este apoi folosit pentru a lansa o lucrare de instruire distribuită pentru 64 de lucrători în două instanțe trn1.32xlarge, cu 32 de lucrători per instanță. Folosim 32 de lucrători per instanță, deoarece fiecare instanță trn1.32xlarge conține 16 acceleratoare Trainium, fiecare accelerator oferind 2 NeuronCores. Fiecare NeuronCore poate fi accesat ca unic Dispozitiv PyTorch XLA în scenariul de antrenament. Un exemplu de comandă de lansare TorchX din tutorial arată ca următorul cod:
Diferitele argumente ale liniei de comandă din comanda TorchX anterioară sunt descrise în detaliu în tutorial. Cu toate acestea, următoarele argumente sunt cele mai importante în configurarea jobului de formare:
- -cfg coada=test – Specifică coada Vulcan care va fi utilizată pentru munca de antrenament
- -cfg image_repo – Specifică depozitul ECR care va fi utilizat pentru imaginile containerului TorchX
- –script_args – Specifică orice argument care ar trebui să fie transmis scriptului de antrenament PyTorch
- –nnodes și –nproc_per_node – Numărul de instanțe și de lucrători pe instanță de utilizat pentru munca de formare
- –Script – Numele scriptului de antrenament PyTorch de lansat în containerul de antrenament
- -Imagine – Calea către imaginea containerului de antrenament în Amazon ECR
- –bf16 – Dacă se activează sau nu tipul de date BF16
Monitorizați munca de formare
După ce jobul de formare a fost lansat, există diverse moduri prin care jobul poate fi monitorizat. Tutorialul arată cum să monitorizați valorile de bază ale scriptului de antrenament pe linia de comandă folosind kubectl
, cum să monitorizați vizual progresul scriptului de antrenament în TensorBoard (consultați următoarea captură de ecran) și cum să monitorizați utilizarea acceleratorului Trainium folosind neuron-top
instrument de la Neuron SDK.
Curățați sau reutilizați mediul înconjurător
Când lucrarea de instruire este finalizată, clusterul poate fi apoi reutilizat sau reconfigurat pentru sarcini de instruire suplimentare. De exemplu, grupul de noduri EKS poate fi extins rapid folosind eksctl
comandă pentru a susține joburi de instruire care necesită instanțe suplimentare Trn1. În mod similar, comenzile de lansare Dockerfile și TorchX furnizate pot fi modificate cu ușurință pentru a sprijini modele suplimentare de învățare profundă și distribuirea topologiilor de antrenament.
Dacă clusterul nu mai este necesar, tutorialul include și toți pașii necesari pentru a elimina infrastructura EKS și resursele aferente.
Concluzie
În această postare, am explorat modul în care instanțele Trn1 și Amazon EKS oferă o platformă gestionată pentru instruire distribuită de înaltă performanță, rentabilă și masiv scalabilă a modelelor de învățare profundă. De asemenea, am împărtășit un tutorial cuprinzător care arată cum să rulați o lucrare de instruire distribuită cu mai multe instanțe în lumea reală în Amazon EKS folosind instanțe Trn1 și am evidențiat câțiva dintre pașii și componentele cheie ale soluției. Acest conținut tutorial poate fi adaptat cu ușurință pentru alte modele și sarcini de lucru și vă oferă o soluție de bază pentru instruirea distribuită a modelelor de deep learning în AWS.
Pentru a afla mai multe despre cum să începeți cu instanțele Trn1 alimentate de Trainium, consultați Documentarea neuronilor.
Despre Autori
Scott Perry este arhitect de soluții în echipa de accelerator Annapurna ML de la AWS. Cu sediul în Canada, el ajută clienții să implementeze și să optimizeze antrenamentul de deep learning și sarcinile de lucru de inferență folosind AWS Inferentia și AWS Trainium. Interesele sale includ modele mari de limbaj, învățare prin consolidare profundă, IoT și genomica.
Lorea Arrizabalaga este un arhitect de soluții aliniat la sectorul public din Marea Britanie, unde îi ajută pe clienți să proiecteze soluții ML cu Amazon SageMaker. De asemenea, face parte din comunitatea de domeniu tehnic dedicată accelerării hardware și ajută la testarea și compararea sarcinilor de lucru AWS Inferentia și AWS Trainium.
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- Platoblockchain. Web3 Metaverse Intelligence. Cunoștințe amplificate. Accesați Aici.
- Sursa: https://aws.amazon.com/blogs/machine-learning/scaling-distributed-training-with-aws-trainium-and-amazon-eks/
- 1
- 100
- 11
- 2022
- 2023
- 7
- a
- Capabil
- Despre Noi
- accelerator
- acceleratoare
- acces
- accesate
- realizat
- peste
- activ
- Suplimentar
- avansa
- avansat
- Avantaj
- aliniat
- TOATE
- deja
- Cu toate ca
- Amazon
- Amazon EC2
- Amazon SageMaker
- și
- anunța
- a anunțat
- Anunț
- aplicat
- adecvat
- arhitectură
- argumente
- aspecte
- asociate
- atașa
- atribute
- disponibilitate
- disponibil
- AWS
- Formarea AWS Cloud
- Inferentia AWS
- Lățime de bandă
- bazat
- de bază
- deoarece
- înainte
- analiza comparativă
- Beneficiile
- Miliard
- Floare
- larg
- construi
- Cache
- denumit
- Canada
- Chips
- Alege
- ales
- Cloud
- Grup
- cod
- Colectiv
- venire
- În curând
- Comun
- comunitate
- Completă
- completare
- componente
- cuprinzător
- Calcula
- Configuraţie
- legat
- Constând
- Recipient
- Containere
- conține
- conţinut
- Control
- Convenabil
- Nucleu
- cost-eficiente
- crea
- a creat
- Crearea
- creaţie
- CSI
- În prezent
- clienţii care
- de date
- DDP
- dedicat
- adânc
- învățare profundă
- Mod implicit
- implementa
- dislocate
- descris
- Amenajări
- detaliu
- detaliat
- evoluții
- dispozitiv
- Dispozitive
- direct
- descoperire
- distribuite
- instruire distribuită
- distribuire
- Descarca
- şofer
- în timpul
- fiecare
- Mai devreme
- Devreme
- ușurință în utilizare
- cu ușurință
- oricare
- permite
- un capăt la altul
- Punct final
- asigură
- Afacere
- Chiar
- exemplu
- excitat
- F? r?
- există
- explorat
- extrage
- țesătură
- Familiaritate
- camp
- Fișier
- First
- Flexibilitate
- Concentra
- urma
- următor
- Cadru
- din
- Complet
- funcționalitate
- General
- genomica
- obține
- GitHub
- dat
- grafic
- grafice
- grup
- Ghiduri
- Mânere
- Piese metalice
- inimă
- util
- ajută
- Înalt
- performanta ridicata
- Evidențiat
- extrem de
- gazdă
- Cum
- Cum Pentru a
- Totuși
- HTML
- HTTPS
- sute
- ID
- identificat
- imagine
- imagini
- implicite
- important
- in
- include
- inclus
- include
- Crește
- tot mai mult
- Infrastructură
- instala
- instalat
- instanță
- integrare
- interese
- IoT
- IT
- Loc de munca
- Locuri de munca
- Cheie
- Copil
- limbă
- mare
- pe scară largă
- mai mare
- Târziu
- lansa
- a lansat
- lansare
- strat
- AFLAȚI
- învăţare
- Led
- biblioteci
- Linie
- linux
- încărca
- mai lung
- Uite
- Se pare
- maşină
- masina de învățare
- Principal
- gestionate
- administrare
- masiv
- Memorie
- Metadata
- Metrici
- ML
- Modele
- modificată
- Module
- monitor
- monitorizate
- Monitorizarea
- monitoare
- luni
- mai mult
- cele mai multe
- multiplu
- nume
- Nevoie
- reţea
- rețele
- rețele neuronale
- următor
- nod
- noduri
- număr
- oferit
- oferind
- oficial
- ONE
- opereaza
- Operațiuni
- Optimizați
- optimizate
- orchestrație
- comandă
- Altele
- a subliniat
- contururi
- global
- Prezentare generală
- parametrii
- parte
- Trecut
- cale
- egal
- performanță
- fază
- Loc
- platformă
- Plato
- Informații despre date Platon
- PlatoData
- conecteaza
- Plugin-uri
- puncte
- Post
- alimentat
- puternic
- premise
- proces
- Progres
- furniza
- prevăzut
- furnizează
- furnizarea
- public
- Editare
- împins
- pirtorh
- repede
- aleator
- lumea reală
- referințe
- regiune
- regiuni
- legate de
- scoate
- depozit
- necesita
- necesar
- Necesită
- Resurse
- revizuiască
- Alerga
- funcţionare
- sagemaker
- acelaşi
- scalabilitate
- scalabil
- cântare
- scalare
- sdk
- sector
- serviciu
- Servicii
- set
- câteva
- comun
- Coajă
- să
- indicat
- Emisiuni
- semnificativ
- asemănător
- dimensiuni
- mai mici
- So
- Software
- soluţie
- soluţii
- unele
- specificată
- stivui
- standalone
- standard
- început
- lansare
- Pas
- paşi
- Încă
- depozitare
- stoca
- astfel de
- a sustine
- Suportat
- Sprijină
- sincronizare
- sistem
- tabel
- luare
- echipă
- Tehnic
- șablon
- temporar
- Testarea
- Marea Britanie
- lor
- mii
- Prin
- de-a lungul
- timp
- la
- instrument
- Unelte
- Pregătire
- adevărat
- tutorial
- Uk
- unic
- Universal
- utilizare
- Utilizator
- diverse
- versiune
- de
- volum
- modalități de
- săptămâni
- dacă
- care
- în timp ce
- voi
- în
- lucrător
- muncitorii
- ar
- yaml
- Tu
- Ta
- zephyrnet
- zone