Den seneste udvikling inden for deep learning har ført til stadigt større modeller som GPT-3, BLOOM og OPT, hvoraf nogle allerede er på over 100 milliarder parametre. Selvom større modeller har tendens til at være mere kraftfulde, kræver træning af sådanne modeller betydelige beregningsressourcer. Selv med brugen af avancerede distribuerede træningsbiblioteker som FSDP og DeepSpeed, er det almindeligt, at træningsjob kræver hundredvis af acceleratorenheder i flere uger eller måneder ad gangen.
I slutningen af 2022 annoncerede AWS den generelle tilgængelighed af Amazon EC2 Trn1-forekomster drives af AWS Trainium—en specialbygget maskinlæringsaccelerator (ML) optimeret til at give en højtydende, omkostningseffektiv og massivt skalerbar platform til træning af dyb læringsmodeller i skyen. Trn1-forekomster fås i en række størrelser (se følgende tabel) med op til 16 Trainium-acceleratorer pr.
Forekomststørrelse | Trainium acceleratorer | Acceleratorhukommelse (GB) | vCPU'er | Forekomsthukommelse (GiB) | Netværksbåndbredde (Gbps) |
trn1.2xlarge | 1 | 32 | 8 | 32 | Op til 12.5 |
trn1.32xlarge | 16 | 512 | 128 | 512 | 800 |
trn1n.32xlarge (kommer snart) | 16 | 512 | 128 | 512 | 1600 |
Trn1-instanser kan enten implementeres som selvstændige instanser til mindre træningsjob eller i meget skalerbare ultraclusters, der understøtter distribueret træning på tværs af titusindvis af Trainium-acceleratorer. Alle Trn1-forekomster understøtter den selvstændige konfiguration, hvorimod Trn1-ultraklynger kræver trn1.32xlarge- eller trn1n.32xlarge-forekomster. I en ultraklynge er flere Trn1-forekomster samplaceret i en given AWS-tilgængelighedszone og er forbundet med højhastigheds-, lav-latens, Elastic Fabric Adapter (EFA)-netværk, der giver 800 Gbps ikke-blokerende netværksbåndbredde pr. instans til kollektive beregninger . Trn1n.32xlarge instanstypen, der lanceres i begyndelsen af 2023, vil øge denne båndbredde til 1600 Gbps pr. instans.
Mange virksomhedskunder vælger at implementere deres deep learning-arbejdsbelastninger ved hjælp af Kubernetes – de facto-standarden for containerorkestrering i skyen. AWS-kunder implementerer ofte disse arbejdsbelastninger vha Amazon Elastic Kubernetes Service (Amazon EKS). Amazon EKS er en administreret Kubernetes-tjeneste, der forenkler oprettelsen, konfigurationen, livscyklussen og overvågningen af Kubernetes-klynger, mens den stadig tilbyder den fulde fleksibilitet af opstrøms Kubernetes.
I dag er vi glade for at kunne annoncere officiel støtte til distribuerede træningsjob ved hjælp af Amazon EKS- og EC2 Trn1-instanser. Med denne meddelelse kan du nu nemt køre store containeriserede træningsjob i Amazon EKS, mens du udnytter den pris-ydeevne, skalerbarhed og brugervenlighed, som Trn1-instanser tilbyder.
Sammen med denne meddelelse udgiver vi også en detaljeret vejledning, der guider dig gennem de trin, der kræves for at køre et distribueret træningsjob med flere instanser (BERT fase 1 fortræning) ved hjælp af Amazon EKS- og Trn1-instanser. I dette indlæg lærer du om løsningsarkitekturen og gennemgår flere vigtige trin fra selvstudiet. Der henvises til officielt tutorial-lager for den komplette end-to-end workflow.
For at følge med, et bredt kendskab til kerne AWS-tjenester som f.eks Amazon Elastic Compute Cloud (Amazon EC2) og Amazon EKS er underforstået, og grundlæggende kendskab til dyb læring og PyTorch ville være nyttig.
Løsningsarkitektur
Følgende diagram illustrerer løsningsarkitekturen.
Løsningen består af følgende hovedkomponenter:
- En EKS-klynge
- En EKS-nodegruppe bestående af trn1.32xlarge instanser
- AWS Neuron SDK
- EKS plugins til Neuron og EFA
- An Amazon Elastic Container Registry (Amazon ECR) Rrepository
- Et træningsbeholderbillede
- An Amazon FSx til Luster filsystem
- En Volcano batchplanlægger og etcd server
- TorchX universal job launcher
- TorchX DDP-modulet til Trainium
Kernen i løsningen er en EKS-klynge, der giver dig kernefunktionalitet til Kubernetes-administration via et EKS-serviceslutpunkt. En af fordelene ved Amazon EKS er, at tjenesten aktivt overvåger og skalerer kontrolplanet baseret på belastning, hvilket sikrer høj ydeevne ved store arbejdsbelastninger som fx distribueret træning. Inde i EKS-klyngen er en nodegruppe bestående af to eller flere trn1.32xlarge Trainium-baserede instanser, der er bosat i den samme tilgængelighedszone.
Neuron SDK er softwarestakken, der giver driveren, compileren, runtime, framework-integration (for eksempel PyTorch Neuron) og brugerværktøjer, der giver dig adgang til fordelene ved Trainium-acceleratorerne. Neuron-enhedsdriveren kører direkte på EKS-noderne (Trn1-forekomster) og giver adgang til Trainium-chippene inde fra de træningsbeholdere, der lanceres på noderne. Neuron- og EFA-plugins er installeret i EKS-klyngen for at give adgang til de Trainium-chips og EFA-netværksenheder, der kræves til distribueret træning.
Et ECR-lager bruges til at gemme billederne af træningsbeholderen. Disse billeder indeholder Neuron SDK (undtagen Neuron-driveren, som kører direkte på Trn1-forekomsterne), PyTorch-træningsscript og nødvendige afhængigheder. Når et træningsjob lanceres på EKS-klyngen, trækkes containerbillederne først fra Amazon ECR til EKS-knuderne, og PyTorch-arbejderbeholderne instansieres derefter fra billederne.
Delt lagring leveres ved hjælp af et højtydende FSx for Luster-filsystem, der findes i den samme tilgængelighedszone som trn1.32xlarge-forekomsterne. Oprettelse og vedhæftning af FSx for Luster-filsystemet til EKS-klyngen formidles af Amazon FSx til Luster CSI driver. I denne løsning bruges det delte lager til at gemme træningsdatasættet og eventuelle logfiler eller artefakter, der er oprettet under træningsprocessen.
Løsningen bruger TorchX universal job launcher at lancere distribuerede træningsjob inden for Amazon EKS. TorchX har to vigtige afhængigheder: Volcano batchplanlæggeren og etcd-serveren. Volcano håndterer planlægning og kø af træningsjob, mens etcd-serveren er et nøgleværdilager, der bruges af TorchElastic til synkronisering og peer-opdagelse under jobopstart.
Når et træningsjob startes ved hjælp af TorchX, bruger startkommandoen det medfølgende TorchX-distribuerede DDP-modul til Trainium til at konfigurere det overordnede træningsjob og derefter køre de passende torchrun-kommandoer på hver af PyTorch worker pods. Når et job kører, kan det overvåges ved hjælp af standard Kubernetes-værktøjer (såsom kubectl) eller via standard ML-værktøjssæt såsom TensorBoard.
Løsningsoversigt
Lad os se på de vigtige trin i denne løsning. I hele denne oversigt henviser vi til Start et Multi-Node PyTorch Neuron Training Job på Trainium ved hjælp af TorchX og EKS tutorial på GitHub.
Opret en EKS-klynge
For at komme i gang med distribuerede træningsjob i Amazon EKS med Trn1-instanser, skal du først oprette en EKS-klynge som beskrevet i tutorial på GitHub. Klyngeoprettelse kan opnås ved hjælp af standardværktøjer som f.eks eksctl
, AWS CloudFormation.
Opret en EKS-nodegruppe
Dernæst skal vi oprette en EKS-nodegruppe, der indeholder to eller flere trn1.32xlarge forekomster i en understøttet region. I selvstudiet, AWS CloudFormation bruges til at skabe en Trainium-specifik EC2-lanceringsskabelon, som sikrer, at Trn1-instanserne lanceres med et passende Amazon Machine Image (AMI) og den korrekte EFA-netværkskonfiguration, der er nødvendig for at understøtte distribueret træning. AMI inkluderer også Neuron-enhedsdriveren, der understøtter Trainium acceleratorchips. Med eksctl
Amazon EKS-styringsværktøj, kan du nemt oprette en Trainium-nodegruppe ved hjælp af et grundlæggende YAML-manifest, der refererer til den nyoprettede lanceringsskabelon. For eksempel:
I det foregående manifest er flere attributter konfigureret til at tillade brug af Trn1-instanser i EKS-klyngen. Først, metadata.region
er indstillet til en af de regioner, der understøtter Trn1-forekomster (i øjeblikket us-east-1
, us-west-2
). Dernæst, for tilgængelighedszoner, kræver Amazon EKS, at der angives to tilgængelighedszoner. En af disse tilgængelighedszoner skal understøtte brugen af Trn1-instanser, mens den anden kan vælges tilfældigt. Selvstudiet viser, hvordan man bestemme, hvilke tilgængelighedszoner der vil tillade Trn1-forekomster på din AWS-konto. Den samme Trn1-understøttende tilgængelighedszone skal også angives ved hjælp af availabiltyZones
attribut knyttet til EKS-nodegruppen. efaEnabled
er sat til true
at konfigurere noderne med den passende EFA-netværkskonfiguration, der kræves til distribueret træning. Til sidst launchTemplate.id
attribut knyttet til nodegruppen peger på EC2-lanceringsskabelonen oprettet via AWS CloudFormation i et tidligere trin.
Forudsat at du allerede har anvendt CloudFormation-skabelonen og installeret eksctl
administrationsværktøj, kan du oprette en Trainium-kompatibel EKS-nodegruppe ved at køre følgende kode:
Installer Kubernetes-plugins til Trainium- og EFA-enheder
Med nodegruppen på plads er næste trin at installere Kubernetes-plugins, der understøtter Trainium-acceleratorerne (via Neuron-plugin) og EFA-enhederne (via EFA-plugin). Disse plugins kan nemt installeres på klyngen ved hjælp af standarden kubectl
styringsværktøj som vist i selvstudiet.
For at bruge TorchX universelle PyTorch launcher til at starte distribuerede træningsjob kræves der to forudsætninger: Volcano batchplanlæggeren og etcd-serveren. Meget ligesom Neuron og EFA plugins, kan vi bruge kubectl
værktøj til at installere Volcano og etcd-serveren på EKS-klyngen.
Tilslut delt lager til EKS-klyngen
I selvstudiet bruges FSx for Luster til at levere et højtydende delt filsystem, der kan tilgås af de forskellige EKS worker pods. Dette delte lager bruges til at være vært for træningsdatasættet, såvel som eventuelle artefakter og logfiler, der oprettes under træningsprocessen. Selvstudiet beskriver, hvordan du opretter og vedhæfter det delte lager til klyngen ved hjælp af Amazon FSx til Luster CSI driver.
Opret et træningsbeholderbillede
Dernæst skal vi oprette et træningsbeholderbillede, der inkluderer PyTorch-træningsscriptet sammen med eventuelle afhængigheder. Et eksempel på Dockerfile er inkluderet i selvstudiet, som inkorporerer BERT-fortræningsscriptet sammen med dets softwareafhængigheder. Dockerfilen bruges til at bygge træningsbeholderbilledet, og billedet skubbes derefter til et ECR-lager, hvorfra PyTorch-arbejderne er i stand til at trække billedet, når et træningsjob startes på klyngen.
Indstil træningsdataene
Før et træningsjob startes, kopieres træningsdataene først til den delte lagervolumen på FSx for Lustre. Selvstudiet beskriver, hvordan man opretter en midlertidig Kubernetes-pod, der har adgang til den delte lagervolumen, og viser, hvordan man logger på poden for at downloade og udtrække træningsdatasættet ved hjælp af standard Linux-shell-kommandoer.
Med de forskellige infrastruktur- og software-forudsætninger på plads, kan vi nu fokusere på Trainium-aspekterne af løsningen.
Forkompiler din model
Neuron SDK understøtter PyTorch gennem et integrationslag kaldet PyTorch Neuron. Som standard opererer PyTorch Neuron med just-in-time kompilering, hvor de forskellige neurale netværks beregningsgrafer inden for et træningsjob kompileres, efterhånden som de stødes på under træningsprocessen. For større modeller kan det være mere praktisk at bruge den medfølgende neuron_parallel_compile
værktøj til at prækompilere og cache de forskellige beregningsgrafer på forhånd for at undgå grafkompilering på træningstidspunktet. Før du starter træningsjobbet på EKS-klyngen, viser selvstudiet, hvordan du først starter et prækompileringsjob via TorchX ved hjælp af neuron_parallel_compile
værktøj. Efter færdiggørelsen af prækompileringsjobbet vil Neuron-kompileren have identificeret og kompileret alle de neurale netværks-beregningsgrafer og cachelagret dem til den delte lagervolumen til senere brug under selve BERT-fortræningsopgaven.
Start det distribuerede træningsjob
Med fuldført prækompilering bruges TorchX derefter til at lancere et 64-medarbejders distribueret træningsjob på tværs af to trn1.32xlarge instanser med 32 arbejdere pr. instans. Vi bruger 32 arbejdere pr. instans, fordi hver trn1.32xlarge instans indeholder 16 Trainium-acceleratorer, hvor hver accelerator giver 2 Neuronkerner. Hver NeuronCore kan tilgås som en unik PyTorch XLA-enhed i træningsmanuskriptet. Et eksempel på TorchX-startkommando fra selvstudiet ser ud som følgende kode:
De forskellige kommandolinjeargumenter i den foregående TorchX-kommando er beskrevet detaljeret i selvstudiet. Følgende argumenter er dog vigtigst ved konfiguration af træningsjobbet:
- -cfg kø=test – Angiver vulkankøen, der skal bruges til træningsjobbet
- -cfg image_repo – Angiver det ECR-lager, der skal bruges til TorchX-beholderbillederne
- –script_args – Angiver eventuelle argumenter, der skal sendes til PyTorch-træningsscriptet
- –nnodes og –nproc_per_node – Antallet af instanser og arbejdere pr. instans, der skal bruges til træningsjobbet
- -manuskript – Navnet på PyTorch-træningsscriptet, der skal startes i træningsbeholderen
- -Billede – Stien til træningsbeholderbilledet i Amazon ECR
- –bf16 – Om BF16 datatype skal aktiveres eller ej
Overvåg træningsjobbet
Efter at uddannelsesjobbet er sat i gang, er der forskellige måder, hvorpå jobbet kan overvåges. Selvstudiet viser, hvordan man overvåger grundlæggende træningsscript-metrikker på kommandolinjen ved hjælp af kubectl
, hvordan man visuelt overvåger træningsscript-fremskridt i TensorBoard (se følgende skærmbillede), og hvordan man overvåger Trainium-acceleratorudnyttelsen ved hjælp af neuron-top
værktøj fra Neuron SDK.
Ryd op eller genbrug miljøet
Når træningsopgaven er fuldført, kan klyngen derefter genbruges eller omkonfigureres til yderligere træningsjob. For eksempel kan EKS-nodegruppen hurtigt skaleres op ved hjælp af eksctl
kommando for at understøtte træningsjob, der kræver yderligere Trn1-instanser. På samme måde kan de medfølgende Dockerfile- og TorchX-startkommandoer nemt ændres for at understøtte yderligere dyb læringsmodeller og distribuere træningstopologier.
Hvis klyngen ikke længere er påkrævet, inkluderer selvstudiet også alle nødvendige trin for at fjerne EKS-infrastrukturen og relaterede ressourcer.
Konklusion
I dette indlæg undersøgte vi, hvordan Trn1-instanser og Amazon EKS giver en administreret platform til højtydende, omkostningseffektiv og massivt skalerbar distribueret træning af deep learning-modeller. Vi delte også en omfattende vejledning, der viser, hvordan man kører et multi-instans-distribueret træningsjob i den virkelige verden i Amazon EKS ved hjælp af Trn1-instanser, og fremhævede flere af de vigtigste trin og komponenter i løsningen. Dette vejledningsindhold kan nemt tilpasses til andre modeller og arbejdsbelastninger og giver dig en grundlæggende løsning til distribueret træning af deep learning-modeller i AWS.
For at lære mere om, hvordan du kommer i gang med Trainium-drevne Trn1-forekomster, se Neuron dokumentation.
Om forfatterne
Scott Perry er Solutions Architect på Annapurna ML accelerator-teamet hos AWS. Baseret i Canada hjælper han kunder med at implementere og optimere deep learning-træning og inferensarbejdsbelastninger ved hjælp af AWS Inferentia og AWS Trainium. Hans interesser omfatter store sprogmodeller, deep reinforcement learning, IoT og genomics.
Lorea Arrizabalaga er en Solutions Architect tilpasset den britiske offentlige sektor, hvor hun hjælper kunder med at designe ML-løsninger med Amazon SageMaker. Hun er også en del af Technical Field Community dedikeret til hardwareacceleration og hjælper med at teste og benchmarke AWS Inferentia og AWS Trainium-arbejdsbelastninger.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- Platoblokkæde. Web3 Metaverse Intelligence. Viden forstærket. Adgang 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
- accelerator
- acceleratorer
- adgang
- af udleverede
- opnået
- tværs
- aktivt
- Yderligere
- fremme
- fremskreden
- Fordel
- justeret
- Alle
- allerede
- Skønt
- Amazon
- Amazon EC2
- Amazon SageMaker
- ,
- Annoncere
- annoncerede
- Fondsbørsmeddelelse
- anvendt
- passende
- arkitektur
- argumenter
- aspekter
- forbundet
- vedhæfte
- attributter
- tilgængelighed
- til rådighed
- AWS
- AWS CloudFormation
- AWS-inferens
- båndbredde
- baseret
- grundlæggende
- fordi
- før
- benchmarking
- fordele
- Billion
- Bloom
- bred
- bygge
- Cache
- kaldet
- Canada
- Chips
- Vælg
- valgt
- Cloud
- Cluster
- kode
- kollektive
- kommer
- Coming Soon
- Fælles
- samfund
- fuldføre
- færdiggørelse
- komponenter
- omfattende
- Compute
- Konfiguration
- tilsluttet
- Bestående
- Container
- Beholdere
- indeholder
- indhold
- kontrol
- Praktisk
- Core
- omkostningseffektiv
- skabe
- oprettet
- Oprettelse af
- skabelse
- CSI
- For øjeblikket
- Kunder
- data
- DDP
- dedikeret
- dyb
- dyb læring
- Standard
- indsætte
- indsat
- beskrevet
- Design
- detail
- detaljeret
- udvikling
- enhed
- Enheder
- direkte
- opdagelse
- distribueret
- distribueret træning
- distribution
- downloade
- driver
- i løbet af
- hver
- tidligere
- Tidligt
- brugervenlighed
- nemt
- enten
- muliggøre
- ende til ende
- Endpoint
- sikrer
- Enterprise
- Endog
- eksempel
- ophidset
- Eksklusive
- eksisterer
- udforsket
- ekstrakt
- stof
- Kendskab
- felt
- File (Felt)
- Fornavn
- Fleksibilitet
- Fokus
- følger
- efter
- Framework
- fra
- fuld
- funktionalitet
- Generelt
- genomforskning
- få
- GitHub
- given
- graf
- grafer
- gruppe
- Guides
- Håndterer
- Hardware
- Hjerte
- hjælpsom
- hjælper
- Høj
- Høj ydeevne
- Fremhævet
- stærkt
- host
- Hvordan
- How To
- Men
- HTML
- HTTPS
- Hundreder
- ID
- identificeret
- billede
- billeder
- underforstået
- vigtigt
- in
- omfatter
- medtaget
- omfatter
- Forøg
- stigende
- Infrastruktur
- installere
- installeret
- instans
- integration
- interesser
- tingenes internet
- IT
- Job
- Karriere
- Nøgle
- Venlig
- Sprog
- stor
- storstilet
- større
- Sent
- lancere
- lanceret
- lancering
- lag
- LÆR
- læring
- Led
- biblioteker
- Line (linje)
- linux
- belastning
- længere
- Se
- UDSEENDE
- maskine
- machine learning
- Main
- lykkedes
- ledelse
- massivt
- Hukommelse
- Metadata
- Metrics
- ML
- modeller
- modificeret
- Moduler
- Overvåg
- overvåges
- overvågning
- skærme
- måned
- mere
- mest
- flere
- navn
- Behov
- netværk
- netværk
- neurale netværk
- næste
- node
- noder
- nummer
- tilbydes
- tilbyde
- officiel
- ONE
- opererer
- Produktion
- Optimer
- optimeret
- orkestrering
- ordrer
- Andet
- skitseret
- konturer
- samlet
- oversigt
- parametre
- del
- Bestået
- sti
- peer
- ydeevne
- fase
- Place
- perron
- plato
- Platon Data Intelligence
- PlatoData
- plugin
- Plugins
- punkter
- Indlæg
- strøm
- vigtigste
- forudsætninger
- behandle
- Progress
- give
- forudsat
- giver
- leverer
- offentlige
- Publicering
- skubbet
- pytorch
- hurtigt
- tilfældig
- virkelige verden
- referencer
- region
- regioner
- relaterede
- Fjern
- Repository
- kræver
- påkrævet
- Kræver
- Ressourcer
- gennemgå
- Kør
- kører
- sagemaker
- samme
- Skalerbarhed
- skalerbar
- skalaer
- skalering
- SDK
- sektor
- tjeneste
- Tjenester
- sæt
- flere
- delt
- Shell
- bør
- vist
- Shows
- signifikant
- Tilsvarende
- størrelser
- mindre
- So
- Software
- løsninger
- Løsninger
- nogle
- specificeret
- stable
- standalone
- standard
- påbegyndt
- opstart
- Trin
- Steps
- Stadig
- opbevaring
- butik
- sådan
- support
- Understøttet
- Understøtter
- synkronisering
- systemet
- bord
- tager
- hold
- Teknisk
- skabelon
- midlertidig
- Test
- UK
- deres
- tusinder
- Gennem
- hele
- tid
- til
- værktøj
- værktøjer
- Kurser
- sand
- tutorial
- Uk
- enestående
- Universal
- brug
- Bruger
- forskellige
- udgave
- via
- bind
- måder
- uger
- hvorvidt
- som
- mens
- vilje
- inden for
- arbejdstager
- arbejdere
- ville
- yaml
- Du
- Din
- zephyrnet
- zoner