De siste årene har det vært en rivende utvikling innen naturlig språkbehandling (NLP). Mens maskinvaren har forbedret seg, for eksempel med den siste generasjonen av akseleratorer fra NVIDIA og Amazon, støter brukere av avansert maskinlæring (ML) fortsatt jevnlig på problemer med å skalere sine store språkmodeller på tvers av flere GPU-er.
I dette blogginnlegget oppsummerer vi kort fremveksten av store og små NLP-modeller, først og fremst gjennom abstraksjonen levert av Hugging Face og med den modulære backend av Amazon SageMaker. Spesielt fremhever vi lanseringen av fire tilleggsfunksjoner i SageMaker-modellens parallellbibliotek som låser opp 175 milliarder parameter NLP-modellforopplæring og finjustering for kunder.
Vi brukte dette biblioteket på SageMaker-treningsplattformen og oppnådde en gjennomstrømning på 32 prøver per sekund på 120 ml.p4d.24xlarge forekomster og 175 milliarder parametere. Vi forventer at hvis vi øker dette til 240 forekomster, vil det ta 25 dager å trene hele modellen.
For mer informasjon om modellparallellisme, se artikkelen Amazon SageMaker Model Parallelism: A General and Flexible Framework for Large Model Training.
Du kan også se GPT2-notisboken vi brukte til å generere disse ytelsestallene på vår GitHub repository.
For å lære mer om hvordan du bruker de nye funksjonene i SageMaker modell parallell, se Utvidede funksjoner i SageMaker Model Parallel Library for PyTorchog Bruk med SageMaker Python SDK.
NLP på Amazon SageMaker – Hugging Face og modellparallellisme
Hvis du er ny til Hugging Face og NLP, er det største høydepunktet du trenger å vite at applikasjoner som bruker naturlig språkbehandling (NLP) begynner å oppnå ytelse på menneskelig nivå. Dette er i stor grad drevet av en læringsmekanisme, kalt oppmerksomhet, som ga opphav til en dyp læringsmodell, kalt transformator, som er mye mer skalerbar enn tidligere sekvensielle metoder for dyp læring. Den nå kjente BERT modell ble utviklet for å utnytte transformatoren, og utviklet flere nyttige NLP-taktikker underveis. Transformers og modellene, både innenfor og utenfor NLP, som alle er inspirert av BERT, er hovedmotoren bak Google-søkeresultatene dine, i din Google oversetter resultaterog en rekke nye startups.
SageMaker og Hugging Face gikk sammen for å gjøre dette enklere for kundene enn noen gang før. Vi har lansert Hugging Face deep learning containers (DLC-er) for deg å trene og være vert for forhåndstrente modeller direkte fra Hugging Face's lager av over 26,000 XNUMX modeller. Vi har lansert SageMaker Training Compiler slik at du kan øke kjøretiden til Hugging Face-treningsløkkene med opptil 50 %. Vi har også integrert flaggskipet Hugging Face Transformers SDK med våre distribuerte opplæringsbiblioteker for å gjøre det enklere enn noen gang før å skalere ut NLP-modellene dine.
For mer informasjon om Hugging Face Transformer-modeller på Amazon SageMaker, se Støtte for Hugging Face Transformer-modeller.
Nye funksjoner for storskala NLP-modellopplæring med SageMaker-modellens parallellbibliotek
På AWS re:Invent 2020 lanserte SageMaker distribuerte biblioteker som gir den beste ytelsen på skyen for trening av datasynsmodeller som Maske-RCNN og NLP-modeller som T5-3B. Dette er mulig gjennom forbedrede kommunikasjonsprimitiver som er 20-40 % raskere enn NCCL på AWS, og modelldistribusjonsteknikker som gjør det mulig for ekstremt store språkmodeller å skalere over titalls til hundrevis til tusenvis av GPUer.
SageMaker-modellens parallellbibliotek (SMP) har alltid gitt deg muligheten til å ta den forhåndsdefinerte NLP-modellen din i PyTorch, det være seg gjennom Hugging Face eller andre steder, og partisjonere den modellen på flere GPUer i klyngen din. Sagt på en annen måte, deler SMP opp modellen din i mindre biter, slik at du ikke opplever feil for tom minne (OOM). Vi er glade for å legge til flere minnebesparende teknikker som er kritiske for modeller i stor skala, nemlig:
- Tensorparallellisme
- Optimizer-tilstandsdeling
- Aktivering sjekkpunkt
- Aktivering avlasting
Du kan kombinere disse fire funksjonene kan kombineres for å utnytte minnet mer effektivt og trene neste generasjon NLP-modeller i ekstrem skala.
Distribuert trening og tensorparallellisme
For å forstå tensorparallellisme, er det nyttig å vite at det finnes mange typer distribuert trening, eller parallellisme. Du er sannsynligvis allerede kjent med den vanligste typen, dataparallellisme. Kjernen av dataparallellisme fungerer slik: du legger til en ekstra node til klyngen din, for eksempel å gå fra én til to ml.EC2-forekomster i SageMaker-estimatoren. Deretter bruker du et dataparallelt rammeverk som Horovod, PyTorch Distributed Data Parallel eller SageMaker Distributed. Dette skaper replikaer av modellen din, én per akselerator, og håndterer utdeling av data til hver node, sammen med å bringe alle resultatene sammen under forplantningstrinnet til det nevrale nettverket ditt. Tenk på distribuert gradientnedstigning. Dataparallellisme er også populært innenfor servere; du deler data inn i alle GPU-ene, og noen ganger CPUer, på alle nodene dine. Følgende diagram illustrerer dataparallellisme.
Modellparallellisme er litt annerledes. I stedet for å lage kopier av samme modell, deler vi modellen din i biter. Deretter administrerer vi kjøringen, slik at dataene dine fortsatt flyter gjennom det nevrale nettverket ditt på nøyaktig samme mate matematisk, men forskjellige deler av modellen din sitter på forskjellige GPUer. Hvis du bruker en ml.p3.8xlarge, har du fire NVIDIA V100-er, så du vil sannsynligvis dele modellen din i 4 deler, ett stykke per GPU. Hvis du hopper opp til to ml.p4d.24xlarge, er det 16 A100-er totalt i klyngen din, så du kan dele modellen i 16 deler. Dette kalles også noen ganger rørledningsparallellisme. Det er fordi settet med lag i nettverket er partisjonert på tvers av GPUer, og kjøres på en pipelinet måte for å maksimere GPU-utnyttelsen. Følgende diagram illustrerer modellparallellisme.
For å få modellparallellisme til å skje i skala, trenger vi en tredje type distribusjon: tensorparallellisme. Tensor-parallellisme bruker de samme konseptene på ett skritt videre – vi bryter fra hverandre de største lagene i det nevrale nettverket ditt og plasserer deler av lagene selv på forskjellige enheter. Dette er relevant når du jobber med 175 milliarder parametere eller mer, og prøver å få plass til noen få poster i RAM, sammen med deler av modellen din, for å trene opp den transformatoren. Følgende diagram illustrerer tensorparallellisme.
For å aktivere tensorparallellisme, sett den innenfor smp-alternativene du går videre til din estimator.
I foregående kode pipeline_parallel_degree
beskriver i hvor mange segmenter modellen din skal deles, basert på pipeline-parallellen vi diskuterte ovenfor. Et annet ord for dette er skårer.
For å aktivere tensorparallellisme, still inn tensor_parallel_degree
til ønsket nivå. Sørg for at du velger et tall som er lik eller mindre enn antall GPUer per forekomst, så ikke større enn 8 for ml.p4d.24xlarge-maskinene. For ytterligere skriptendringer, se Kjør en SageMaker Distribuert Model Parallell Training Job med Tensor Parallelism.
ddp-parameteren refererer til distribuerte data parallelt. Du aktiverer vanligvis dette hvis du bruker dataparallellisme eller tensorparallellisme, fordi modellparallellismebiblioteket er avhengig av DDP for disse funksjonene.
Optimizer-tilstandsskjæring, aktiveringsavlasting og sjekkpunkter
Hvis du har en ekstremt stor modell, trenger du også en ekstremt stor optimeringstilstand. Det er enkelt å forberede optimizeren din for SMP: bare plukke den opp fra disken i skriptet og last den inn i smp.DistributedOptimizer()
gjenstand.
Pass på at du aktiverer dette ved estimatoren ved å stille inn shard_optimizer_state
til Sant i smp_options
du bruker til å konfigurere SMP:
I likhet med tensor- og pipeline-parallellisme, profilerer SMP modellen din og verdensstørrelsen (det totale antallet GPUer i alle treningsnodene dine), for å finne de beste plasseringsstrategiene.
I dyp læring kalles mellomlagsutgangene også aktiveringer, og disse må lagres under foroverpassering. Dette er fordi de må brukes til gradientberegning i bakoverpasseringen. I en stor modell kan lagring av alle disse aktiveringene samtidig i minnet skape betydelige minneflaskehalser. For å løse denne flaskehalsen kan du bruke aktiveringssjekkpunkt, den tredje nye funksjonen i SageMaker modell parallellitet bibliotek. Aktivering sjekkpunkt, eller gradientkontrollpunkt, er en teknikk for å redusere minnebruken ved å fjerne aktiveringer av visse lag og beregne dem på nytt under en bakoverpassering. Dette bytter effektivt ut ekstra beregningstid for redusert minnebruk.
Til slutt, aktivering avlasting bruker direkte aktiveringssjekkpunkt. Det er en strategi å beholde bare noen få tensoraktiveringer på GPU RAM under modelltreningen. Spesifikt flytter vi de sjekkpunktaktiverte aktiveringene til CPU-minnet under foroverpasseringen og laster dem tilbake til GPU for bakoverpassering av en spesifikk mikrobatch.
Mikrobatcher og plasseringsstrategier
Andre emner som noen ganger forårsaker forvirring hos kunder er mikrobatcher og plasseringsstrategier. Begge disse er hyperparametre du kan levere til SageMaker-modellens parallellbibliotek. Spesielt mikrobatcher er relevante når du implementerer modeller som er avhengige av pipeline-parallellisme, for eksempel de minst 30 milliarder parametere i størrelse eller mer.
Mikrobatcher er undergrupper av minibatcher. Når modellen din er i treningssløyfen, definerer du et visst antall poster for å plukke opp og passere forover og bakover gjennom lagene – dette kalles en minibatch, eller noen ganger bare en batch. En full gjennomgang av datasettet kalles en epoke. For å kjøre forover- og bakoverpasninger med pipeline-parallellisme, deler SageMaker-modellens parallellbibliotek batchene i mindre undersett kalt mikrobatcher, som kjøres én om gangen for å maksimere GPU-utnyttelsen. Det resulterende, mye mindre settet med eksempler per GPU, kalles en mikrobatch. I vårt GPT-2 eksempel, vi la til en standard på 1 mikrobatch direkte i treningsskriptet.
Når du skalerer opp treningskonfigurasjonen, Det anbefales på det sterkeste å endre batchstørrelsen og mikrobatchstørrelsen tilsvarende. Dette er den eneste måten å sikre god ytelse på: du må vurdere batchstørrelse og mikrobatchstørrelser som en funksjon av din totale verdensstørrelse når du stoler på rørledningsparallellitet.
Plasseringsstrategier er hvordan du forteller SageMaker fysisk hvor du skal plassere modellpartisjonene dine. Hvis du bruker både modellparallell og dataparallell, innstilling placement_strategy
til “cluster”
plasserer modellreplikaer i enhets-ID-er (GPUer) som er fysisk nær hverandre. Men hvis du virkelig ønsker å være mer preskriptiv om parallellismestrategien din, kan du bryte den ned i en enkelt streng med forskjellige kombinasjoner av tre bokstaver: D for dataparallellisme, P
indikerer rørledningsparallellisme, og T
for tensorparallellisme. Vi anbefaler generelt å beholde standardplasseringen for "cluster"
, fordi dette er mest passende for modelltrening i stor skala. "Klynge"-plasseringen tilsvarer "DPT
".
For mer informasjon om plasseringsstrategier, se Plasseringsstrategi med tensorparallellisme.
Eksempel på bruk
La oss tenke oss at du har én ml.p3.16xlarge i treningsjobben. Det gir deg 8 NVIDIA V100-er per node. Husk at hver gang du legger til en ekstra forekomst, opplever du ekstra båndbredde overhead, så det er alltid bedre å ha flere GP'Us på en enkelt node. I dette tilfellet har du det bedre med én ml.p3.16xlarge enn for eksempel to ml.p3.8xlarge. Selv om antallet GPU-er er det samme, reduserer den ekstra båndbredden til den ekstra noden gjennomstrømningen.
Følgende diagram illustrerer fireveis modellparallellisme, kombinert med toveis dataparallellisme. Dette betyr at du faktisk har to kopier av modellen din (tenk data parallelle), med hver av dem partisjonert over fire GPU-er (modell parallell).
Hvis noen av disse modellpartisjonene er for store til å passe inn på en enkelt GPU, kan du legge til en ekstra type distribusjon – tensorparallellisme – for å spytte den og bruke begge enhetene.
konklusjonen
I dette blogginnlegget diskuterte vi SageMaker distribuerte opplæringsbiblioteker, spesielt med fokus på modellparallellisme. Vi delte ytelsesbenchmarks fra vår siste test, og oppnådde 32 prøver per sekund på 120 ml.p4d.24xlarge forekomster og 175B parametere på Amazon SageMaker. Vi forventer at hvis vi øker dette til 240 p4-forekomster, kan vi trene en 175B parametermodell på 25 dager.
Vi diskuterte også de nyeste funksjonene som muliggjør trening i stor skala, nemlig tensorparallellisme, optimeringstilstandsskjæring, aktiveringssjekkpunkt og aktiveringsavlastning. Vi delte noen tips og triks for å muliggjøre dette gjennom opplæring på Amazon SageMaker.
Prøv det selv ved å bruke den samme notatboken som genererte tallene våre, som er tilgjengelig på GitHub her. Du kan også be om flere GPUer for AWS-kontoen din gjennom ber om en tjenestegrensegodkjenning her.
Om forfatterne
Emily Webber ble med i AWS like etter at SageMaker ble lansert, og har prøvd å fortelle verden om det siden den gang! Utenom å bygge nye ML-opplevelser for kunder, liker Emily å meditere og studere tibetansk buddhisme.
Aditya Bindal er Senior Product Manager for AWS Deep Learning. Han jobber med produkter som gjør det lettere for kundene å trene dype læringsmodeller på AWS. På fritiden liker han å tilbringe tid med datteren, spille tennis, lese historisk fiksjon og reise.
Luis Quintela er Software Developer Manager for AWS SageMaker modell parallellbibliotek. På fritiden kan han bli funnet på sin Harley i SF Bay Area.
- Myntsmart. Europas beste Bitcoin og Crypto Exchange.
- Platoblokkkjede. Web3 Metaverse Intelligence. Kunnskap forsterket. FRI TILGANG.
- CryptoHawk. Altcoin Radar. Gratis prøveperiode.
- Kilde: https://aws.amazon.com/blogs/machine-learning/train-175-billion-parameter-nlp-models-with-model-parallel-additions-and-hugging-face-on-amazon-sagemaker/
- "
- 000
- 100
- 2020
- 39
- Om oss
- akselerator
- Logg inn
- oppnådd
- tvers
- Ytterligere
- adresse
- avansert
- Alle
- allerede
- Amazon
- En annen
- søknader
- AREA
- tilgjengelig
- AWS
- bukt
- BEST
- Biggest
- Milliarder
- Blogg
- Bygning
- Årsak
- endring
- Cloud
- kode
- kombinasjoner
- Felles
- Kommunikasjon
- Konfigurasjon
- forvirring
- Containere
- Kjerne
- kunne
- Kunder
- dato
- utviklet
- Utvikler
- Utvikling
- enhet
- Enheter
- forskjellig
- distribueres
- distribusjon
- ned
- drevet
- muliggjør
- spesielt
- eksempel
- erfaring
- Erfaringer
- ekstrem
- Face
- raskere
- Trekk
- Egenskaper
- Fiction
- passer
- etter
- Forward
- funnet
- Rammeverk
- fullt
- funksjon
- general
- generere
- GitHub
- skal
- god
- Google Search
- GPU
- maskinvare
- nyttig
- Uthev
- historisk
- Hvordan
- Hvordan
- HTTPS
- Hundrevis
- økt
- informasjon
- inspirert
- integrert
- saker
- IT
- Jobb
- ble med
- hoppe
- holde
- Språk
- stor
- siste
- lansere
- LÆRE
- læring
- Nivå
- Bibliotek
- laste
- maskin
- maskinlæring
- maskiner
- Making
- leder
- Minne
- ML
- modell
- modeller
- modulære
- mest
- flytte
- nemlig
- Naturlig
- nettverk
- Nye funksjoner
- noder
- bærbare
- tall
- Annen
- Papir
- samarbeid
- ytelse
- brikke
- plattform
- Populær
- mulig
- primære
- Produkt
- Produkter
- Profiler
- gi
- RAM
- RE
- Lesning
- anbefaler
- poster
- redusere
- Resultater
- Kjør
- rennende
- Sa
- skalerbar
- Skala
- skalering
- SDK
- Søk
- tjeneste
- sett
- innstilling
- skjæring
- delt
- signifikant
- Størrelse
- So
- Software
- spesielt
- fart
- utgifter
- splittet
- Tilstand
- strategier
- Strategi
- levere
- taktikk
- teknikker
- test
- verden
- tusener
- Gjennom
- tid
- tips
- tips og triks
- sammen
- temaer
- handler
- Kurs
- forstå
- bruke
- bruke
- syn
- innenfor
- arbeid
- virker
- verden
- år