De sidste par år har der været en rivende udvikling inden for naturlig sprogbehandling (NLP). Selvom hardware er blevet forbedret, såsom med den seneste generation af acceleratorer fra NVIDIA og Amazon, støder brugere af avanceret maskinlæring (ML) stadig regelmæssigt ind i problemer med at skalere deres store sprogmodeller på tværs af flere GPU'er.
I dette blogindlæg opsummerer vi kort fremkomsten af store og små NLP-modeller, primært gennem abstraktionen leveret af Hugging Face og med den modulære backend af Amazon SageMaker. Vi fremhæver især lanceringen af fire yderligere funktioner i SageMaker-modellens parallelle bibliotek, der låser op for 175 milliarder parameter NLP-modeller fortræning og finjustering for kunder.
Vi brugte dette bibliotek på SageMaker træningsplatformen og opnåede en gennemstrømning på 32 prøver i sekundet på 120 ml.p4d.24xlarge forekomster og 175 milliarder parametre. Vi forventer, at hvis vi øgede dette til 240 tilfælde, ville den fulde model tage 25 dage at træne.
For mere information om modelparallelisme, se papiret Amazon SageMaker Model Parallelism: A General and Flexible Framework for Large Model Training.
Du kan også se den GPT2-notebook, vi brugte til at generere disse præstationstal på vores GitHub repository.
For at lære mere om, hvordan du bruger de nye funktioner i SageMaker model parallel, se Udvidede funktioner i SageMaker Model Parallel Library til PyTorchog Brug med SageMaker Python SDK.
NLP på Amazon SageMaker – Hugging Face og modelparallelisme
Hvis du er ny til Hugging Face og NLP, er det største højdepunkt, du behøver at vide, at applikationer, der bruger naturlig sprogbehandling (NLP), begynder at opnå præstationer på menneskeligt niveau. Dette er i høj grad drevet af en indlæringsmekanisme, kaldet opmærksomhed, som gav anledning til en dyb læringsmodel, kaldet transformer, som er meget mere skalerbar end tidligere deep learning sekventielle metoder. Den nu kendte BERT model blev udviklet for at udnytte transformatoren og udviklede flere nyttige NLP-taktikker undervejs. Transformers og pakken af modeller, både inden for og uden for NLP, som alle er blevet inspireret af BERT, er den primære motor bag dine Google-søgeresultater, i din Google oversæt resultaterog et væld af nye startups.
SageMaker og Hugging Face gik sammen for at gøre dette nemmere for kunderne end nogensinde før. Vi har lanceret Hugging Face deep learning containere (DLC'er), så du kan træne og være vært for fortrænede modeller direkte fra Hugging Face's lager af over 26,000 modeller. Vi har lanceret SageMaker Training Compiler for at du kan fremskynde køretiden for dine Hugging Face-træningsløkker med op til 50 %. Vi har også integreret Hugging Face flagskibet Transformers SDK med vores distribuerede træningsbiblioteker for at gøre det nemmere end nogensinde før at skalere dine NLP-modeller ud.
For mere information om Hugging Face Transformer-modeller på Amazon SageMaker, se Support til Hugging Face Transformer-modeller.
Nye funktioner til NLP-modeltræning i stor skala med SageMaker model parallelbibliotek
På AWS re:Invent 2020 lancerede SageMaker distribuerede biblioteker, der giver den bedste ydeevne i skyen til træning af computersynsmodeller som f.eks. Maske-RCNN og NLP-modeller som T5-3B. Dette er muligt gennem forbedrede kommunikationsprimitiver, der er 20-40 % hurtigere end NCCL på AWS, og modeldistributionsteknikker, der gør det muligt for ekstremt store sprogmodeller at skalere på tværs af ti til hundreder til tusindvis af GPU'er.
SageMaker model parallel library (SMP) har altid givet dig muligheden for at tage din foruddefinerede NLP-model i PyTorch, det være sig gennem Hugging Face eller andre steder, og opdele denne model på flere GPU'er i din klynge. Sagt på en anden måde, deler SMP din model op i mindre bidder, så du ikke oplever fejl i hukommelsen (OOM). Vi er glade for at tilføje yderligere hukommelsesbesparende teknikker, som er kritiske for modeller i stor skala, nemlig:
- Tensor parallelisme
- Optimizer-tilstandsskæring
- Aktivering checkpointing
- Aktivering aflæsning
Du kan kombinere disse fire funktioner, der kan kombineres for at udnytte hukommelsen mere effektivt og træne den næste generation af NLP-modeller i ekstrem skala.
Distribueret træning og tensorparallelisme
For at forstå tensorparallelisme er det nyttigt at vide, at der er mange former for distribueret træning eller parallelisme. Du er sikkert allerede bekendt med den mest almindelige type, dataparallelisme. Kernen af dataparallelisme fungerer således: du tilføjer en ekstra node til din klynge, såsom at gå fra en til to ml.EC2-forekomster i din SageMaker-estimator. Derefter bruger du en data parallel ramme som Horovod, PyTorch Distributed Data Parallel eller SageMaker Distributed. Dette skaber replikaer af din model, én pr. accelerator, og håndterer udskæring af data til hver node, sammen med at bringe alle resultaterne sammen under tilbageudbredelsestrinnet af dit neurale netværk. Tænk fordelt gradientnedstigning. Dataparallelisme er også populær inden for servere; du deler data ind i alle GPU'er, og nogle gange CPU'er, på alle dine noder. Følgende diagram illustrerer dataparallelisme.
Model parallelisme er lidt anderledes. I stedet for at lave kopier af den samme model, deler vi din model op i stykker. Så styrer vi afviklingen, så dine data stadig flyder gennem dit neurale netværk på nøjagtig samme måde matematisk, men forskellige dele af din model sidder på forskellige GPU'er. Hvis du bruger en ml.p3.8xlarge, har du fire NVIDIA V100'er, så du vil sikkert gerne dele din model i 4 stykker, et stykke pr. GPU. Hvis du hopper op til to ml.p4d.24xlarge'er, er det 16 A100'er i alt i din klynge, så du kan bryde din model op i 16 stykker. Dette kaldes også nogle gange rørlednings parallelitet. Det skyldes, at sættet af lag i netværket er opdelt på tværs af GPU'er og kører på en pipelinet måde for at maksimere GPU-udnyttelsen. Følgende diagram illustrerer modelparallelisme.
For at få modelparallelisme til at ske i skala, har vi brug for en tredje type distribution: tensor parallelisme. Tensor-parallelisme anvender de samme koncepter et skridt videre - vi bryder de største lag af dit neurale netværk ad og placerer dele af lagene selv på forskellige enheder. Dette er relevant, når du arbejder med 175 milliarder parametre eller mere, og prøver at passe selv nogle få poster ind i RAM, sammen med dele af din model, for at træne den transformer. Følgende diagram illustrerer tensorparallelisme.
At muliggøre tensor parallelisme, indstil den inden for smp-indstillingerne du går videre til din estimator.
I den foregående kode, pipeline_parallel_degree
beskriver i, hvor mange segmenter din model skal deles, baseret på den pipeline-parallelisme, vi diskuterede ovenfor. Et andet ord for dette er scores.
Indstil for at aktivere tensorparallelisme tensor_parallel_degree
til dit ønskede niveau. Sørg for, at du vælger et tal, der er lig med eller mindre end antallet af GPU'er pr. instans, så ikke større end 8 for ml.p4d.24xlarge-maskinerne. For yderligere scriptændringer, se Kør et SageMaker Distributed Model Parallel Training Job med Tensor Parallelism.
ddp-parameteren refererer til distribuerede data parallelt. Du aktiverer dette typisk, hvis du bruger dataparallelisme eller tensorparallelisme, fordi modelparallelismebiblioteket er afhængig af DDP for disse funktioner.
Optimeringstilstandsskæring, aktiveringsaflæsning og kontrolpunkter
Hvis du har en ekstremt stor model, har du også brug for en ekstremt stor optimeringstilstand. At forberede din optimizer til SMP er ligetil: Saml den blot fra disken i dit script og indlæs den i smp.DistributedOptimizer()
objekt.
Sørg for at aktivere dette ved estimatoren ved at indstille shard_optimizer_state
til Sand i den smp_options
du bruger til at konfigurere SMP:
I lighed med tensor- og pipeline-parallelisme profilerer SMP din model og din verdensstørrelse (det samlede antal GPU'er i alle dine træningsknuder) for at finde de bedste placeringsstrategier.
I deep learning kaldes output fra mellemlag også for aktiveringer, og disse skal gemmes under fremadgående pass. Dette skyldes, at de skal bruges til gradientberegning i tilbageløbet. I en stor model kan lagring af alle disse aktiveringer samtidigt i hukommelsen skabe betydelige hukommelsesflaskehalse. For at løse denne flaskehals kan du bruge aktiveringskontrol, den tredje nye funktion i SageMaker model parallelisme bibliotek. Aktivering checkpointing, eller gradient checkpointing, er en teknik til at reducere hukommelsesforbrug ved at rydde aktiveringer af visse lag og genberegne dem under et tilbageløb. Dette udveksler effektivt ekstra beregningstid for reduceret hukommelsesforbrug.
Endelig aktivering aflastning bruger direkte aktiveringskontrolpunkter. Det er en strategi kun at beholde nogle få tensoraktiveringer på GPU RAM'en under modeltræningen. Specifikt flytter vi de checkpointede aktiveringer til CPU-hukommelsen under den fremadrettede passage og indlæser dem tilbage til GPU'en for tilbagegående passage af en specifik mikro-batch.
Mikrobatches og placeringsstrategier
Andre emner, der nogle gange forårsager kundernes forvirring, er mikrobatches og placeringsstrategier. Begge disse er hyperparametre, du kan levere til SageMaker-modellens parallelle bibliotek. Specifikt mikrobatches er relevante, når man implementerer modeller, der er afhængige af pipeline-parallelisme, såsom de mindst 30 milliarder parametre i størrelse eller mere.
Mikrobatches er undersæt af minibatches. Når din model er i sin træningsløkke, definerer du et vist antal poster, der skal samles op og passere frem og tilbage gennem lagene – dette kaldes en minibatch, eller nogle gange bare en parti. En fuld passage gennem dit datasæt kaldes en epoke. For at køre fremad- og baglæns gennemløb med pipeline-parallelisme, opdeler SageMaker-modelparallelle bibliotek batchene i mindre undersæt kaldet mikrobatches, som køres én ad gangen for at maksimere GPU-udnyttelsen. Det resulterende, meget mindre sæt eksempler pr. GPU, kaldes en mikrobatch. I vores GPT-2 eksempel, vi tilføjede en standard på 1 mikrobatch direkte til træningsscriptet.
Når du skalerer din træningskonfiguration op, du anbefales kraftigt at ændre din batchstørrelse og mikrobatchstørrelse i overensstemmelse hermed. Dette er den eneste måde at sikre god ydeevne på: Du skal overveje batchstørrelse og mikrobatchstørrelser som en funktion af din samlede verdensstørrelse, når du er afhængig af pipelineparallelisme.
Placeringsstrategier er, hvordan du fortæller SageMaker fysisk, hvor du skal placere dine modelpartitioner. Hvis du bruger både model parallel og data parallel, indstilling placement_strategy
til “cluster”
placerer modelreplikaer i enheds-id'er (GPU'er), der er fysisk tæt på hinanden. Men hvis du virkelig ønsker at være mere præskriptiv omkring din parallelismestrategi, kan du opdele den i en enkelt streng med forskellige kombinationer af tre bogstaver: D for dataparallelisme, P
angiver rørledningsparallelisme, og T
for tensorparallelisme. Vi anbefaler generelt at beholde standardplaceringen af "cluster"
, fordi dette er mest velegnet til modeltræning i stor skala. "Klynge"-placeringen svarer til "DPT
".
For mere information om placeringsstrategier, se Placeringsstrategi med tensorparallelisme.
Eksempel på use case
Lad os forestille os, at du har en ml.p3.16xlarge i dit træningsjob. Det giver dig 8 NVIDIA V100'er pr. node. Husk, hver gang du tilføjer en ekstra instans, oplever du ekstra båndbredde overhead, så det er altid bedre at have flere GP'U'er på en enkelt node. I dette tilfælde er du bedre stillet med én ml.p3.16xlarge end for eksempel to ml.p3.8xlarges. Selvom antallet af GPU'er er det samme, sænker den ekstra båndbredde overhead af den ekstra node din gennemstrømning.
Følgende diagram illustrerer fire-vejs model parallelisme, kombineret med to-vejs data parallelisme. Dette betyder, at du faktisk har to replikaer af din model (tænk data parallelt), hvor hver af dem er opdelt på tværs af fire GPU'er (model parallel).
Hvis nogen af disse modelpartitioner er for store til at passe ind på en enkelt GPU, kan du tilføje en ekstra type distribution – tensorparallelisme – for at spytte den og bruge begge enheder.
Konklusion
I dette blogindlæg diskuterede vi SageMaker distribuerede træningsbiblioteker, især med fokus på modelparallelisme. Vi delte ydeevnebenchmarks fra vores seneste test og opnåede 32 prøver i sekundet på tværs af 120 ml.p4d.24xlarge forekomster og 175B parametre på Amazon SageMaker. Vi forventer, at hvis vi øgede dette til 240 p4-forekomster, kunne vi træne en 175B parametermodel på 25 dage.
Vi diskuterede også de nyeste funktioner, der muliggør træning i stor skala, nemlig tensorparallelisme, optimeringstilstandsskæring, aktiveringskontrolpunkt og aktiveringsaflastning. Vi delte nogle tips og tricks til at aktivere dette gennem træning på Amazon SageMaker.
Prøv det selv ved at bruge den samme notesbog, som genererede vores numre, som er tilgængelig på GitHub her. Du kan også anmode om flere GPU'er til din AWS-konto gennem anmoder om en servicegrænsegodkendelse lige her.
Om forfatterne
Emily Webber sluttede sig til AWS lige efter SageMaker lancerede, og har forsøgt at fortælle verden om det lige siden! Ud over at bygge nye ML-oplevelser for kunder, nyder Emily at meditere og studere tibetansk buddhisme.
Aditya Bindal er Senior Product Manager for AWS Deep Learning. Han arbejder på produkter, der gør det nemmere for kunderne at træne deep learning-modeller på AWS. I sin fritid nyder han at bruge tid sammen med sin datter, spille tennis, læse historisk skønlitteratur og rejse.
Luis Quintela er Software Developer Manager for AWS SageMaker model parallelbibliotek. I sin fritid kan han blive fundet kørende på sin Harley i SF Bay Area.
- Coinsmart. Europas bedste Bitcoin og Crypto Exchange.
- Platoblokkæde. Web3 Metaverse Intelligence. Viden forstærket. FRI ADGANG.
- CryptoHawk. Altcoin radar. Gratis prøveversion.
- 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
- accelerator
- Konto
- opnået
- tværs
- Yderligere
- adresse
- fremskreden
- Alle
- allerede
- Amazon
- En anden
- applikationer
- OMRÅDE
- til rådighed
- AWS
- Bugt
- BEDSTE
- Største
- Billion
- Blog
- Bygning
- Årsag
- lave om
- Cloud
- kode
- kombinationer
- Fælles
- Kommunikation
- Konfiguration
- forvirring
- Beholdere
- Core
- kunne
- Kunder
- data
- udviklet
- Udvikler
- Udvikling
- enhed
- Enheder
- forskellige
- distribueret
- fordeling
- ned
- drevet
- muliggør
- især
- eksempel
- erfaring
- Oplevelser
- ekstrem
- Ansigtet
- hurtigere
- Feature
- Funktionalitet
- Fiktion
- passer
- efter
- Videresend
- fundet
- Framework
- fuld
- funktion
- Generelt
- generere
- GitHub
- gå
- godt
- Google Search
- GPU
- Hardware
- hjælpsom
- Fremhæv
- historisk
- Hvordan
- How To
- HTTPS
- Hundreder
- øget
- oplysninger
- inspirerede
- integreret
- spørgsmål
- IT
- Job
- sluttede
- hoppe
- holde
- Sprog
- stor
- seneste
- lancere
- LÆR
- læring
- Niveau
- Bibliotek
- belastning
- maskine
- machine learning
- Maskiner
- Making
- leder
- Hukommelse
- ML
- model
- modeller
- modulær
- mest
- bevæge sig
- nemlig
- Natural
- netværk
- Nye funktioner
- noder
- notesbog
- numre
- Andet
- Papir
- partnerskab
- ydeevne
- stykke
- perron
- Populær
- mulig
- primære
- Produkt
- Produkter
- Profiler
- give
- RAM
- RE
- Læsning
- anbefaler
- optegnelser
- reducere
- Resultater
- Kør
- kører
- Said
- skalerbar
- Scale
- skalering
- SDK
- Søg
- tjeneste
- sæt
- indstilling
- sharding
- delt
- signifikant
- Størrelse
- So
- Software
- specifikt
- hastighed
- udgifterne
- delt
- Tilstand
- strategier
- Strategi
- forsyne
- taktik
- teknikker
- prøve
- verdenen
- tusinder
- Gennem
- tid
- tips
- tips og tricks
- sammen
- Emner
- handler
- Kurser
- forstå
- brug
- udnytte
- vision
- inden for
- arbejder
- virker
- world
- år