Maximera prestanda och minska din kostnad för djupinlärning med AWS Trainium och Amazon SageMaker

Maximera prestanda och minska din kostnad för djupinlärning med AWS Trainium och Amazon SageMaker

Källnod: 2010875

Idag bygger, utbildar och implementerar tiotusentals kunder maskininlärningsmodeller (ML) med hjälp av Amazon SageMaker för att driva applikationer som har potential att återuppfinna deras verksamheter och kundupplevelser. Dessa ML-modeller har ökat i storlek och komplexitet under de senaste åren, vilket har lett till toppmoderna noggrannheter över en rad uppgifter och även förskjutit tiden att träna från dagar till veckor. Som ett resultat måste kunder skala sina modeller över hundratals till tusentals acceleratorer, vilket gör dem dyrare att träna.

SageMaker är en helt hanterad ML-tjänst som hjälper utvecklare och datavetare att enkelt bygga, träna och distribuera ML-modeller. SageMaker tillhandahåller redan det bredaste och djupaste urvalet av datorerbjudanden med hårdvaruacceleratorer för ML-träning, inklusive G5 (Nvidia A10G) instanser och P4d (Nvidia A100) instanser.

Ökande beräkningskrav kräver snabbare och mer kostnadseffektiv processorkraft. För att ytterligare minska modellutbildningstider och göra det möjligt för ML-utövare att iterera snabbare, har AWS förnyat sig över chips, servrar och datacenteranslutningar. De nya Trn1-instanserna drivs av AWS Trainium Chips erbjuder den bästa pris-prestanda och den snabbaste ML-modellutbildningen på AWS, vilket ger upp till 50 % lägre kostnad för att träna modeller för djupinlärning jämfört med jämförbara GPU-baserade instanser utan något fall i noggrannhet.

I det här inlägget visar vi hur du kan maximera din prestanda och minska kostnaderna med hjälp av Trn1-instanser med SageMaker.

Lösningsöversikt

SageMaker utbildningsjobb stödjer ml.trn1-instanser, drivna av Trainium-chips, som är specialbyggda för högpresterande ML-träningsapplikationer i molnet. Du kan använda ml.trn1-instanser på SageMaker för att träna naturlig språkbehandling (NLP), datorseende och rekommendationsmodeller över en bred uppsättning applikationer, såsom taligenkänning, rekommendation, bedrägeriupptäckt, bild- och videoklassificering och prognos. ml.trn1-instanserna har upp till 16 Trainium-chips, vilket är ett andra generationens ML-chip byggt av AWS efter AWS slutledning. ml.trn1-instanserna är de första Amazon Elastic Compute Cloud (Amazon EC2)-instanser med upp till 800 Gbps nätverksbandbredd för Elastic Fabric Adapter (EFA). För effektiv data- och modellparallellism har varje ml.trn1.32xl-instans 512 GB högbandbreddsminne, levererar upp till 3.4 petaflops FP16/BF16-beräkningskraft och har NeuronLink, en intra-instans, högbandbredd, icke-blockerande sammankoppling .

Trainium finns i två konfigurationer och kan användas i USA:s östra (N. Virginia) och USA:s västra (Oregon) regioner.

Följande tabell sammanfattar funktionerna i Trn1-instanserna.

Förekomststorlek trainium
acceleratorer
Accelerator
Minne
(GB)
vCPU: er Exempel
Minne
(GiB)
nätverks
Bandbredd
(Gbps)
EFA och
RDMA
Support
trn1.2xlarge 1 32 8 32 Upp till 12.5 Nej
trn1.32xlarge 16 512 128 512 800 Ja
trn1n.32xlarge (kommer snart) 16 512 128 512 1600 Ja

Låt oss förstå hur man använder Trainium med SageMaker med ett enkelt exempel. Vi kommer att träna en textklassificeringsmodell med SageMaker-träning och PyTorch med hjälp av Hugging Face Transformers Library.

Vi använder datasetet Amazon Recensioner, som består av recensioner från amazon.com. Uppgifterna sträcker sig över en period på 18 år och omfattar cirka 35 miljoner recensioner fram till mars 2013. Recensioner inkluderar produkt- och användarinformation, betyg och en recension i klartext. Följande kod är ett exempel från AmazonPolarity testset:

{
title':'Great CD', 'content':"My lovely Pat has one of the GREAT voices of her generation. I have listened to this CD for YEARS and I still LOVE IT. When I'm in a good mood it makes me feel better. A bad mood just evaporates like sugar in the rain. This CD just oozes LIFE. Vocals are jusat STUUNNING and lyrics just kill. One of life's hidden gems. This is a desert isle CD in my book. Why she never made it big is just beyond me. Everytime I play this, no matter black, white, young, old, male, female EVERYBODY says one thing ""Who was that singing ?""", 'label':1
}

