De senaste åren har visat en otrolig tillväxt i deep learning neurala nätverk (DNN). Denna tillväxt kan ses i mer exakta modeller och till och med öppna nya möjligheter med generativ AI: stora språkmodeller (LLM) som syntetiserar naturligt språk, text-till-bild-generatorer och mer. Dessa ökade möjligheter hos DNN:er kommer med kostnaden för att ha massiva modeller som kräver betydande beräkningsresurser för att kunna tränas. Distribuerad utbildning tar itu med detta problem med två tekniker: dataparallellism och modellparallellism. Dataparallellism används för att skala utbildningsprocessen över flera noder och arbetare, och modellparallellism delar upp en modell och passar dem över den utsedda infrastrukturen. Amazon SageMaker distribuerad utbildning jobb gör att du med ett klick (eller ett API-anrop) kan ställa in ett distribuerat beräkningskluster, träna en modell, spara resultatet till Amazon enkel lagringstjänst (Amazon S3), och stäng av klustret när det är klart. Dessutom har SageMaker kontinuerligt förnyat sig i det distribuerade träningsutrymmet genom att lansera funktioner som heterogena kluster och distribuerade utbildningsbibliotek för data parallellism och modell parallellism.
Effektiv träning i en distribuerad miljö kräver justering av hyperparametrar. Ett vanligt exempel på god praxis när man tränar på flera GPU:er är att multiplicera batchstorlek (eller minibatch) med GPU-numret för att behålla samma batchstorlek per GPU. Men att justera hyperparametrar påverkar ofta modellkonvergensen. Därför måste distribuerad träning balansera tre faktorer: distribution, hyperparametrar och modellnoggrannhet.
I det här inlägget utforskar vi effekten av distribuerad träning på konvergens och hur man använder den Amazon SageMaker Automatisk modellinställning att finjustera modellhyperparametrar för distribuerad träning med hjälp av dataparallellism.
Källkoden som nämns i det här inlägget kan hittas på GitHub repository (en m5.xlarge-instans rekommenderas).
Skala ut träning från en enskild till distribuerad miljö
Dataparallellism är ett sätt att skala utbildningsprocessen till flera beräkningsresurser och uppnå snabbare träningstid. Med dataparallellism partitioneras data mellan beräkningsnoderna, och varje nod beräknar gradienterna baserat på deras partition och uppdaterar modellen. Dessa uppdateringar kan göras med en eller flera parameterservrar på ett asynkront, en-till-många- eller allt-till-alla-sätt. Ett annat sätt kan vara att använda en AllReduce-algoritm. Till exempel, i ring-allreduce-algoritmen kommunicerar varje nod med endast två av sina närliggande noder, vilket minskar de totala dataöverföringarna. För att lära dig mer om parameterservrar och ring-allreduce, se Lansering av TensorFlow distribuerad träning enkelt med Horovod eller Parameter Servers i Amazon SageMaker. När det gäller datapartitionering, om det finns n beräkna noder, då bör varje nod få en delmängd av data, ungefär 1/n i storlek.
För att demonstrera effekten av att skala ut träning på modellkonvergens kör vi två enkla experiment:
Varje modellträning kördes två gånger: på en enda instans och fördelad över flera instanser. För den distribuerade DNN-utbildningen multiplicerade vi minibatchstorleken med antalet instanser (fyra) för att kunna utnyttja de distribuerade processorerna fullt ut. Följande tabell sammanfattar inställningen och resultaten.
Problemtyp | Bildklassificering | Binär klassificering | ||
Modell | DNN | XGBoost | ||
Exempel | ml.c4.xstor | ml.m5.2xstor | ||
Datauppsättning |
(Märkta bilder) |
Direktmarknadsföring (tabell-, numeriska och vektoriserade kategorier) |
||
Valideringsmått | Noggrannhet | AUC | ||
Epocs/Rounds | 20 | 150 | ||
Antal instanser | 1 | 4 | 1 | 3 |
Distributionstyp | N / A | Parameterserver | N / A | AllaReducera |
Träningstid (minuter) | 8 | 3 | 3 | 1 |
Slutlig valideringspoäng | 0.97 | 0.11 | 0.78 | 0.63 |
För båda modellerna reducerades träningstiden nästan linjärt av fördelningsfaktorn. Modellkonvergensen föll dock betydligt. Detta beteende är konsekvent för de två olika modellerna, de olika beräkningsinstanserna, de olika distributionsmetoderna och olika datatyper. Så varför påverkade distributionen av utbildningsprocessen modellens noggrannhet?
Det finns ett antal teorier som försöker förklara denna effekt:
- När tensoruppdateringar är stora i storlek kan trafiken mellan arbetare och parameterservern bli överbelastad. Därför kommer asynkrona parameterservrar att drabbas av betydligt sämre konvergens på grund av förseningar i viktuppdateringar [1].
- En ökad batchstorlek kan leda till överanpassning och dålig generalisering, vilket minskar valideringsnoggrannheten [2].
- När man asynkront uppdaterar modellparametrar, kanske vissa DNN:er inte använder de senast uppdaterade modellvikterna; därför kommer de att beräkna gradienter baserat på vikter som ligger några iterationer efter. Detta leder till viktnedgång [3] och kan orsakas av ett antal orsaker.
- Vissa hyperparametrar är modell- eller optimeringsspecifika. Till exempel säger XGBoosts officiella dokumentation att
exact
värde förtree_mode
hyperparameter stöder inte distribuerad träning eftersom XGBoost använder raddelningsdatadistribution medanexact
trädmetoden fungerar på ett sorterat kolumnformat. - Vissa forskare föreslog att konfigurering av en större minibatch kan leda till gradienter med mindre stokasticitet. Detta kan hända när förlustfunktionen innehåller lokala minima och sadelpunkter och ingen förändring görs av stegstorleken, för att optimering fastnar i sådana lokala minima eller sadelpunkter [4].
Optimera för distribuerad träning
Hyperparameteroptimering (HPO) är processen att söka och välja en uppsättning hyperparametrar som är optimala för en inlärningsalgoritm. SageMaker Automatic Model Tuning (AMT) tillhandahåller HPO som en hanterad tjänst genom att köra flera träningsjobb på den tillhandahållna datamängden. SageMaker AMT söker igenom intervallen av hyperparametrar som du anger och returnerar de bästa värdena, mätt med ett mått du väljer. Du kan använda SageMaker AMT med de inbyggda algoritmerna eller använda dina anpassade algoritmer och behållare.
Att optimera för distribuerad utbildning skiljer sig dock från vanliga HPO eftersom istället för att lansera en enda instans per utbildningsjobb, startar varje jobb faktiskt ett kluster av instanser. Detta innebär en större inverkan på kostnaden (särskilt om du överväger dyra GPU-accelererade instanser, som är typiska för DNN). Dessutom AMT-gränser, du kan möjligen slå SageMaker kontogränser för samtidigt antal träningstillfällen. Slutligen kan lanseringskluster införa driftskostnader på grund av längre starttid. SageMaker AMT har specifika funktioner för att lösa dessa problem. Hyperband med tidig stopp säkerställer att välpresterande hyperparameterkonfigurationer finjusteras och de som underpresterar stoppas automatiskt. Detta möjliggör ett effektivt utnyttjande av träningstiden och minskar onödiga kostnader. Dessutom stöder SageMaker AMT fullt ut användningen av Amazon EC2 Spot Instances, vilket kan optimera utbildningskostnad upp till 90 % över on-demand-instanser. När det gäller långa starttider, återanvänder SageMaker AMT automatiskt träningsinstanser inom varje trimningsjobb, vilket minskar den genomsnittliga starttiden för varje träningsjobb med 20 gånger. Dessutom bör du följa AMT bästa praxis, såsom att välja de relevanta hyperparametrarna, deras lämpliga intervall och skalor, och det bästa antalet samtidiga träningsjobb, och sätta ett slumpmässigt frö för att reproducera resultat.
I nästa avsnitt ser vi dessa funktioner i aktion när vi konfigurerar, kör och analyserar ett AMT-jobb med hjälp av XGBoost-exemplet som vi diskuterade tidigare.
Konfigurera, kör och analysera ett trimningsjobb
Som nämnts tidigare kan källkoden hittas på GitHub repo. I steg 1–5 laddar vi ner och förbereder data, skapar xgb3
estimator (den distribuerade XGBoost-estimatorn är inställd på att använda tre instanser), kör träningsjobben och observera resultaten. I det här avsnittet beskriver vi hur du ställer in inställningsjobbet för den skattaren, förutsatt att du redan har gått igenom steg 1–5.
Ett trimningsjobb beräknar optimala hyperparametrar för de träningsjobb som det startar genom att använda ett mått för att utvärdera prestanda. Du kan konfigurera ditt eget mått, som SageMaker kommer att analysera baserat på regex du konfigurerar och skickar till stdout
, eller använd måtten för SageMaker inbyggda algoritmer. I det här exemplet använder vi inbyggt XGBoost-målmått, så vi behöver inte konfigurera ett regex. För att optimera för modellkonvergens optimerar vi baserat på validerings-AUC-måttet:
Vi ställer in sju hyperparametrar:
- num_round – Antal rundor för boostning under träningen.
- eta – Krympning i stegstorlek som används i uppdateringar för att förhindra övermontering.
- alfa – L1-regleringsterm på vikter.
- min_barnvikt – Minsta summa av instansvikt (hessian) som behövs för ett barn. Om trädpartitionssteget resulterar i en lövnod med summan av instansvikten mindre än
min_child_weight
, ger byggprocessen upp ytterligare partitionering. - Max djup – Maximalt djup av ett träd.
- colsample_bylevel – Delsamplingsförhållande för kolumner för varje uppdelning, i varje nivå. Denna delsampling sker en gång för varje ny djupnivå som nås i ett träd.
- colsample_bytree – Delsamplingsförhållande mellan kolumner vid konstruktion av varje träd. För varje konstruerat träd sker delsamplingen en gång.
För att lära dig mer om XGBoost hyperparametrar, se XGBoost Hyperparametrar. Följande kod visar de sju hyperparametrarna och deras intervall:
Därefter tillhandahåller vi konfiguration för Hyperband-strategin och tunerobjektkonfigurationen med SageMaker SDK. HyperbandStrategyConfig
kan använda två parametrar: max_resource
(valfritt) för det maximala antalet iterationer som ska användas för ett träningsjobb för att uppnå målet, och min_resource
– det minsta antalet iterationer som ska användas av ett träningsjobb innan utbildningen avbryts. Vi använder HyperbandStrategyConfig
att konfigurera StrategyConfig
, som senare används av inställningsjobbdefinitionen. Se följande kod:
Nu skapar vi en HyperparameterTuner
objekt, till vilket vi skickar följande information:
- XGBoost-estimatorn, inställd på att köras med tre instanser
- Det objektiva måttets namn och definition
- Våra hyperparameterintervall
- Justera resurskonfigurationer som antal utbildningsjobb som ska köras totalt och hur många utbildningsjobb som kan köras parallellt
- Hyperbandsinställningar (strategin och konfigurationen vi konfigurerade i det sista steget)
- Tidig stopp (
early_stopping_type
) satt tillOff
Varför sätter vi tidigt stopp på Off? Utbildningsjobb kan stoppas tidigt när det är osannolikt att de förbättrar det objektiva måttet för hyperparameterjusteringsjobbet. Detta kan hjälpa till att minska beräkningstiden och undvika att din modell överanpassas. Hyperband använder dock en avancerad inbyggd mekanism för att tillämpa tidig stopp. Därför parametern early_stopping_type
måste ställas in på Off
när du använder Hyperbands interna funktionen för tidig stopp. Se följande kod:
Slutligen startar vi det automatiska modellinställningsjobbet genom att ringa till passa metod. Om du vill starta jobbet på ett asynkront sätt, ställ in wait
till False
. Se följande kod:
Du kan följa jobbets framsteg och sammanfattning på SageMaker-konsolen. I navigeringsfönstret, under Utbildningväljer Hyperparameter tuning jobb, välj sedan relevant trimningsjobb. Följande skärmdump visar trimningsjobbet med detaljer om träningsjobbens status och prestanda.
När trimningsjobbet är klart kan vi granska resultatet. I notebook-exemplet visar vi hur man extraherar resultat med SageMaker SDK. Först undersöker vi hur trimningsjobbet ökade modellkonvergensen. Du kan bifoga HyperparameterTuner
objekt med jobbnamnet och anropa beskriva metod. Metoden returnerar en ordbok som innehåller metadata och resultat för inställning av jobb.
I följande kod hämtar vi värdet av det bäst presterande träningsjobbet, mätt med vårt objektiva mått (validerings-AUC):
Resultatet är 0.78 i AUC på valideringsuppsättningen. Det är en betydande förbättring jämfört med de ursprungliga 0.63!
Låt oss sedan se hur snabbt vårt träningsjobb gick. För det använder vi HyperparameterTuningJobAnalytics metod i SDK:n för att hämta resultat om trimningsjobbet och läsa in i en Pandas dataram för analys och visualisering:
Låt oss se den genomsnittliga tiden ett träningsjobb tog med Hyperband-strategin:
Den genomsnittliga tiden tog cirka 1 minut. Detta överensstämmer med Hyperband-strategimekanismen som stoppar underpresterande utbildningsjobb tidigt. Kostnadsmässigt debiterade trimningsjobbet oss för totalt 30 minuters träningstid. Utan tidig stopp av Hyperband förväntades den totala fakturerbara utbildningslängden vara 90 minuter (30 jobb * 1 minut per jobb * 3 tillfällen per jobb). Det är tre gånger bättre i kostnadsbesparingar! Slutligen ser vi att trimjobbet körde 30 träningsjobb och tog totalt 12 minuter. Det är nästan 50 % mindre av den förväntade tiden (30 jobb/4 jobb parallellt * 3 minuter per jobb).
Slutsats
I det här inlägget beskrev vi några observerade konvergensproblem vid träning av modeller med distribuerade miljöer. Vi såg att SageMaker AMT med hjälp av Hyperband tog itu med de huvudsakliga problem som optimering av data parallellt distribuerad utbildning introducerade: konvergens (som förbättrades med mer än 10 %), operativ effektivitet (inställningsjobbet tog 50 % kortare tid än ett sekventiellt, icke-optimerat jobb skulle har tagit) och kostnadseffektivitet (30 kontra de 90 fakturerbara minuterna av träningstid). Följande tabell sammanfattar våra resultat:
Förbättringsmått | Ingen Tuning/Naiv Model Tuning Implementation | SageMaker Hyperband Automatisk modellinställning | Uppmätt förbättring |
Modellkvalitet (Mätt med validerings-AUC) |
0.63 | 0.78 | 15% |
Pris (Mätt i fakturerbara träningsminuter) |
90 | 30 | 66% |
Operativ effektivitet (Mätt som total körtid) |
24 | 12 | 50% |
För att finjustera med avseende på skalning (klusterstorlek) kan du upprepa inställningsjobbet med flera klusterkonfigurationer och jämföra resultaten för att hitta de optimala hyperparametrarna som tillfredsställer hastighet och modellnoggrannhet.
Vi inkluderade stegen för att uppnå detta i det sista avsnittet av anteckningsbok.
Referensprojekt
[1] Lian, Xiangru, et al. "Asynkron decentraliserad parallell stokastisk gradientnedstigning." Internationell konferens om maskininlärning. PMLR, 2018.
[2] Keskar, Nitish Shirish, et al. "Om storsatsvis utbildning för djupinlärning: Generaliseringsgap och skarpa minima." arXiv förtryck arXiv: 1609.04836 (2016).
[3] Dai, Wei, et al. "För att förstå effekten av staleness i distribuerad maskininlärning." arXiv förtryck arXiv: 1810.03264 (2018).
[4] Dauphin, Yann N., et al. "Identifiera och attackera sadelpunktsproblemet i högdimensionell icke-konvex optimering." Framsteg inom neurala informationsbehandlingssystem 27 (2014).
Om författaren
Uri Rosenberg är AI & ML Specialist Technical Manager för Europa, Mellanöstern och Afrika. Baserat från Israel arbetar Uri för att ge företagskunder möjlighet att designa, bygga och driva ML-arbetsbelastningar i stor skala. På fritiden tycker han om att cykla, vandra och klaga på dataförberedelser.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoData.Network Vertical Generative Ai. Styrka dig själv. Tillgång här.
- PlatoAiStream. Web3 Intelligence. Kunskap förstärkt. Tillgång här.
- Platoesg. Fordon / elbilar, Kol, CleanTech, Energi, Miljö, Sol, Avfallshantering. Tillgång här.
- BlockOffsets. Modernisera miljökompensation ägande. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/effectively-solve-distributed-training-convergence-issues-with-amazon-sagemaker-hyperband-automatic-model-tuning/
- : har
- :är
- :inte
- $UPP
- 1
- 10
- 100
- 12
- 15%
- 20
- 200
- 2014
- 2016
- 2018
- 24
- 27
- 30
- 7
- 8
- 9
- a
- Om Oss
- Konto
- noggrannhet
- exakt
- Uppnå
- Handling
- faktiskt
- Dessutom
- Dessutom
- adress
- adresser
- avancerat
- påverka
- afrika
- AI
- AL
- algoritm
- algoritmer
- alfa
- redan
- också
- fantastiska
- amason
- Amazon EC2
- Amazon SageMaker
- Amazon Web Services
- bland
- an
- analys
- analytics
- analysera
- och
- Annan
- api
- Ansök
- lämpligt
- cirka
- ÄR
- AS
- At
- bifoga
- Anfall
- Automat
- automatiskt
- genomsnitt
- undvika
- AWS
- Balansera
- baserat
- BE
- därför att
- innan
- beteende
- bakom
- BÄST
- Bättre
- mellan
- Stor
- öka
- båda
- SLUTRESULTAT
- Byggnad
- inbyggd
- by
- beräkning
- Ring
- anropande
- KAN
- Kan få
- kapacitet
- kategorier
- orsakas
- byta
- laddad
- barn
- Välja
- välja
- klick
- kluster
- koda
- Kolumn
- Kolonner
- komma
- Gemensam
- jämföra
- fullborda
- Compute
- oro
- konkurrent
- Konferens
- konfiguration
- konfigurerad
- Tänk
- konsekvent
- Konsol
- konstruera
- Behållare
- innehåller
- kontinuerligt
- Konvergens
- Pris
- kostsam
- Kostar
- kunde
- skapa
- beställnings
- Kunder
- DAI
- datum
- Förberedelse av data
- decentraliserad
- djup
- djupt lärande
- definition
- fördröjningar
- demonstrera
- djup
- beskriva
- beskriven
- Designa
- betecknad
- detaljer
- DID
- olika
- diskuteras
- distribueras
- distribuerad utbildning
- fördelnings
- fördelning
- do
- dokumentation
- inte
- gjort
- inte
- ner
- ladda ner
- Drop
- grund
- varaktighet
- under
- E&T
- varje
- Tidigare
- Tidig
- lätt
- öster
- effekt
- effektivt
- effektivitet
- effektiv
- sysselsätter
- ge
- möjliggöra
- möjliggör
- säkerställer
- Företag
- Miljö
- miljöer
- speciellt
- Europa
- utvärdera
- Även
- Varje
- undersöka
- exempel
- förväntat
- experiment
- Förklara
- utforska
- extrahera
- faktor
- faktorer
- Mode
- SNABB
- snabbare
- Leverans
- Funktioner
- få
- Slutligen
- hitta
- Förnamn
- passa
- följer
- efter
- För
- format
- hittade
- fyra
- RAM
- från
- fullständigt
- fungera
- ytterligare
- Vidare
- spalt
- generativ
- Generativ AI
- generatorer
- skaffa sig
- få
- ger
- god
- GPU
- GPUs
- gradienter
- större
- Tillväxt
- hända
- Har
- har
- he
- hjälpa
- hans
- Träffa
- Hur ser din drömresa ut
- How To
- Men
- html
- http
- HTTPS
- Inställning av hyperparameter
- if
- bilder
- Inverkan
- Konsekvenser
- förbättra
- förbättras
- förbättring
- in
- ingår
- ökat
- informationen
- Infrastruktur
- inledande
- exempel
- istället
- inre
- in
- införa
- introducerade
- Israel
- problem
- IT
- iterationer
- DESS
- Jobb
- Lediga jobb
- Ha kvar
- L1
- språk
- Large
- större
- Efternamn
- senare
- lansera
- lanserar
- lansera
- leda
- Leads
- LÄRA SIG
- inlärning
- mindre
- Nivå
- bibliotek
- tycka om
- lokal
- Lång
- längre
- förlust
- Maskinen
- maskininlärning
- gjord
- Huvudsida
- förvaltade
- chef
- många
- massiv
- maximal
- Maj..
- betyder
- mekanism
- nämnts
- metadata
- metod
- metoder
- metriska
- Metrics
- Mitten
- Mellanöstern
- kanske
- minsta
- minut
- minuter
- ML
- modell
- modeller
- mer
- mest
- multipel
- multiplicerat
- måste
- namn
- Natural
- Navigering
- Behöver
- behövs
- behov
- nätverk
- neurala nätverk
- Nya
- Nästa
- Nej
- nod
- noder
- anteckningsbok
- antal
- objektet
- mål
- observera
- of
- sänkt
- tjänsteman
- Ofta
- on
- On-Demand
- gång
- ONE
- endast
- öppning
- driva
- operativa
- optimala
- optimering
- Optimera
- optimera
- or
- beställa
- vår
- ut
- över
- övergripande
- egen
- pandor
- panelen
- Parallell
- parameter
- parametrar
- passera
- för
- prestanda
- Plats
- plato
- Platon Data Intelligence
- PlatonData
- Punkt
- poäng
- dålig
- Möjligheterna
- eventuellt
- Inlägg
- praktiken
- beredning
- Förbered
- förhindra
- Problem
- process
- bearbetning
- processorer
- Framsteg
- föreslagen
- ge
- förutsatt
- ger
- slumpmässig
- ratio
- kommit fram till
- Läsa
- skäl
- senaste
- rekommenderas
- minska
- Minskad
- minskar
- reducerande
- Hälsningar
- regex
- relevanta
- upprepa
- kräver
- Kräver
- forskare
- resurs
- Resurser
- resultera
- Resultat
- återgår
- översyn
- omgångar
- RAD
- Körning
- rinnande
- sagemaker
- SageMaker Automatisk modellinställning
- Samma
- Save
- såg
- säger
- SC
- Skala
- skalor
- skalning
- sDK
- söka
- §
- se
- frö
- sett
- väljer
- Servrar
- service
- Tjänster
- in
- inställning
- inställningar
- inställning
- sju
- skarp
- skall
- show
- visas
- Visar
- stänga
- signifikant
- signifikant
- Enkelt
- enda
- Storlek
- So
- LÖSA
- några
- Källa
- källkod
- Utrymme
- specialist
- specifik
- fart
- delas
- Delar upp
- Spot
- starta
- Starta
- start
- status
- Steg
- Steg
- slutade
- stoppa
- Stoppar
- förvaring
- Strategi
- sådana
- lidit
- SAMMANFATTNING
- stödja
- Stöder
- bord
- tagen
- tar
- Teknisk
- tekniker
- tensorflow
- termin
- villkor
- än
- den där
- Smakämnen
- källan
- deras
- Dem
- sedan
- Där.
- vari
- därför
- Dessa
- de
- detta
- de
- tre
- Genom
- tid
- gånger
- till
- tog
- Totalt
- trafik
- Tåg
- tränad
- Utbildning
- överföringar
- träd
- prova
- Dubbelt
- två
- typer
- typisk
- under
- förståelse
- osannolik
- onödig
- uppdaterad
- Uppdateringar
- uppdatering
- us
- användning
- Begagnade
- användningar
- med hjälp av
- utnyttja
- godkännande
- värde
- Värden
- visualisering
- vs
- vill
- var
- Sätt..
- we
- webb
- webbservice
- vikt
- begav sig
- när
- medan
- som
- varför
- wikipedia
- kommer
- med
- inom
- utan
- arbetare
- fungerar
- sämre
- skulle
- XGBoost
- år
- Om er
- Din
- zephyrnet