Nylig utvikling innen dyp læring har ført til stadig større modeller som GPT-3, BLOOM og OPT, hvorav noen allerede er i overkant av 100 milliarder parametere. Selv om større modeller har en tendens til å være kraftigere, krever opplæring av slike modeller betydelige beregningsressurser. Selv med bruk av avanserte distribuerte treningsbiblioteker som FSDP og DeepSpeed, er det vanlig at treningsjobber krever hundrevis av akseleratorenheter i flere uker eller måneder om gangen.
På slutten av 2022 kunngjorde AWS den generelle tilgjengeligheten av Amazon EC2 Trn1-forekomster drevet av AWS Trainium— en spesialbygd maskinlæringsakselerator (ML) optimalisert for å gi en høyytelses, kostnadseffektiv og massivt skalerbar plattform for opplæring av dyplæringsmodeller i skyen. Trn1-forekomster er tilgjengelige i en rekke størrelser (se følgende tabell), med opptil 16 Trainium-akseleratorer per forekomst.
Forekomststørrelse | Trainium akseleratorer | Akseleratorminne (GB) | vCPUer | Forekomstminne (GiB) | Nettverksbåndbredde (Gbps) |
trn1.2xlarge | 1 | 32 | 8 | 32 | Opp til 12.5 |
trn1.32xlarge | 16 | 512 | 128 | 512 | 800 |
trn1n.32xlarge (kommer snart) | 16 | 512 | 128 | 512 | 1600 |
Trn1-forekomster kan enten distribueres som frittstående forekomster for mindre treningsjobber, eller i svært skalerbare ultraklynger som støtter distribuert opplæring på tvers av titusenvis av Trainium-akseleratorer. Alle Trn1-forekomster støtter den frittstående konfigurasjonen, mens Trn1-ultraklynger krever trn1.32xlarge- eller trn1n.32xlarge-forekomster. I en ultracluster er flere Trn1-forekomster samlokalisert i en gitt AWS-tilgjengelighetssone og er koblet til høyhastighets, lav-latens, Elastic Fabric Adapter (EFA)-nettverk som gir 800 Gbps ikke-blokkerende nettverksbåndbredde per forekomst for kollektive beregningsoperasjoner . Forekomsttypen trn1n.32xlarge, som ble lansert tidlig i 2023, vil øke denne båndbredden til 1600 Gbps per forekomst.
Mange bedriftskunder velger å distribuere deep learning-arbeidsmengdene sine ved hjelp av Kubernetes – de facto-standarden for containerorkestrering i skyen. AWS-kunder distribuerer ofte disse arbeidsbelastningene ved hjelp av Amazon Elastic Kubernetes-tjeneste (Amazon EKS). Amazon EKS er en administrert Kubernetes-tjeneste som forenkler opprettelsen, konfigurasjonen, livssyklusen og overvåkingen av Kubernetes-klynger, samtidig som den tilbyr full fleksibilitet til oppstrøms Kubernetes.
I dag er vi glade for å kunngjøre offisiell støtte for distribuerte opplæringsjobber som bruker Amazon EKS og EC2 Trn1-forekomster. Med denne kunngjøringen kan du nå enkelt kjøre store containeriserte opplæringsjobber innen Amazon EKS mens du drar full nytte av prisytelsen, skalerbarheten og brukervennligheten som tilbys av Trn1-forekomster.
Sammen med denne kunngjøringen publiserer vi også en detaljert veiledning som guider deg gjennom trinnene som kreves for å kjøre en distribuert treningsjobb med flere forekomster (BERT fase 1-pre-trening) ved bruk av Amazon EKS- og Trn1-forekomster. I dette innlegget vil du lære om løsningsarkitekturen og gjennomgå flere nøkkeltrinn fra veiledningen. Referere til offisielt opplæringslager for den komplette ende-til-ende arbeidsflyten.
For å følge med, en bred kjennskap til kjerne AWS-tjenester som f.eks Amazon Elastic Compute Cloud (Amazon EC2) og Amazon EKS er underforstått, og grunnleggende kjennskap til dyp læring og PyTorch vil være nyttig.
Løsningsarkitektur
Følgende diagram illustrerer løsningsarkitekturen.
Løsningen består av følgende hovedkomponenter:
- En EKS-klynge
- En EKS-nodegruppe som består av trn1.32xlarge instanser
- De AWS nevron SDK
- EKS-plugins for Neuron og EFA
- An Amazon Elastic Container Registry (Amazon ECR) Rrepository
- Et treningsbeholderbilde
- An Amazon FSx for Luster filsystem
- En Volcano batchplanlegger og etcd-server
- TorchX universelle jobbstarter
- TorchX DDP-modulen for Trainium
I hjertet av løsningen er en EKS-klynge som gir deg kjernefunksjonalitet for Kubernetes-administrasjon via et EKS-tjenesteendepunkt. En av fordelene med Amazon EKS er at tjenesten aktivt overvåker og skalerer kontrollplanet basert på belastning, noe som sikrer høy ytelse for store arbeidsbelastninger som distribuert opplæring. Inne i EKS-klyngen er en nodegruppe bestående av to eller flere trn1.32xlarge Trainium-baserte instanser som ligger i samme tilgjengelighetssone.
Neuron SDK er programvarestabelen som gir driveren, kompilatoren, kjøretiden, rammeverkintegrasjonen (for eksempel PyTorch Neuron) og brukerverktøy som lar deg få tilgang til fordelene med Trainium-akseleratorene. Neuron-enhetsdriveren kjører direkte på EKS-nodene (Trn1-forekomster) og gir tilgang til Trainium-brikkene fra treningsbeholderne som lanseres på nodene. Neuron- og EFA-plugins er installert i EKS-klyngen for å gi tilgang til Trainium-brikkene og EFA-nettverksenheter som kreves for distribuert opplæring.
Et ECR-lager brukes til å lagre treningsbeholderbildene. Disse bildene inneholder Neuron SDK (unntatt Neuron-driveren, som kjører direkte på Trn1-forekomstene), PyTorch-treningsskript og nødvendige avhengigheter. Når en treningsjobb startes på EKS-klyngen, trekkes først beholderbildene fra Amazon ECR til EKS-nodene, og PyTorch-arbeiderbeholderne blir deretter instansiert fra bildene.
Delt lagring tilbys ved hjelp av et høyytelses FSx for Luster-filsystem som finnes i samme tilgjengelighetssone som trn1.32xlarge-forekomstene. Oppretting og vedlegg av filsystemet FSx for Luster til EKS-klyngen formidles av Amazon FSx for Luster CSI-driver. I denne løsningen brukes den delte lagringen til å lagre treningsdatasettet og eventuelle logger eller artefakter som er opprettet under treningsprosessen.
Løsningen bruker TorchX universell jobbstarter å lansere distribuerte opplæringsjobber innen Amazon EKS. TorchX har to viktige avhengigheter: Volcano batchplanleggeren og etcd-serveren. Volcano håndterer planlegging og kølegging av treningsjobber, mens etcd-serveren er et nøkkelverdilager som brukes av TorchElastic for synkronisering og peer-oppdagelse under oppstart av jobb.
Når en treningsjobb startes med TorchX, bruker startkommandoen den medfølgende TorchX-distribuerte DDP-modulen for Trainium for å konfigurere den overordnede treningsjobben og deretter kjøre de riktige torchrun-kommandoene på hver av PyTorch worker pods. Når en jobb kjører, kan den overvåkes ved hjelp av standard Kubernetes-verktøy (som kubectl) eller via standard ML-verktøysett som TensorBoard.
Løsningsoversikt
La oss se på de viktige trinnene i denne løsningen. Gjennom denne oversikten viser vi til Start en Multi-Node PyTorch Neuron Training Job på Trainium ved å bruke TorchX og EKS opplæring på GitHub.
Opprett en EKS-klynge
For å komme i gang med distribuerte opplæringsjobber i Amazon EKS med Trn1-forekomster, oppretter du først en EKS-klynge som beskrevet i opplæring på GitHub. Klyngeoppretting kan oppnås ved hjelp av standardverktøy som f.eks eksctl
og AWS skyformasjon.
Opprett en EKS-nodegruppe
Deretter må vi opprette en EKS-nodegruppe som inneholder to eller flere trn1.32xlarge-forekomster i en støttet region. I opplæringen, AWS CloudFormation brukes til å lage en Trainium-spesifikk EC2-lanseringsmal, som sikrer at Trn1-forekomstene lanseres med et passende Amazon Machine Image (AMI) og riktig EFA-nettverkskonfigurasjon som er nødvendig for å støtte distribuert opplæring. AMI inkluderer også Neuron-enhetsdriveren som gir støtte for Trainium-akseleratorbrikkene. Med eksctl
Amazon EKS-administrasjonsverktøy, du kan enkelt opprette en Trainium-nodegruppe ved å bruke et grunnleggende YAML-manifest som refererer til den nyopprettede lanseringsmalen. For eksempel:
I det foregående manifestet er flere attributter konfigurert for å tillate bruk av Trn1-forekomster i EKS-klyngen. Først, metadata.region
er satt til en av regionene som støtter Trn1-forekomster (for øyeblikket us-east-1
og us-west-2
). Deretter, for tilgjengelighetssoner, krever Amazon EKS at to tilgjengelighetssoner spesifiseres. En av disse tilgjengelighetssonene må støtte bruken av Trn1-forekomster, mens den andre kan velges tilfeldig. Opplæringen viser hvordan bestemme hvilke tilgjengelighetssoner som vil tillate Trn1-forekomster i AWS-kontoen din. Den samme Trn1-støttende tilgjengelighetssonen må også spesifiseres ved å bruke availabiltyZones
attributt knyttet til EKS-nodegruppen. efaEnabled
er satt til true
for å konfigurere nodene med riktig EFA-nettverkskonfigurasjon som kreves for distribuert opplæring. Til slutt, den launchTemplate.id
attributtet knyttet til nodegruppen peker til EC2-lanseringsmalen opprettet via AWS CloudFormation i et tidligere trinn.
Forutsatt at du allerede har brukt CloudFormation-malen og installert eksctl
administrasjonsverktøy, kan du opprette en Trainium-kompatibel EKS-nodegruppe ved å kjøre følgende kode:
Installer Kubernetes-plugins for Trainium- og EFA-enheter
Med nodegruppen på plass, er neste trinn å installere Kubernetes-plugins som gir støtte for Trainium-akseleratorene (via Neuron-pluginen) og EFA-enhetene (via EFA-pluginen). Disse pluginene kan enkelt installeres på klyngen ved å bruke standarden kubectl
administrasjonsverktøy som vist i veiledningen.
For å bruke den universelle TorchX PyTorch-lanseringen til å starte distribuerte treningsjobber, kreves to forutsetninger: Volcano batchplanleggeren og etcd-serveren. På samme måte som Neuron- og EFA-pluginene, kan vi bruke kubectl
verktøy for å installere Volcano og etcd-serveren på EKS-klyngen.
Fest delt lagring til EKS-klyngen
I opplæringen brukes FSx for Luster for å gi et høyytelses delt filsystem som kan nås av de forskjellige EKS-arbeiderkapslene. Denne delte lagringen brukes til å være vert for opplæringsdatasettet, samt eventuelle artefakter og logger som opprettes under opplæringsprosessen. Opplæringen beskriver hvordan du oppretter og kobler den delte lagringen til klyngen ved hjelp av Amazon FSx for Luster CSI-driver.
Lag et treningsbeholderbilde
Deretter må vi lage et treningsbeholderbilde som inkluderer PyTorch-treningsskriptet sammen med eventuelle avhengigheter. Et eksempel på Dockerfile er inkludert i opplæringen, som inkluderer BERT-foropplæringsskriptet sammen med programvareavhengighetene. Dockerfilen brukes til å bygge opplæringsbeholderbildet, og bildet skyves deretter til et ECR-lager hvor PyTorch-arbeiderne kan hente bildet når en treningsjobb startes på klyngen.
Sett opp treningsdataene
Før du starter en treningsjobb, kopieres treningsdataene først til det delte lagringsvolumet på FSx for Lustre. Veiledningen skisserer hvordan du oppretter en midlertidig Kubernetes-pod som har tilgang til det delte lagringsvolumet, og viser hvordan du logger på poden for å laste ned og trekke ut opplæringsdatasettet ved hjelp av standard Linux-shell-kommandoer.
Med de ulike infrastruktur- og programvareforutsetningene på plass, kan vi nå fokusere på Trainium-aspektene ved løsningen.
Forhåndskompiler modellen din
Neuron SDK støtter PyTorch gjennom et integreringslag kalt PyTorch Neuron. Som standard opererer PyTorch Neuron med just-in-time kompilering, der de ulike nevrale nettverksdatagrafene i en treningsjobb kompileres etter hvert som de støtes på under treningsprosessen. For større modeller kan det være mer praktisk å bruke den medfølgende neuron_parallel_compile
verktøy for å forhåndskompilere og hurtigbufre de forskjellige beregningsgrafene på forhånd for å unngå grafkompilering på treningstidspunktet. Før du starter treningsjobben på EKS-klyngen, viser veiledningen hvordan du først starter en forhåndskompileringsjobb via TorchX ved å bruke neuron_parallel_compile
verktøy. Etter fullføring av forhåndskompileringsjobben vil Neuron-kompilatoren ha identifisert og kompilert alle beregningsgrafene for det nevrale nettverket, og bufret dem til det delte lagringsvolumet for senere bruk under selve BERT-foropplæringsjobben.
Start den distribuerte opplæringsjobben
Når forhåndskompileringen er fullført, brukes TorchX deretter til å lansere en 64-arbeiders distribuert opplæringsjobb på tvers av to trn1.32xlarge forekomster, med 32 arbeidere per forekomst. Vi bruker 32 arbeidere per forekomst fordi hver trn1.32xlarge forekomst inneholder 16 Trainium-akseleratorer, hvor hver akselerator gir 2 NeuronCores. Hver NeuronCore kan nås som en unik PyTorch XLA-enhet i treningsmanuset. Et eksempel på TorchX-startkommando fra opplæringen ser ut som følgende kode:
De ulike kommandolinjeargumentene i den foregående TorchX-kommandoen er beskrevet i detalj i veiledningen. Følgende argumenter er imidlertid viktigst for å konfigurere treningsjobben:
- -cfg kø=test – Spesifiserer vulkankøen som skal brukes til treningsjobben
- -cfg image_repo – Spesifiserer ECR-lageret som skal brukes for TorchX-beholderbildene
- –script_args – Spesifiserer eventuelle argumenter som skal sendes til PyTorch-treningsskriptet
- –nnodes og –nproc_per_node – Antall instanser og arbeidere per instans som skal brukes til opplæringsjobben
- -manus – Navnet på PyTorch-treningsskriptet som skal lanseres i opplæringsbeholderen
- -Bilde – Veien til treningsbeholderbildet i Amazon ECR
- –bf16 – Hvorvidt du vil aktivere BF16-datatype
Overvåk treningsjobben
Etter at opplæringsjobben er igangsatt, er det ulike måter jobben kan overvåkes på. Opplæringen viser hvordan du overvåker grunnleggende treningsskriptberegninger på kommandolinjen ved å bruke kubectl
, hvordan du visuelt overvåker treningsskriptfremdriften i TensorBoard (se følgende skjermbilde), og hvordan du overvåker Trainium-akseleratorbruken ved å bruke neuron-top
verktøy fra Neuron SDK.
Rydd opp eller gjenbruk miljøet
Når opplæringsjobben er fullført, kan klyngen deretter gjenbrukes eller konfigureres på nytt for ytterligere opplæringsjobber. For eksempel kan EKS-nodegruppen raskt skaleres opp ved hjelp av eksctl
kommando for å støtte opplæringsjobber som krever ytterligere Trn1-forekomster. På samme måte kan de medfølgende Dockerfile- og TorchX-lanseringskommandoene enkelt endres for å støtte ytterligere dyplæringsmodeller og distribuere treningstopologier.
Hvis klyngen ikke lenger er nødvendig, inkluderer opplæringen også alle trinnene som kreves for å fjerne EKS-infrastrukturen og relaterte ressurser.
konklusjonen
I dette innlegget utforsket vi hvordan Trn1-instanser og Amazon EKS gir en administrert plattform for høyytelses, kostnadseffektiv og massivt skalerbar distribuert opplæring av dyplæringsmodeller. Vi delte også en omfattende opplæring som viser hvordan du kjører en distribuert treningsjobb med flere instanser i virkeligheten i Amazon EKS ved å bruke Trn1-forekomster, og fremhevet flere av nøkkeltrinnene og komponentene i løsningen. Dette opplæringsinnholdet kan enkelt tilpasses for andre modeller og arbeidsbelastninger, og gir deg en grunnleggende løsning for distribuert opplæring av dyplæringsmodeller i AWS.
For å lære mer om hvordan du kommer i gang med Trainium-drevne Trn1-forekomster, se Nevron dokumentasjon.
Om forfatterne
Scott Perry er en løsningsarkitekt på Annapurna ML-akseleratorteamet hos AWS. Basert i Canada hjelper han kunder med å distribuere og optimalisere dyp læringstrening og slutningsarbeidsbelastninger ved å bruke AWS Inferentia og AWS Trainium. Hans interesser inkluderer store språkmodeller, dyp forsterkningslæring, IoT og genomikk.
Lorea Arrizabalaga er en Solutions Architect tilpasset den britiske offentlige sektor, hvor hun hjelper kunder med å designe ML-løsninger med Amazon SageMaker. Hun er også en del av Technical Field Community dedikert til maskinvareakselerasjon og hjelper til med testing og benchmarking av AWS Inferentia og AWS Trainium arbeidsbelastninger.
- SEO-drevet innhold og PR-distribusjon. Bli forsterket i dag.
- Platoblokkkjede. Web3 Metaverse Intelligence. Kunnskap forsterket. Tilgang her.
- kilde: https://aws.amazon.com/blogs/machine-learning/scaling-distributed-training-with-aws-trainium-and-amazon-eks/
- 1
- 100
- 11
- 2022
- 2023
- 7
- a
- I stand
- Om oss
- akselerator
- akseleratorer
- adgang
- aksesseres
- oppnådd
- tvers
- aktivt
- Ytterligere
- avansere
- avansert
- Fordel
- justert
- Alle
- allerede
- Selv
- Amazon
- Amazon EC2
- Amazon SageMaker
- og
- Kunngjøre
- annonsert
- Kunngjøring
- anvendt
- hensiktsmessig
- arkitektur
- argumenter
- aspekter
- assosiert
- feste
- attributter
- tilgjengelighet
- tilgjengelig
- AWS
- AWS skyformasjon
- AWS slutning
- Båndbredde
- basert
- grunnleggende
- fordi
- før du
- referansemåling
- Fordeler
- Milliarder
- Bloom
- bred
- bygge
- Cache
- som heter
- Canada
- chips
- Velg
- valgt ut
- Cloud
- Cluster
- kode
- Collective
- kommer
- Kommer snart
- Felles
- samfunnet
- fullføre
- ferdigstillelse
- komponenter
- omfattende
- Beregn
- Konfigurasjon
- tilkoblet
- Består
- Container
- Containere
- inneholder
- innhold
- kontroll
- Praktisk
- Kjerne
- kostnadseffektiv
- skape
- opprettet
- Opprette
- skaperverket
- CSI
- I dag
- Kunder
- dato
- DDP
- dedikert
- dyp
- dyp læring
- Misligholde
- utplassere
- utplassert
- beskrevet
- utforming
- detalj
- detaljert
- utviklingen
- enhet
- Enheter
- direkte
- Funnet
- distribueres
- distribuert opplæring
- distribusjon
- nedlasting
- sjåfør
- under
- hver enkelt
- Tidligere
- Tidlig
- brukervennlighet
- lett
- enten
- muliggjøre
- ende til ende
- Endpoint
- sikrer
- Enterprise
- Selv
- eksempel
- opphisset
- Eksklusiv
- finnes
- utforsket
- trekke ut
- stoff
- Familiær
- felt
- filet
- Først
- fleksibilitet
- Fokus
- følge
- etter
- Rammeverk
- fra
- fullt
- funksjonalitet
- general
- genomikk
- få
- GitHub
- gitt
- graf
- grafer
- Gruppe
- Guider
- Håndterer
- maskinvare
- Hjerte
- nyttig
- hjelper
- Høy
- høy ytelse
- Fremhevet
- svært
- vert
- Hvordan
- Hvordan
- Men
- HTML
- HTTPS
- Hundrevis
- ID
- identifisert
- bilde
- bilder
- implisitt
- viktig
- in
- inkludere
- inkludert
- inkluderer
- Øke
- stadig
- Infrastruktur
- installere
- installerte
- f.eks
- integrering
- interesser
- IOT
- IT
- Jobb
- Jobb
- nøkkel
- Type
- Språk
- stor
- storskala
- større
- Late
- lansere
- lansert
- lansere
- lag
- LÆRE
- læring
- Led
- bibliotekene
- linje
- linux
- laste
- lenger
- Se
- UTSEENDE
- maskin
- maskinlæring
- Hoved
- fikk til
- ledelse
- massivt
- Minne
- metadata
- Metrics
- ML
- modeller
- modifisert
- Moduler
- Overvåke
- overvåket
- overvåking
- skjermer
- måneder
- mer
- mest
- flere
- navn
- Trenger
- nettverk
- nettverk
- nevrale nettverket
- neste
- node
- noder
- Antall
- tilbudt
- tilby
- offisiell
- ONE
- opererer
- Drift
- Optimalisere
- optimalisert
- orkestre
- rekkefølge
- Annen
- skissert
- skisserer
- samlet
- oversikt
- parametere
- del
- bestått
- banen
- likemann
- ytelse
- fase
- Sted
- plattform
- plato
- Platon Data Intelligence
- PlatonData
- plugg inn
- plugins
- poeng
- Post
- powered
- kraftig
- forutsetninger
- prosess
- Progress
- gi
- forutsatt
- gir
- gi
- offentlig
- Publisering
- presset
- pytorch
- raskt
- tilfeldig
- virkelige verden
- referanser
- region
- regioner
- i slekt
- fjerne
- Repository
- krever
- påkrevd
- Krever
- Ressurser
- anmeldelse
- Kjør
- rennende
- sagemaker
- samme
- skalerbarhet
- skalerbar
- vekter
- skalering
- SDK
- sektor
- tjeneste
- Tjenester
- sett
- flere
- delt
- Shell
- bør
- vist
- Viser
- signifikant
- på samme måte
- størrelser
- mindre
- So
- Software
- løsning
- Solutions
- noen
- spesifisert
- stable
- stående
- Standard
- startet
- oppstart
- Trinn
- Steps
- Still
- lagring
- oppbevare
- slik
- støtte
- Støttes
- Støtter
- synkronisering
- system
- bord
- ta
- lag
- Teknisk
- mal
- midlertidig
- Testing
- De
- Storbritannia
- deres
- tusener
- Gjennom
- hele
- tid
- til
- verktøy
- verktøy
- Kurs
- sant
- tutorial
- Uk
- unik
- Universell
- bruke
- Bruker
- ulike
- versjon
- av
- volum
- måter
- uker
- om
- hvilken
- mens
- vil
- innenfor
- arbeidstaker
- arbeidere
- ville
- yaml
- Du
- Din
- zephyrnet
- soner