För det här inlägget använder vi bara innehålls- och etikettfälten. Innehållsfältet är en fritextrecension, och etikettfältet är ett binärt värde som innehåller 1 eller 0 för positiva respektive negativa recensioner.

För vår algoritm använder vi BERT, en transformatormodell förutbildad på en stor korpus av engelska data på ett självövervakat sätt. Denna modell är främst inriktad på att vara finjusterad på uppgifter som använder hela meningen (potentiellt maskerad) för att fatta beslut, såsom sekvensklassificering, tokenklassificering eller frågesvar.

Implementeringsdetaljer

Låt oss börja med att titta närmare på de olika komponenterna som är involverade i att träna modellen:

  • AWS Trainium – I sin kärna, var och en Trainium exempel har Trainium-enheter inbyggda. Trn1.2xlarge har 1 Trainium-enhet och Trn1.32xlarge har 16 Trainium-enheter. Varje Trainium-enhet består av dator (2 NeuronCore-v2), 32 GB HBM-enhetsminne och NeuronLink för snabb kommunikation mellan enheter. Varje NeuronCore-v2 består av en helt oberoende heterogen beräkningsenhet med separata motorer (Tensor/Vector/Scalar/GPSIMD). GPSIMD är helt programmerbara generella processorer som du kan använda för att implementera anpassade operatörer och köra dem direkt på NeuronCore-motorerna.
  • Amazon SageMaker utbildning – SageMaker ger en helt hanterad träningsupplevelse för att enkelt träna modeller utan att behöva oroa sig för infrastruktur. När du använder SageMaker Training kör den allt som behövs för ett träningsjobb, såsom kod, behållare och data, i en beräkningsinfrastruktur skild från anropsmiljön. Detta gör att vi kan köra experiment parallellt och iterera snabbt. SageMaker tillhandahåller en Python SDK att lansera utbildningsjobb. Exemplet i det här inlägget använder SageMaker Python SDK för att trigga träningsjobbet med Trainium.
  • AWS Neuron – Eftersom Trainium NeuronCore har sin egen beräkningsmotor behöver vi en mekanism för att kompilera vår träningskod. De AWS Neuron kompilatorn tar koden skriven i Pytorch/XLA och optimerar den för att köras på Neuron-enheter. Neuron-kompilatorn är integrerad som en del av Deep Learning Container vi kommer att använda för att träna vår modell.
  • PyTorch/XLA - Det här Python-paket använder XLA deep learning-kompilatorn för att koppla ihop PyTorchs djupinlärningsramverk och molnacceleratorer som Trainium. Att bygga ett nytt PyTorch-nätverk eller konvertera ett befintligt till att köras på XLA-enheter kräver bara några rader med XLA-specifik kod. Vi kommer att se för vårt användningsfall vilka ändringar vi behöver göra.
  • Distribuerad utbildning – För att köra utbildningen effektivt på flera NeuronCores behöver vi en mekanism för att distribuera utbildningen till tillgängliga NeuronCores. SageMaker stöder torchrun med Trainium-instanser, som kan användas för att köra flera processer motsvarande antalet NeuronCores i klustret. Detta görs genom att skicka distributionsparametern till SageMaker-estimatorn enligt följande, vilket startar en dataparallellt distribuerad träning där samma modell laddas in i olika NeuronCores som bearbetar separata databatcher:
distribution={"torch_distributed": {"enabled": True}}

Skriptändringar behövs för att köras på Trainium

Låt oss titta på kodändringarna som behövs för att använda ett vanligt GPU-baserat PyTorch-skript för att köras på Trainium. På en hög nivå måste vi göra följande förändringar:

  1. Byt ut GPU-enheter med Pytorch/XLA-enheter. Eftersom vi använder ficklampsdistribution måste vi initiera träningen med XLA som enheten enligt följande:
    device = "xla"
    torch.distributed.init_process_group(device)

  2. Vi använder PyTorch/XLA distribuerade backend för att överbrygga PyTorch distribuerade API:er till XLA kommunikationssemantik.
  3. Vi använder PyTorch/XLA MpDeviceLoader för pipelines för dataintag. MpDeviceLoader hjälper till att förbättra prestandan genom att överlappa tre steg: spårning, kompilering och databatchladdning till enheten. Vi måste linda PyTorch dataloader med MpDeviceDataLoader enligt följande:
    train_device_loader = pl.MpDeviceLoader(train_loader, "xla")

  4. Kör optimeringssteget med hjälp av XLA-tillhandahållet API som visas i följande kod. Detta konsoliderar gradienterna mellan kärnor och utfärdar XLA-enhetens stegberäkning.
    torch_xla.core.xla_model.optimizer_step(optimizer)

  5. Mappa CUDA API:er (om några) till generiska PyTorch API:er.
  6. Ersätt CUDA fused optimizers (om några) med generiska PyTorch-alternativ.

