Den senaste tidens utveckling inom djupinlärning har lett till allt större modeller som GPT-3, BLOOM och OPT, av vilka några redan har över 100 miljarder parametrar. Även om större modeller tenderar att vara mer kraftfulla, kräver utbildning av sådana modeller betydande beräkningsresurser. Även med användningen av avancerade distribuerade träningsbibliotek som FSDP och DeepSpeed är det vanligt att träningsjobb kräver hundratals acceleratorenheter under flera veckor eller månader åt gången.
I slutet av 2022 tillkännagav AWS den allmänna tillgängligheten av Amazon EC2 Trn1-instanser drivs av AWS Trainium—en specialbyggd maskininlärningsaccelerator (ML) optimerad för att ge en högpresterande, kostnadseffektiv och massivt skalbar plattform för att träna djupinlärningsmodeller i molnet. Trn1-instanser finns i ett antal storlekar (se följande tabell), med upp till 16 Trainium-acceleratorer per instans.
Förekomststorlek | Trainium acceleratorer | Acceleratorminne (GB) | vCPU: er | Instansminne (GiB) | Nätverksbandbredd (Gbps) |
trn1.2xlarge | 1 | 32 | 8 | 32 | Upp till 12.5 |
trn1.32xlarge | 16 | 512 | 128 | 512 | 800 |
trn1n.32xlarge (kommer snart) | 16 | 512 | 128 | 512 | 1600 |
Trn1-instanser kan antingen distribueras som fristående instanser för mindre träningsjobb eller i mycket skalbara ultrakluster som stöder distribuerad utbildning över tiotusentals Trainium-acceleratorer. Alla Trn1-instanser stöder den fristående konfigurationen, medan Trn1-ultrakluster kräver trn1.32xlarge- eller trn1n.32xlarge-instanser. I ett ultrakluster är flera Trn1-instanser samlokaliserade i en given AWS-tillgänglighetszon och är anslutna till höghastighets-, låglatens-, Elastic Fabric Adapter (EFA)-nätverk som ger 800 Gbps icke-blockerande nätverksbandbredd per instans för kollektiva beräkningsoperationer . Instanstypen trn1n.32xlarge, som lanserades i början av 2023, kommer att öka denna bandbredd till 1600 Gbps per instans.
Många företagskunder väljer att distribuera sina arbetsbelastningar för djupinlärning med Kubernetes – de facto-standarden för containerorkestrering i molnet. AWS-kunder distribuerar ofta dessa arbetsbelastningar med hjälp av Amazon Elastic Kubernetes-tjänst (Amazon EKS). Amazon EKS är en hanterad Kubernetes-tjänst som förenklar skapandet, konfigurationen, livscykeln och övervakningen av Kubernetes-kluster samtidigt som den erbjuder full flexibilitet hos Kubernetes uppströms.
Idag är vi glada över att kunna meddela officiellt stöd för distribuerade utbildningsjobb med Amazon EKS och EC2 Trn1-instanser. Med detta tillkännagivande kan du nu enkelt köra storskaliga containeriserade utbildningsjobb inom Amazon EKS samtidigt som du drar full nytta av pris-prestanda, skalbarhet och användarvänlighet som erbjuds av Trn1-instanser.
Tillsammans med detta tillkännagivande publicerar vi också en detaljerad handledning som guidar dig genom stegen som krävs för att köra ett distribuerat träningsjobb med flera instanser (BERT fas 1 förträning) med Amazon EKS- och Trn1-instanser. I det här inlägget kommer du att lära dig om lösningsarkitekturen och granska flera viktiga steg från handledningen. Referera till officiellt handledningsförråd för hela arbetsflödet från början till slut.
För att följa med, en bred förtrogenhet med AWS kärntjänster som t.ex Amazon Elastic Compute Cloud (Amazon EC2) och Amazon EKS är underförstådd, och grundläggande förtrogenhet med djupinlärning och PyTorch skulle vara till hjälp.
Lösningsarkitektur
Följande diagram illustrerar lösningsarkitekturen.
Lösningen består av följande huvudkomponenter:
- Ett EKS-kluster
- En EKS-nodgrupp bestående av trn1.32xlarge instanser
- Smakämnen AWS Neuron SDK
- EKS-plugins för Neuron och EFA
- An Amazon Elastic Container Registry (Amazon ECR) Rrepository
- En bild för träningsbehållare
- An Amazon FSx för Luster filsystem
- En Volcano batchschemaläggare och etcd-server
- TorchX universella jobbstartare
- TorchX DDP-modulen för Trainium
Kärnan i lösningen är ett EKS-kluster som ger dig kärnfunktionalitet för Kubernetes-hantering via en EKS-tjänstslutpunkt. En av fördelarna med Amazon EKS är att tjänsten aktivt övervakar och skalar kontrollplanet baserat på belastning, vilket säkerställer hög prestanda för stora arbetsbelastningar som distribuerad utbildning. Inuti EKS-klustret finns en nodgrupp som består av två eller flera trn1.32xlarge Trainium-baserade instanser som finns i samma tillgänglighetszon.
Neuron SDK är mjukvarustacken som tillhandahåller drivrutinen, kompilatorn, runtime, ramverksintegration (till exempel PyTorch Neuron) och användarverktyg som låter dig komma åt fördelarna med Trainium-acceleratorerna. Neuron-enhetsdrivrutinen körs direkt på EKS-noderna (Trn1-instanser) och ger åtkomst till Trainium-chippen inifrån de träningsbehållare som startas på noderna. Neuron- och EFA-plugins installeras inom EKS-klustret för att ge tillgång till Trainium-chips och EFA-nätverksenheter som krävs för distribuerad utbildning.
Ett ECR-förråd används för att lagra utbildningsbehållarens bilder. Dessa bilder innehåller Neuron SDK (exklusive Neuron-drivrutinen, som körs direkt på Trn1-instanserna), PyTorch-utbildningsskript och nödvändiga beroenden. När ett träningsjobb startas på EKS-klustret, dras behållarbilderna först från Amazon ECR till EKS-noderna, och PyTorch-arbetarbehållarna instansieras sedan från bilderna.
Delad lagring tillhandahålls med hjälp av ett högpresterande FSx for Luster-filsystem som finns i samma tillgänglighetszon som trn1.32xlarge-instanserna. Skapandet och bifogningen av filsystemet FSx for Luster till EKS-klustret förmedlas av Amazon FSx för Luster CSI-drivrutinen. I den här lösningen används den delade lagringen för att lagra träningsdatauppsättningen och alla loggar eller artefakter som skapats under utbildningsprocessen.
Lösningen använder TorchX universell jobbstartare att lansera distribuerade utbildningsjobb inom Amazon EKS. TorchX har två viktiga beroenden: Volcano batchschemaläggaren och etcd-servern. Volcano hanterar schemaläggning och köbildning av träningsjobb, medan etcd-servern är ett nyckel-värdelager som används av TorchElastic för synkronisering och peer-upptäckt under jobbstart.
När ett träningsjobb startas med TorchX, använder startkommandot den medföljande TorchX-distribuerade DDP-modulen för Trainium för att konfigurera det övergripande träningsjobbet och sedan köra lämpliga torchrun-kommandon på var och en av PyTorch-arbetarkapslarna. När ett jobb körs kan det övervakas med hjälp av vanliga Kubernetes-verktyg (som kubectl) eller via vanliga ML-verktyg som TensorBoard.
Lösningsöversikt
Låt oss titta på de viktiga stegen i denna lösning. I hela denna översikt hänvisar vi till Starta ett PyTorch Neuron Training Job Multi-Node på Trainium med TorchX och EKS handledning på GitHub.
Skapa ett EKS-kluster
För att komma igång med distribuerade utbildningsjobb i Amazon EKS med Trn1-instanser skapar du först ett EKS-kluster enligt beskrivningen i handledning på GitHub. Skapande av kluster kan uppnås med hjälp av standardverktyg som t.ex eksctl
och AWS molnformation.
Skapa en EKS-nodgrupp
Därefter måste vi skapa en EKS-nodgrupp som innehåller två eller flera trn1.32xlarge-instanser i en region som stöds. I handledningen, AWS CloudFormation används för att skapa en Trainium-specifik EC2-startmall, vilket säkerställer att Trn1-instanserna lanseras med en lämplig Amazon Machine Image (AMI) och rätt EFA-nätverkskonfiguration som behövs för att stödja distribuerad utbildning. AMI inkluderar även Neuron-enhetsdrivrutinen som ger stöd för Trainium acceleratorchips. Med eksctl
Amazon EKS-hanteringsverktyg, du kan enkelt skapa en Trainium-nodgrupp med hjälp av ett grundläggande YAML-manifest som refererar till den nyskapade lanseringsmallen. Till exempel:
I det föregående manifestet är flera attribut konfigurerade för att tillåta användning av Trn1-instanser i EKS-klustret. Först, metadata.region
är inställd på en av regionerna som stöder Trn1-instanser (för närvarande us-east-1
och us-west-2
). Därefter, för tillgänglighetszoner, kräver Amazon EKS att två tillgänglighetszoner anges. En av dessa tillgänglighetszoner måste stödja användningen av Trn1-instanser, medan den andra kan väljas slumpmässigt. Handledningen visar hur man avgöra vilka tillgänglighetszoner som tillåter Trn1-instanser i ditt AWS-konto. Samma Trn1-stödjande tillgänglighetszon måste också specificeras med hjälp av availabiltyZones
attribut associerat med EKS-nodgruppen. efaEnabled
är inställd på true
för att konfigurera noderna med lämplig EFA-nätverkskonfiguration som krävs för distribuerad utbildning. Slutligen, den launchTemplate.id
attribut som är associerat med nodgruppen pekar på EC2-startmallen som skapats via AWS CloudFormation i ett tidigare steg.
Förutsatt att du redan har tillämpat CloudFormation-mallen och installerat eksctl
hanteringsverktyg kan du skapa en Trainium-kapabel EKS-nodgrupp genom att köra följande kod:
Installera Kubernetes-plugins för Trainium- och EFA-enheter
Med nodgruppen på plats är nästa steg att installera Kubernetes-plugins som ger stöd för Trainium-acceleratorerna (via Neuron-plugin) och EFA-enheterna (via EFA-plugin). Dessa plugins kan enkelt installeras på klustret med standarden kubectl
hanteringsverktyg som visas i handledningen.
För att använda TorchX universella PyTorch launcher för att starta distribuerade träningsjobb krävs två förutsättningar: Volcano batchschemaläggaren och etcd-servern. Ungefär som Neuron och EFA plugins kan vi använda kubectl
verktyg för att installera Volcano och etcd-servern på EKS-klustret.
Fäst delad lagring till EKS-klustret
I handledningen används FSx for Luster för att tillhandahålla ett högpresterande delat filsystem som kan nås av de olika EKS-arbetarpodarna. Denna delade lagring används för att vara värd för träningsdatauppsättningen, såväl som alla artefakter och loggar som skapas under utbildningsprocessen. Handledningen beskriver hur du skapar och ansluter den delade lagringen till klustret med hjälp av Amazon FSx för Luster CSI-drivrutinen.
Skapa en bild för utbildningsbehållare
Därefter måste vi skapa en utbildningscontainerbild som innehåller PyTorch-utbildningsskriptet tillsammans med eventuella beroenden. Ett exempel på Dockerfile ingår i handledningen, som innehåller BERT-förträningsskriptet tillsammans med dess mjukvaruberoenden. Dockerfilen används för att bygga utbildningscontainerbilden, och bilden skjuts sedan till ett ECR-förråd från vilket PyTorch-arbetarna kan hämta bilden när ett träningsjobb startas i klustret.
Ställ in träningsdata
Innan ett träningsjobb startas, kopieras träningsdata först till den delade lagringsvolymen på FSx för Lustre. Handledningen beskriver hur man skapar en temporär Kubernetes-pod som har tillgång till den delade lagringsvolymen och visar hur man loggar in på podden för att ladda ner och extrahera träningsdataset med vanliga Linux-skalkommandon.
Med de olika infrastruktur- och mjukvaruförutsättningarna på plats kan vi nu fokusera på Trainium-aspekterna av lösningen.
Förkompilera din modell
Neuron SDK stöder PyTorch genom ett integrationslager som kallas PyTorch Neuron. Som standard arbetar PyTorch Neuron med just-in-time kompilering, där de olika beräkningsgraferna för det neurala nätverket inom ett träningsjobb sammanställs allt eftersom de påträffas under träningsprocessen. För större modeller kan det vara bekvämare att använda den medföljande neuron_parallel_compile
verktyg för att förkompilera och cache de olika beräkningsgraferna i förväg för att undvika grafkompilering vid träningstillfället. Innan du startar träningsjobbet på EKS-klustret visar handledningen hur du först startar ett förkompileringsjobb via TorchX med neuron_parallel_compile
verktyg. När förkompileringsjobbet har slutförts kommer Neuron-kompilatorn att ha identifierat och kompilerat alla beräkningsgrafer för det neurala nätverket och cachat dem till den delade lagringsvolymen för senare användning under själva BERT-förträningsjobbet.
Starta det distribuerade träningsjobbet
När förkompileringen är klar, används TorchX sedan för att lansera ett 64-anställda distribuerat utbildningsjobb över två trn1.32xlarge instanser, med 32 arbetare per instans. Vi använder 32 arbetare per instans eftersom varje trn1.32xlarge instans innehåller 16 Trainium-acceleratorer, där varje accelerator ger 2 NeuronCores. Varje NeuronCore kan nås som en unik PyTorch XLA-enhet i träningsmanuset. Ett exempel på TorchX-startkommando från handledningen ser ut som följande kod:
De olika kommandoradsargumenten i det föregående TorchX-kommandot beskrivs i detalj i handledningen. Följande argument är dock viktigast för att konfigurera träningsjobbet:
- -cfg kö=test – Anger vulkankön som ska användas för träningsjobbet
- -cfg image_repo – Anger ECR-förrådet som ska användas för TorchX-behållarbilderna
- –script_args – Anger eventuella argument som ska skickas till PyTorchs träningsskript
- –nnodes och –nproc_per_node – Antalet instanser och arbetare per instans som ska användas för utbildningsjobbet
- -manus – Namnet på PyTorch-utbildningsskriptet som ska lanseras i träningsbehållaren
- -Bild – Vägen till utbildningsbehållarens bild i Amazon ECR
- –bf16 – Huruvida BF16 datatyp ska aktiveras eller inte
Övervaka träningsjobbet
Efter att utbildningsjobbet har lanserats finns det olika sätt på vilka jobbet kan följas upp. Handledningen visar hur man övervakar grundläggande träningsskriptmått på kommandoraden med hjälp av kubectl
, hur man visuellt övervakar träningsskriptets framsteg i TensorBoard (se följande skärmdump) och hur man övervakar Trainium-acceleratoranvändningen med hjälp av neuron-top
verktyg från Neuron SDK.
Städa upp eller återanvänd miljön
När träningsjobbet är klart kan klustret sedan återanvändas eller omkonfigureras för ytterligare utbildningsjobb. Till exempel kan EKS-nodgruppen snabbt skalas upp med hjälp av eksctl
kommando för att stödja utbildningsjobb som kräver ytterligare Trn1-instanser. På samma sätt kan de medföljande Dockerfile- och TorchX-startkommandona enkelt modifieras för att stödja ytterligare modeller för djupinlärning och distribuera utbildningstopologier.
Om klustret inte längre behövs innehåller handledningen också alla steg som krävs för att ta bort EKS-infrastrukturen och relaterade resurser.
Slutsats
I det här inlägget utforskade vi hur Trn1-instanser och Amazon EKS tillhandahåller en hanterad plattform för högpresterande, kostnadseffektiv och massivt skalbar distribuerad utbildning av modeller för djupinlärning. Vi delade också med oss av en omfattande handledning som visar hur man kör ett verkligt distribuerat utbildningsjobb med flera instanser i Amazon EKS med hjälp av Trn1-instanser, och lyfte fram flera av nyckelstegen och komponenterna i lösningen. Detta handledningsinnehåll kan enkelt anpassas för andra modeller och arbetsbelastningar och ger dig en grundläggande lösning för distribuerad utbildning av modeller för djupinlärning i AWS.
För att lära dig mer om hur du kommer igång med Trainium-drivna Trn1-instanser, se Neuron dokumentation.
Om författarna
Scott Perry är en lösningsarkitekt på Annapurna ML acceleratorteam på AWS. Baserad i Kanada hjälper han kunder att distribuera och optimera djupinlärningsträning och slutledningsarbetsbelastningar med hjälp av AWS Inferentia och AWS Trainium. Hans intressen inkluderar stora språkmodeller, djup förstärkningsinlärning, IoT och genomik.
Lorea Arrizabalaga är en lösningsarkitekt anpassad till den offentliga sektorn i Storbritannien, där hon hjälper kunder att designa ML-lösningar med Amazon SageMaker. Hon är också en del av Technical Field Community som är dedikerad till hårdvaruacceleration och hjälper till med att testa och benchmarka AWS Inferentia och AWS Trainium-arbetsbelastningar.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- Platoblockchain. Web3 Metaverse Intelligence. Kunskap förstärkt. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/scaling-distributed-training-with-aws-trainium-and-amazon-eks/
- 1
- 100
- 11
- 2022
- 2023
- 7
- a
- Able
- Om Oss
- accelerator
- acceleratorer
- tillgång
- Accessed
- uppnås
- tvärs
- aktivt
- Annat
- avancera
- avancerat
- Fördel
- Justerat
- Alla
- redan
- Även
- amason
- Amazon EC2
- Amazon SageMaker
- och
- Meddela
- meddelade
- Tillkännagivande
- tillämpas
- lämpligt
- arkitektur
- argument
- aspekter
- associerad
- bifoga
- attribut
- tillgänglighet
- tillgänglig
- AWS
- AWS molnformation
- AWS slutledning
- Bandbredd
- baserat
- grundläggande
- därför att
- innan
- benchmarking
- Fördelarna
- Miljarder
- Bloom
- bred
- SLUTRESULTAT
- Cache
- kallas
- Kanada
- Pommes frites
- Välja
- valda
- cloud
- kluster
- koda
- Kollektiv
- kommande
- Coming Soon....
- Gemensam
- samfundet
- fullborda
- fullbordan
- komponenter
- omfattande
- Compute
- konfiguration
- anslutna
- Bestående
- Behållare
- Behållare
- innehåller
- innehåll
- kontroll
- Bekväm
- Kärna
- kostnadseffektiv
- skapa
- skapas
- Skapa
- skapande
- CSI
- För närvarande
- Kunder
- datum
- DDP
- dedicerad
- djup
- djupt lärande
- Standard
- distribuera
- utplacerade
- beskriven
- Designa
- detalj
- detaljerad
- utvecklingen
- anordning
- enheter
- direkt
- Upptäckten
- distribueras
- distribuerad utbildning
- fördelnings
- ladda ner
- chaufför
- under
- varje
- Tidigare
- Tidig
- enkel användning
- lätt
- antingen
- möjliggöra
- början till slut
- Slutpunkt
- säkerställer
- Företag
- Även
- exempel
- exciterade
- exklusive
- finns
- utforskas
- extrahera
- tyg
- Förtrogenhet
- fält
- Fil
- Förnamn
- Flexibilitet
- Fokus
- följer
- efter
- Ramverk
- från
- full
- funktionalitet
- Allmänt
- genomik
- skaffa sig
- GitHub
- ges
- diagram
- grafer
- Grupp
- Guider
- Handtag
- hårdvara
- Hjärta
- hjälp
- hjälper
- Hög
- högpresterande
- Markerad
- höggradigt
- värd
- Hur ser din drömresa ut
- How To
- Men
- html
- HTTPS
- Hundratals
- ID
- identifierade
- bild
- bilder
- underförstådd
- med Esport
- in
- innefattar
- ingår
- innefattar
- Öka
- alltmer
- Infrastruktur
- installera
- installerad
- exempel
- integrering
- intressen
- iot
- IT
- Jobb
- Lediga jobb
- Nyckel
- Snäll
- språk
- Large
- storskalig
- större
- Sent
- lansera
- lanserades
- lansera
- lager
- LÄRA SIG
- inlärning
- Led
- bibliotek
- linje
- linux
- läsa in
- längre
- se
- UTSEENDE
- Maskinen
- maskininlärning
- Huvudsida
- förvaltade
- ledning
- massivt
- Minne
- metadata
- Metrics
- ML
- modeller
- modifierad
- Modulerna
- Övervaka
- övervakas
- övervakning
- monitorer
- månader
- mer
- mest
- multipel
- namn
- Behöver
- nät
- nätverk
- neurala nätverk
- Nästa
- nod
- noder
- antal
- erbjuds
- erbjuda
- tjänsteman
- ONE
- fungerar
- Verksamhet
- Optimera
- optimerad
- orkestrering
- beställa
- Övriga
- skisse
- konturer
- övergripande
- Översikt
- parametrar
- del
- Godkänd
- bana
- jämlikar
- prestanda
- fas
- Plats
- plattform
- plato
- Platon Data Intelligence
- PlatonData
- plugin
- insticksmoduler
- poäng
- Inlägg
- drivs
- den mäktigaste
- förutsättningar
- process
- Framsteg
- ge
- förutsatt
- ger
- tillhandahålla
- allmän
- publicering
- sköt
- pytorch
- snabbt
- slumpmässig
- verkliga världen
- referenser
- region
- regioner
- relaterad
- ta bort
- Repository
- kräver
- Obligatorisk
- Kräver
- Resurser
- översyn
- Körning
- rinnande
- sagemaker
- Samma
- skalbarhet
- skalbar
- skalor
- skalning
- sDK
- sektor
- service
- Tjänster
- in
- flera
- delas
- Shell
- skall
- visas
- Visar
- signifikant
- Liknande
- storlekar
- mindre
- So
- Mjukvara
- lösning
- Lösningar
- några
- specificerade
- stapel
- fristående
- standard
- igång
- start
- Steg
- Steg
- Fortfarande
- förvaring
- lagra
- sådana
- stödja
- Som stöds
- Stöder
- synkronisering
- system
- bord
- tar
- grupp
- Teknisk
- mall
- temporär
- Testning
- Smakämnen
- Storbritannien
- deras
- tusentals
- Genom
- hela
- tid
- till
- verktyg
- verktyg
- Utbildning
- sann
- handledning
- Uk
- unika
- Universell
- användning
- Användare
- olika
- version
- via
- volym
- sätt
- veckor
- om
- som
- medan
- kommer
- inom
- arbetstagaren
- arbetare
- skulle
- jaml
- Om er
- Din
- zephyrnet
- zoner