De senaste åren har det skett en snabb utveckling inom området naturlig språkbehandling (NLP). Även om hårdvaran har förbättrats, som med den senaste generationens acceleratorer från NVIDIA och Amazon, stöter utövare av avancerad maskininlärning (ML) fortfarande regelbundet på problem med att skala sina stora språkmodeller över flera GPU:er.
I det här blogginlägget sammanfattar vi kort uppkomsten av stora och småskaliga NLP-modeller, främst genom abstraktionen från Hugging Face och med den modulära backend av Amazon SageMaker. Vi lyfter särskilt fram lanseringen av fyra ytterligare funktioner inom SageMaker-modellens parallellbibliotek som låser upp 175 miljarder NLP-modellförträning och finjustering för kunder.
Vi använde det här biblioteket på SageMaker-utbildningsplattformen och uppnådde en genomströmning på 32 prover per sekund på 120 ml.p4d.24xlarge instanser och 175 miljarder parametrar. Vi räknar med att om vi ökade detta till 240 instanser skulle hela modellen ta 25 dagar att träna.
För mer information om modellparallellism, se uppsatsen Amazon SageMaker Model Parallelism: A General and Flexible Framework for Large Model Training.
Du kan också se GPT2-anteckningsboken som vi använde för att generera dessa prestandasiffror på vår GitHub repository.
För att lära dig mer om hur du använder de nya funktionerna i SageMaker modell parallell, se Utökade funktioner i SageMaker Model Parallel Library för PyTorchoch Använd med SageMaker Python SDK.
NLP på Amazon SageMaker – Hugging Face och modellparallellism
Om du är ny på Hugging Face och NLP är den största höjdpunkten du behöver veta att applikationer som använder naturlig språkbehandling (NLP) börjar uppnå prestanda på mänsklig nivå. Detta drivs till stor del av en inlärningsmekanism, kallad uppmärksamhet, som gav upphov till en modell för djupinlärning, kallad transformator, det är mycket mer skalbart än tidigare sekventiella metoder för djupinlärning. Den nu kända BERT modell utvecklades för att dra nytta av transformatorn och utvecklade flera användbara NLP-taktik längs vägen. Transformers och sviten av modeller, både inom och utanför NLP, som alla har inspirerats av BERT, är den primära motorn bakom dina Google-sökresultat, i din Google översätt resultatoch en mängd nya startups.
SageMaker och Hugging Face samarbetade för att göra detta enklare för kunderna än någonsin tidigare. Vi har lanserat Hugging Face djupinlärningsbehållare (DLC) för dig att träna och vara värd för förtränade modeller direkt från Hugging Faces lager av över 26,000 XNUMX modeller. Vi har lanserat SageMaker Training Compiler för att du ska kunna påskynda löptiden för dina Hugging Face-träningsloopar med upp till 50 %. Vi har också integrerat Hugging Face flaggskeppet Transformers SDK med våra distribuerade utbildningsbibliotek för att göra det enklare än någonsin att skala ut dina NLP-modeller.
För mer information om Hugging Face Transformer-modeller på Amazon SageMaker, se Stöd för Hugging Face Transformer-modeller.
Nya funktioner för storskalig NLP-modellträning med SageMaker modell parallellbibliotek
På AWS re:Invent 2020 lanserade SageMaker distribuerade bibliotek som ger den bästa prestandan på molnet för att träna datorseende modeller som Mask-RCNN och NLP-modeller som T5-3B. Detta är möjligt genom förbättrade kommunikationsprimitiver som är 20-40 % snabbare än NCCL på AWS, och modelldistributionstekniker som gör att extremt stora språkmodeller kan skalas över tiotals till hundratals till tusentals GPU:er.
SageMaker modell parallellbibliotek (SMP) har alltid gett dig möjligheten att ta din fördefinierade NLP-modell i PyTorch, oavsett om det är genom Hugging Face eller någon annanstans, och partitionera den modellen på flera GPU:er i ditt kluster. Sagt på ett annat sätt delar SMP upp din modell i mindre bitar så att du inte upplever minnesfel (OOM). Vi är glada över att kunna lägga till ytterligare minnesbesparande tekniker som är avgörande för storskaliga modeller, nämligen:
- Tensorparallellism
- Optimizertillståndsskärning
- Aktiveringskontroll
- Aktivering avlastning
Du kan kombinera dessa fyra funktioner kan kombineras för att utnyttja minnet mer effektivt och träna nästa generation av extremskaliga NLP-modeller.
Distribuerad träning och tensorparallellism
För att förstå tensorparallellism är det bra att veta att det finns många typer av distribuerad träning, eller parallellism. Du är förmodligen redan bekant med den vanligaste typen, dataparallellism. Kärnan i dataparallellism fungerar så här: du lägger till en extra nod till ditt kluster, som att gå från en till två ml.EC2-instanser i din SageMaker-estimator. Sedan använder du ett dataparallellt ramverk som Horovod, PyTorch Distributed Data Parallel eller SageMaker Distributed. Detta skapar repliker av din modell, en per accelerator, och hanterar sönderdelning av data till varje nod, tillsammans med att sammanföra alla resultat under steget bakåt i ditt neurala nätverk. Tänk fördelad gradientnedstigning. Dataparallellism är också populärt inom servrar; du delar data till alla GPU:er, och ibland processorer, på alla dina noder. Följande diagram illustrerar dataparallellism.
Modell parallellism är något annorlunda. Istället för att göra kopior av samma modell delar vi upp din modell i bitar. Sedan hanterar vi körningen, så att din data fortfarande flödar genom ditt neurala nätverk på exakt samma sätt matematiskt, men olika delar av din modell sitter på olika GPU:er. Om du använder en ml.p3.8xlarge har du fyra NVIDIA V100, så du skulle förmodligen vilja dela upp din modell i fyra delar, en bit per GPU. Om du hoppar upp till två ml.p4d.4xlarge är det totalt 24 A16 i ditt kluster, så du kan dela upp din modell i 100 delar. Detta kallas också ibland pipeline parallellism. Det beror på att uppsättningen av lager i nätverket är uppdelade över GPU:er och körs i pipeline för att maximera GPU-användningen. Följande diagram illustrerar modellparallellism.
För att få modellparallellism att hända i skala behöver vi en tredje typ av distribution: tensorparallellism. Tensorparallellism tillämpar samma koncept ett steg längre – vi bryter isär de största lagren i ditt neurala nätverk och placerar delar av lagren själva på olika enheter. Detta är relevant när du arbetar med 175 miljarder parametrar eller mer, och försöker passa in till och med några få poster i RAM, tillsammans med delar av din modell, för att träna den transformatorn. Följande diagram illustrerar tensorparallellism.
Att möjliggöra tensorparallellism, ställ in den inom smp-alternativen du går vidare till din estimator.
I föregående kod, pipeline_parallel_degree
beskriver i hur många segment din modell ska delas, baserat på pipelineparallellen som vi diskuterade ovan. Ett annat ord för detta är poäng.
För att möjliggöra tensorparallellism, ställ in tensor_parallel_degree
till önskad nivå. Se till att du väljer ett antal som är lika med eller mindre än antalet GPU:er per instans, så inte fler än 8 för ml.p4d.24xlarge-maskinerna. För ytterligare skriptändringar, se Kör ett SageMaker Distributed Model Parallell Training Job med Tensor Parallelism.
Parametern ddp hänvisar till distribuerad data parallell. Du aktiverar vanligtvis detta om du använder dataparallellism eller tensorparallellism, eftersom modellparallellismbiblioteket förlitar sig på DDP för dessa funktioner.
Optimizertillståndsskärning, aktiveringsavlastning och kontrollpunkter
Om du har en extremt stor modell behöver du också ett extremt stort optimeringsläge. Att förbereda din optimerare för SMP är enkelt: plocka helt enkelt upp den från disken i ditt skript och ladda den i smp.DistributedOptimizer()
objekt.
Se till att du aktiverar detta i estimatorn genom att ställa in shard_optimizer_state
till Sant i smp_options
du använder för att konfigurera SMP:
I likhet med tensor och pipeline-parallellism, profilerar SMP din modell och din världsstorlek (det totala antalet GPU:er i alla dina träningsnoder), för att hitta de bästa placeringsstrategierna.
Vid djupinlärning kallas mellanskiktsutgångarna även aktiveringar, och dessa måste lagras under framåtpassning. Detta beror på att de måste användas för gradientberäkning i bakåtpassningen. I en stor modell kan lagring av alla dessa aktiveringar samtidigt i minnet skapa betydande minnesflaskhalsar. För att ta itu med denna flaskhals kan du använda aktiveringskontroll, den tredje nya funktionen i SageMakers modellparallellismbibliotek. Aktivering checkpointing, eller gradientkontroll, är en teknik för att minska minnesanvändningen genom att rensa aktivering av vissa lager och beräkna om dem under en bakåtpassning. Detta byter effektivt ut extra beräkningstid för minskad minnesanvändning.
Slutligen, aktivering avlastning använder direkt aktiveringskontroll. Det är en strategi att endast ha några få tensoraktiveringar på GPU-minnet under modellträningen. Specifikt flyttar vi de checkpointade aktiveringarna till CPU-minnet under framåtpassningen och laddar tillbaka dem till GPU för bakåtpassningen av en specifik mikrobatch.
Mikrobatcher och placeringsstrategier
Andra ämnen som ibland orsakar förvirring hos kunder är mikrobatcher och placeringsstrategier. Båda dessa är hyperparametrar som du kan tillhandahålla till SageMakers modell parallellbibliotek. Specifikt mikrobatcher är relevanta när man implementerar modeller som bygger på pipelineparallellism, till exempel de som är minst 30 miljarder parametrar i storlek eller mer.
Mikrobatcher är undergrupper av minibatcher. När din modell är i sin träningsslinga definierar du ett visst antal poster att plocka upp och passera framåt och bakåt genom lagren – detta kallas en minibatch, eller ibland bara en sats. En fullständig passage genom din datauppsättning kallas an epok. För att köra fram- och bakåtpassningar med pipeline-parallellism, skär SageMaker modellparallellbibliotek satserna i mindre delmängder som kallas mikrobatcher, som körs en i taget för att maximera GPU-användningen. Den resulterande, mycket mindre uppsättningen av exempel per-GPU, kallas en mikrobatch. I vårt GPT-2-exempel, vi lade till en standard på 1 mikrobatch direkt till träningsskriptet.
När du skalar upp din träningskonfiguration, du rekommenderas starkt att ändra din batchstorlek och mikrobatchstorlek därefter. Detta är det enda sättet att säkerställa bra prestanda: du måste överväga batchstorlek och mikrobatchstorlekar som en funktion av din totala världsstorlek när du förlitar dig på pipelineparallellism.
Placeringsstrategier är hur du berättar för SageMaker fysiskt var du ska placera dina modellpartitioner. Om du använder både modell parallell och data parallell, inställning placement_strategy
till “cluster”
placerar modellrepliker i enhets-ID:er (GPU) som är fysiskt nära varandra. Men om du verkligen vill vara mer föreskrivande om din parallellitetsstrategi kan du bryta ner den i en enda sträng med olika kombinationer av tre bokstäver: D för dataparallellism, P
indikerar pipelineparallellism, och T
för tensorparallellism. Vi rekommenderar generellt att du behåller standardplaceringen för "cluster"
, eftersom detta är mest lämpligt för utbildning i storskalig modell. "Kluster"-placeringen motsvarar "DPT
".
Mer information om placeringsstrategier finns i Placeringsstrategi med tensorparallellism.
Exempel på användningsfall
Låt oss föreställa oss att du har en ml.p3.16xlarge i ditt träningsjobb. Det ger dig 8 NVIDIA V100 per nod. Kom ihåg att varje gång du lägger till en extra instans upplever du extra bandbredd, så det är alltid bättre att ha fler GP'Us på en enda nod. I det här fallet är du bättre med en ml.p3.16xlarge än till exempel två ml.p3.8xlarge. Även om antalet GPU:er är detsamma saktar den extra bandbredden över den extra noden ner din genomströmning.
Följande diagram illustrerar fyrvägsmodellparallellism, kombinerat med tvåvägsdataparallellism. Detta betyder att du faktiskt har två kopior av din modell (tänk att data är parallella), med var och en av dem uppdelad över fyra GPU:er (modell parallell).
Om någon av dessa modellpartitioner är för stor för att passa på en enda GPU kan du lägga till en extra typ av distribution – tensorparallellism – för att spotta den och använda båda enheterna.
Slutsats
I det här blogginlägget diskuterade vi SageMaker distribuerade utbildningsbibliotek, särskilt med fokus på modellparallellism. Vi delade prestandariktmärken från vårt senaste test och uppnådde 32 prover per sekund över 120 ml.p4d.24xlarge instanser och 175B parametrar på Amazon SageMaker. Vi räknar med att om vi ökade detta till 240 p4-instanser skulle vi kunna träna en 175B parametermodell på 25 dagar.
Vi diskuterade också de senaste funktionerna för att möjliggöra storskalig träning, nämligen tensorparallellism, optimeringstillståndsskärning, aktiveringskontroll och aktiveringsavlastning. Vi delade med oss av några tips och tricks för att möjliggöra detta genom utbildning på Amazon SageMaker.
Prova själv använder samma anteckningsbok som genererade våra nummer, som är tillgänglig på GitHub här. Du kan också begära fler GPU:er för ditt AWS-konto genom begär ett godkännande för tjänstegränser här.
Om författarna
Emily Webber gick med i AWS precis efter att SageMaker lanserades, och har försökt berätta för världen om det sedan dess! Förutom att bygga nya ML-upplevelser för kunder tycker Emily om att meditera och studera tibetansk buddhism.
Aditya Bindal är Senior Product Manager för AWS Deep Learning. Han arbetar med produkter som gör det lättare för kunderna att träna djupinlärningsmodeller på AWS. På fritiden tycker han om att spendera tid med sin dotter, spela tennis, läsa historisk fiktion och resa.
louis quintela är Software Developer Manager för AWS SageMaker modell parallellbibliotek. På fritiden kan han hittas på sin Harley i SF Bay Area.
- Myntsmart. Europas bästa bitcoin- och kryptobörs.
- Platoblockchain. Web3 Metaverse Intelligence. Kunskap förstärkt. FRI TILLGÅNG.
- CryptoHawk. Altcoin radar. Gratis provperiod.
- Källa: 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
- accelerator
- Konto
- uppnås
- tvärs
- Annat
- adress
- avancerat
- Alla
- redan
- amason
- Annan
- tillämpningar
- OMRÅDE
- tillgänglig
- AWS
- bukt
- BÄST
- störst
- Miljarder
- Blogg
- Byggnad
- Orsak
- byta
- cloud
- koda
- kombinationer
- Gemensam
- Kommunikation
- konfiguration
- förvirring
- Behållare
- Kärna
- kunde
- Kunder
- datum
- utvecklade
- Utvecklare
- Utveckling
- anordning
- enheter
- olika
- distribueras
- fördelning
- ner
- driven
- möjliggör
- speciellt
- exempel
- erfarenhet
- Erfarenheter
- extrem
- Ansikte
- snabbare
- Leverans
- Funktioner
- Fiktion
- passa
- efter
- Framåt
- hittade
- Ramverk
- full
- fungera
- Allmänt
- generera
- GitHub
- kommer
- god
- Google Sök
- GPU
- hårdvara
- hjälp
- Markera
- historisk
- Hur ser din drömresa ut
- How To
- HTTPS
- Hundratals
- ökat
- informationen
- inspirerat
- integrerade
- problem
- IT
- Jobb
- fogade
- hoppa
- hålla
- språk
- Large
- senaste
- lansera
- LÄRA SIG
- inlärning
- Nivå
- Bibliotek
- läsa in
- Maskinen
- maskininlärning
- Maskiner
- Framställning
- chef
- Minne
- ML
- modell
- modeller
- modulära
- mest
- flytta
- nämligen
- Natural
- nät
- Nya funktioner
- noder
- anteckningsbok
- nummer
- Övriga
- Papper
- samarbetar
- prestanda
- bit
- plattform
- Populära
- möjlig
- primär
- Produkt
- Produkter
- Profiler
- ge
- RAM
- RE
- Läsning
- rekommenderar
- register
- minska
- Resultat
- Körning
- rinnande
- Nämnda
- skalbar
- Skala
- skalning
- sDK
- Sök
- service
- in
- inställning
- sharding
- delas
- signifikant
- Storlek
- So
- Mjukvara
- specifikt
- fart
- Spendera
- delas
- Ange
- strategier
- Strategi
- leverera
- taktik
- tekniker
- testa
- världen
- tusentals
- Genom
- tid
- Tips
- tips och tricks
- tillsammans
- ämnen
- handel
- Utbildning
- förstå
- användning
- utnyttja
- syn
- inom
- arbetssätt
- fungerar
- världen
- år