Hela exemplet, som tränar en textklassificeringsmodell med SageMaker och Trainium, finns i det följande GitHub repo. Anteckningsboken Finjustera transformatorer för att bygga klassificeringsmodeller med SageMaker och Trainium.ipynb är startpunkten och innehåller steg-för-steg-instruktioner för att genomföra utbildningen.

Benchmark-tester

I testet körde vi två träningsjobb: ett på ml.trn1.32xlarge och ett på ml.p4d.24xlarge med samma batchstorlek, träningsdata och andra hyperparametrar. Under utbildningsjobben mätte vi den fakturerbara tiden för SageMaker-utbildningsjobben och beräknade pris-prestanda genom att multiplicera tiden som krävs för att köra utbildningsjobb i timmar med priset per timme för instanstypen. Vi valde det bästa resultatet för varje instanstyp bland flera jobbkörningar.

Följande tabell sammanfattar våra benchmarkresultat.

Modell Typ av instans Pris (per nod * timme) Genomströmning (iterationer/sek) Valideringsnoggrannhet Fakturerbar tid (sek) Utbildningskostnad i $
BERT-basklassificering ml.trn1.32xlarge 24.725 6.64 0.984 6033 41.47
BERT-basklassificering ml.p4d.24xlarge 37.69 5.44 0.984 6553 68.6

Resultaten visade att Trainium-instansen kostar mindre än P4d-instansen, vilket ger liknande genomströmning och precision när man tränar samma modell med samma indata och träningsparametrar. Detta innebär att Trainium-instansen levererar bättre pris-prestanda än GPU-baserade P4D-instanser. Med ett enkelt exempel som detta kan vi se att Trainium erbjuder cirka 22 % snabbare tid att träna och upp till 50 % lägre kostnad jämfört med P4d-instanser.

Distribuera den utbildade modellen

Efter att vi har tränat modellen kan vi distribuera den till olika instanstyper som CPU, GPU eller AWS Inferentia. Den viktigaste punkten att notera är att den tränade modellen inte är beroende av specialiserad hårdvara för att distribuera och dra slutsatser. SageMaker tillhandahåller mekanismer för att distribuera en tränad modell med både realtids- eller batchmekanismer. Notebook-exemplet i GitHub-repo innehåller kod för att distribuera den tränade modellen som en realtidsslutpunkt med hjälp av en ml.c5.xlarge (CPU-baserad) instans.

Slutsats

I det här inlägget tittade vi på hur man använder Trainium och SageMaker för att snabbt sätta upp och träna en klassificeringsmodell som ger upp till 50% kostnadsbesparingar utan att kompromissa med noggrannheten. Du kan använda Trainium för ett brett utbud av användningsfall som involverar förträning eller finjustering av transformatorbaserade modeller. För mer information om stöd för olika modellarkitekturer, se Riktlinjer för passning av modellarkitektur.


Om författarna

Arun Kumar Lokanatha är senior ML Solutions Architect med Amazon SageMaker Service-teamet. Han fokuserar på att hjälpa kunder att bygga, träna och migrera ML-produktionsarbetsbelastningar till SageMaker i stor skala. Han är specialiserad på Deep Learning, särskilt inom området NLP och CV. Utanför jobbet tycker han om att springa och vandra.

Mark Yu är mjukvaruingenjör i AWS SageMaker. Han fokuserar på att bygga distribuerade träningssystem i stor skala, optimera träningsprestanda och utveckla högpresterande ml-träningshårdvara, inklusive SageMaker trainium. Mark har också djupgående kunskaper om optimering av infrastruktur för maskininlärning. På fritiden tycker han om att vandra och springa.

Omri Fuchs är mjukvaruutvecklingschef på AWS SageMaker. Han är den tekniska ledaren som ansvarar för SageMakers utbildningsjobbplattform, med fokus på att optimera SageMakers träningsprestanda och förbättra träningsupplevelsen. Han har en passion för banbrytande ML- och AI-teknik. På fritiden gillar han att cykla och vandra.

Gal Oshri är Senior Product Manager på Amazon SageMaker-teamet. Han har 7 års erfarenhet av att arbeta med maskininlärningsverktyg, ramverk och tjänster.

Tidsstämpel:

Mer från AWS maskininlärning