AWS Inferentia2 bygger på AWS Inferentia1 ved å levere 4x høyere gjennomstrømning og 10x lavere latens | Amazon Web Services

AWS Inferentia2 bygger på AWS Inferentia1 ved å levere 4x høyere gjennomstrømning og 10x lavere latens | Amazon Web Services

Størrelsen på maskinlæringsmodellene (ML) – store språkmodeller (LLM-er) og grunnmodeller (FM-er)––vokser raskt fra år til år, og disse modellene trenger raskere og kraftigere akseleratorer, spesielt for generativ AI. AWS Inferentia2 ble designet fra grunnen av for å levere høyere ytelse og samtidig senke kostnadene for LLM-er og generativ AI-slutning.

I dette innlegget viser vi hvordan andre generasjon AWS Inferentia bygger på egenskapene introdusert med AWS Inferentia1 og oppfyller de unike kravene til å distribuere og kjøre LLM-er og FM-er.

Den første generasjonen av AWS Inferentia, en spesialbygd akselerator lansert i 2019, er optimalisert for å akselerere dyp læringsslutning. AWS Inferentia hjalp ML-brukere med å redusere slutningskostnadene sine og forbedre prediksjonsgjennomstrømningen og ventetiden. Med AWS Inferentia1 så kundene opptil 2.3 ganger høyere gjennomstrømning og opptil 70 % lavere kostnad per slutning enn sammenlignbare slutningsoptimerte Amazon Elastic Compute Cloud (Amazon EC2) forekomster.

AWS Inferentia2, omtalt i den nye Amazon EC2 Inf2-forekomster og støttet inn Amazon SageMaker, er optimalisert for generativ AI-slutning i stor skala og er den første slutningsfokuserte forekomsten fra AWS som er optimalisert for distribuert inferens, med høyhastighets, lav latens-tilkobling mellom akseleratorer.

Du kan nå effektivt distribuere en modell med 175 milliarder parametere for slutninger på tvers av flere akseleratorer på én enkelt Inf2-instans uten å kreve dyre treningsinstanser. Til nå kunne kunder som hadde store modeller bare bruke instanser som ble bygget for opplæring, men dette er sløsing med ressurser – gitt at de er dyrere, bruker mer energi og at arbeidsmengden deres ikke utnytter alle tilgjengelige ressurser (som raskere nettverk og lagring). Med AWS Inferentia2 kan du oppnå 4 ganger høyere gjennomstrømning og opptil 10 ganger lavere ventetid sammenlignet med AWS Inferentia1. Den andre generasjonen av AWS Inferentia legger også til forbedret støtte for flere datatyper, tilpassede operatører, dynamiske tensorer og mer.

AWS Inferentia2 har 4 ganger større minnekapasitet, 16.4 ganger høyere minnebåndbredde enn AWS Inferentia1, og innebygd støtte for skjæring av store modeller på tvers av flere akseleratorer. Akseleratorene bruker NeuronLink og Neuron Collective Communication for å maksimere hastigheten på dataoverføring mellom dem eller mellom en akselerator og nettverksadapteren. AWS Inferentia2 er bedre egnet for større modeller, som krever skjæring på tvers av flere akseleratorer, selv om AWS Inferentia1 fortsatt er et flott alternativ for mindre modeller fordi det gir bedre prisytelse sammenlignet med alternativer.

Arkitektur evolusjon

For å sammenligne begge generasjonene av AWS Inferentia, la oss se gjennom arkitekturen til AWS Inferentia1. Den har fire NeuronCores v1 per brikke, vist i følgende diagram.

AWS Inferentia2 bygger på AWS Inferentia1 ved å levere 4x høyere gjennomstrømning og 10x lavere latens | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Spesifikasjoner per brikke:

  • Beregn – Fire kjerner som leverer totalt 128 INT8 TOPS og 64FP16/BF16 TFLOPS
  • Minne – 8 GB DRAM (50 GB/sek båndbredde), delt av alle fire kjerner
  • NeuronLink – Kobling mellom kjerner for skjæring av modeller på tvers av to eller flere kjerner

La oss se på hvordan AWS Inferentia2 er organisert. Hver AWS Inferentia2-brikke har to oppgraderte kjerner basert på NeuronCore-v2-arkitektur. Som AWS Inferentia1 kan du kjøre forskjellige modeller på hver NeuronCore eller kombinere flere kjerner for å sønderdele store modeller.

AWS Inferentia2 bygger på AWS Inferentia1 ved å levere 4x høyere gjennomstrømning og 10x lavere latens | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Spesifikasjoner per brikke:

  • Beregn – To kjerner som leverer totalt 380 INT8 TOPS, 190 FP16/BF16/cFP8/TF32 TFLOPS og 47.5 FP32 TFLOPS
  • Minne – 32 GB HBM, delt av begge kjerner
  • NeuronLink – Kobling mellom brikker (384 GB/sek per enhet) for å dele modeller over to eller flere kjerner

NeuronCore-v2 har en modulær design med fire uavhengige motorer:

  • ScalarEngine (3 ganger raskere enn v1) – Fungerer på flyttall tall––1600 (BF16/FP16) FLOPS
  • VectorEngine (10 ganger raskere enn v1) – Fungerer på vektorer av tall med enkeltoperasjon for beregninger som normalisering, sammenslåing og andre.
  • TensorEngine (6 ganger raskere enn v1) – Utfører tensorberegninger som Conv, Reshape, Transpose og andre.
  • GPSIMD-motor – Har åtte fullt programmerbare 512-bits brede prosessorer for generell bruk som du kan lage dine tilpassede operatører med standard PyTorch egendefinerte C++ operators API. Dette er en ny funksjon, introdusert i NeuronCore-v2.

AWS Inferentia2 NeuronCore-v2 er raskere og mer optimalisert. Den er også i stand til å akselerere ulike typer og størrelser av modeller, alt fra enkle modeller som ResNet 50 til store språkmodeller eller grunnleggende modeller med milliarder av parametere som GPT-3 (175 milliarder parametere). AWS Inferentia2 har også et større og raskere internminne, sammenlignet med AWS Inferentia1, som vist i følgende tabell.

Chip Nevronkjerner Minne Type Minnestørrelse Minne båndbredde
AWS slutning x4 (v1) DDR4 8GB 50 GB / S
AWS Inferentia 2 x2 (v2) HBM 32GB 820 GB / S

Minnet du finner i AWS Inferentia2 er av typen High-Bandwidth Memory (HBM). Hver AWS Inferentia2-brikke har 32 GB og som kan kombineres med andre brikker for å distribuere veldig store modeller ved hjelp av NeuronLink (enhet-til-enhet-sammenkobling). En inf2.48xlarge har for eksempel 12 AWS Inferentia2-akseleratorer med totalt 384 GB akselerert minne. Hastigheten til AWS Inferentia2-minne er 16.4 ganger raskere enn AWS Inferentia1, som vist i forrige tabell.

Andre funksjoner

AWS Inferentia2 tilbyr følgende tilleggsfunksjoner:

  • Maskinvare støttet – cFP8 (ny, konfigurerbar FP8), FP16, BF16, TF32, FP32, INT8, INT16 og INT32. For mer informasjon, se Datatyper.
  • Lazy Tensor-slutning - Vi diskuterer Lazy Tensor-slutning senere i dette innlegget.
  • Egendefinerte operatører – Utviklere kan bruke standard PyTorch-tilpassede operatørprogrammeringsgrensesnitt for å bruke Tilpassede C++-operatører trekk. En tilpasset operatør er sammensatt av lavnivå-primitiver tilgjengelig i Tensor fabrikkfunksjoner og akselerert av GPSIMD-motor.
  • Kontrollflyt (kommer snart) – Dette er for at det opprinnelige programmeringsspråket skal kontrollere flyten inne i modellen for å forbehandle og etterbehandle data fra ett lag til et annet.
  • Dynamiske former (kommer snart) – Dette er nyttig når modellen endrer formen på utdataene til et hvilket som helst internt lag dynamisk. For eksempel: et filter som reduserer utgangstensorstørrelsen eller -formen inne i modellen, basert på inndataene.

Akselererende modeller på AWS Inferentia1 og AWS Inferentia2

De AWS Neuron SDK brukes til å kompilere og kjøre modellen din. Den er integrert med PyTorch og TensorFlow. På den måten trenger du ikke kjøre et ekstra verktøy. Bruk den originale koden din, skrevet i et av disse ML-rammeverket, og med noen få linjer med kodeendringer er du klar til å gå med AWS Inferentia.

La oss se på hvordan du kompilerer og kjører en modell på AWS Inferentia1 og AWS Inferentia2 ved hjelp av PyTorch.

Last inn en forhåndstrent modell (ResNet 50) fra torchvision

Last inn en forhåndstrent modell og kjør den én gang for å varme den opp:

import torch
import torchvision model = torchvision.models.resnet50(weights='IMAGENET1K_V1').eval().cpu()
x = torch.rand(1,3,224,224).float().cpu() # dummy input
y = model(x) # warmup model

Spor og distribuer den akselererte modellen på Inferentia1

For å spore modellen til AWS Inferentia, importer torch_neuron og påkalle sporingsfunksjonen. Husk at modellen må være PyTorch Jit-sporbar for å fungere.

På slutten av sporingsprosessen lagrer du modellen som en vanlig PyTorch-modell. Kompiler modellen én gang og last den tilbake så mange ganger du trenger. Neuron SDK-runtime er allerede integrert i PyTorch og er ansvarlig for å sende operatørene til AWS Inferentia1-brikken automatisk for å akselerere modellen din.

I slutningskoden din må du alltid importere torch_neuron for å aktivere den integrerte kjøretiden.

Du kan passere tilleggsparametere til kompilatoren for å tilpasse måten den optimerer modellen på, eller for å aktivere spesielle funksjoner som nevron-pipeline-kjerner. Del modellen over flere kjerner for å øke gjennomstrømningen.

import torch_neuron # Tracing the model using AWS NeuronSDK
neuron_model = torch_neuron.trace(model,x) # trace model to Inferentia
# Saving for future use
neuron_model.save('neuron_resnet50.pt') # Next time you don't need to trace the model again
# Just load it and AWS NeuronSDK will send it to Inferentia automatically
neuron_model = torch.jit.load('neuron_resnet50.pt') # accelerated inference on Inferentia
y = neuron_model(x)

Spore og distribuere den akselererte modellen på Inferentia2

For AWS Inferentia2 er prosessen lik. Den eneste forskjellen er at pakken du importerer slutter med x: torch_neuronx. Neuron SDK tar seg av kompileringen og kjøringen av modellen for deg på en transparent måte. Du kan også bestå tilleggsparametere til kompilatoren for å finjustere operasjonen eller aktivere spesifikke funksjoner.

import torch_neuronx # Tracing the model using NeuronSDK
neuron_model = torch_neuronx.trace(model,x) # trace model to Inferentia
# Saving for future use
neuron_model.save('neuron_resnet50.pt') # Next time you don't need to trace the model again
# Just load it and NeuronSDK will send it to Inferentia automatically
neuron_model = torch.jit.load('neuron_resnet50.pt') # accelerated inference on Inferentia
y = neuron_model(x)

AWS Inferentia2 tilbyr også en andre tilnærming for å kjøre en modell kalt Lazy Tensor-slutning. I denne modusen sporer eller kompilerer du ikke modellen tidligere; i stedet kjører kompilatoren på farten hver gang du kjører koden. Det anbefales ikke for produksjon, gitt at sporingsmodus har mange fordeler over Lazy Tensor-slutning. Men hvis du fortsatt utvikler modellen din og trenger å teste den raskere, kan Lazy Tensor-inferens være et godt alternativ. Slik kompilerer og kjører du en modell ved hjelp av Lazy Tensor:

import torch
import torchvision
import torch_neuronx
import torch_xla.core.xla_model as xm device = xm.xla_device() # Create XLA device
model = torchvision.models.resnet50(weights='IMAGENET1K_V1').eval().cpu()
model.to(device) x = torch.rand((1,3,224,224), device=device) # dummy input
with torch.no_grad(): y = model(x) xm.mark_step() # Compilation occurs here

Nå som du er kjent med AWS Inferentia2, er et godt neste skritt å komme i gang med PyTorch or tensorflow og lær hvordan du setter opp et utviklermiljø og kjører opplæringsprogrammer og eksempler. Sjekk også AWS Neuron Samples GitHub repo, hvor du kan finne flere eksempler på hvordan du forbereder modeller til å kjøre på Inf2, Inf1 og Trn1.

Sammendrag av funksjonssammenligning mellom AWS Inferentia1 og AWS Inferentia2

AWS Inferentia2-kompilatoren er XLA-basert, og AWS er ​​en del av OpenXLA initiativ. Dette er den største forskjellen i forhold til AWS Inferentia1, og det er relevant fordi PyTorch, TensorFlow og JAX har innebygde XLA-integrasjoner. XLA gir mange ytelsesforbedringer, gitt at den optimerer grafen for å beregne resultatene i en enkelt kjernelansering. Den smelter sammen påfølgende tensoroperasjoner og sender ut optimal maskinkode for å akselerere modellkjøringer på AWS Inferentia2. Andre deler av Neuron SDK ble også forbedret i AWS Inferentia2, samtidig som brukeropplevelsen ble så enkel som mulig mens du sporer og kjører modeller. Tabellen nedenfor viser funksjonene som er tilgjengelige i begge versjoner av kompilatoren og kjøretid.

Trekk fakkel-neuron fakkel-nevronx
Tensorbrett Ja Ja
Støttede forekomster Inf1 Inf2 & Trn1
Inferensstøtte Ja Ja
Treningsstøtte Nei Ja
arkitektur NeuronCore-v1 NeuronCore-v2
Spor API torch_neuron.trace() torch_neuronx.trace()
Distribuert slutning NeuronCore Pipeline Kollektiv kommunikasjon
IR GraphDef HLO
kompilatoren neuron-cc neuronx-cc
Overvåking neuron-monitor / monitor-topp neuron-monitor / monitor-topp

For en mer detaljert sammenligning mellom torch-neuron (Inf1) og torch-neuronx (Inf2), se Sammenligning av torch-neuron (Inf1) versus torch-neuronx (Inf2 & Trn1) for inferens.

Modellservering

Etter å ha sporet en modell som skal distribueres til Inf2, har du mange distribusjonsalternativer. Du kan kjøre sanntidsprediksjoner eller batch-prediksjoner på forskjellige måter. Inf2 er tilgjengelig fordi EC2-forekomster er naturlig integrert med andre AWS-tjenester som benytter seg av Deep Learning Containers (DLC-er) som f.eks Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes-tjeneste (Amazon EKS), og SageMaker.

AWS Inferentia2 er kompatibel med de mest populære distribusjonsteknologiene. Her er en liste over noen av alternativene du har for å distribuere modeller ved hjelp av AWS Inferentia2:

  • SageMaker – Fullt administrert tjeneste for å forberede data og bygge, trene og distribuere ML-modeller
  • TorchServe – PyTorch integrert distribusjonsmekanisme
  • TensorFlow Servering – TensorFlow integrert distribusjonsmekanisme
  • Dypt Java-bibliotek – Åpen kildekode Java-mekanisme for modelldistribusjon og opplæring
  • Triton – NVIDIA åpen kildekode-tjeneste for modelldistribusjon

benchmark

Følgende tabell fremhever forbedringene AWS Inferentia2 bringer over AWS Inferentia1. Spesifikt måler vi latens (hvor raskt modellen kan lage en prediksjon ved å bruke hver akselerator), gjennomstrømning (hvor mange slutninger per sekund) og kostnad per slutning (hvor mye hver slutning koster i amerikanske dollar). Jo lavere ventetid i millisekunder og kostnader i amerikanske dollar, jo bedre. Jo høyere gjennomstrømning jo bedre.

To modeller ble brukt i denne prosessen – begge store språkmodeller: ELECTRA stor diskriminator og BERT stor uncased. PyTorch (1.13.1) og Hugging Face-transformatorer (v4.7.0), hovedbibliotekene som ble brukt i dette eksperimentet, kjørte på Python 3.8. Etter å ha kompilert modellene for batchstørrelse = 1 og 10 (ved å bruke koden fra forrige seksjon som referanse), ble hver modell varmet opp (påkalt én gang for å initialisere konteksten) og deretter påkalt 10 ganger på rad. Tabellen nedenfor viser gjennomsnittlige tall samlet i denne enkle referansen.

Modellnavn Partistørrelse, Gruppestørrelse Setningslengde Latency (ms) Forbedringer Inf2 over Inf1 (x ganger) Gjennomstrømning (slutninger per sekund) Kostnad per slutning (EC2 us-east-1) **
Inf1 Inf2 Inf1 Inf2 Inf1 Inf2
ElectraLarge Discriminator 1 256 35.7 8.31 4.30 28.01 120.34 $0.0000023 $0.0000018
ElectraLarge Discriminator 10 256 343.7 72.9 4.71 2.91 13.72 $0.0000022 $0.0000015
BertLargeUncased 1 128 28.2 3.1 9.10 35.46 322.58 $0.0000018 $0.0000007
BertLargeUncased 10 128 121.1 23.6 5.13 8.26 42.37 $0.0000008 $0.0000005

* c6a.8xlarge med 32 AMD Epyc 7313 CPU ble brukt i denne benchmarken.

**EC2 Offentlige priser i us-east-1 20. april: inf2.xlarge: $0.7582/time; inf1.xlarge: $0.228/time. Kostnad per slutning vurderer kostnaden per element i en batch. (Kostnad per slutning tilsvarer den totale kostnaden for modellanrop/batchstørrelse.)

For ytterligere informasjon om trening og slutningsytelse, se Trn1/Trn1n Ytelse.

konklusjonen

AWS Inferentia2 er en kraftig teknologi designet for å forbedre ytelsen og redusere kostnadene ved dyplæringsmodellslutninger. Mer ytelse enn AWS Inferentia1, den tilbyr opptil 4 ganger høyere gjennomstrømning, opptil 10 ganger lavere ventetid og opptil 50 % bedre ytelse/watt enn andre sammenlignbare inferensoptimaliserte EC2-forekomster. Til slutt betaler du mindre, har en raskere søknad og oppfyller bærekraftsmålene dine.

Det er enkelt og greit å migrere slutningskoden til AWS Inferentia2, som også støtter et bredere utvalg av modeller, inkludert store språkmodeller og grunnleggende modeller for generativ AI.

Du kan komme i gang ved å følge AWS Neuron SDK-dokumentasjon å sette opp et utviklingsmiljø og starte ditt akselererte dyplæringsprosjekt. For å hjelpe deg i gang har Hugging Face lagt til Neuron-støtte til deres Optimum bibliotek, som optimerer modeller for raskere trening og inferens, og de har mange eksempler på oppgaver klare til å kjøre på Inf2. Sjekk også vår Distribuer store språkmodeller på AWS Inferentia2 ved å bruke store modellslutningsbeholdere for å lære om distribusjon av LLM-er til AWS Inferentia2 ved å bruke modellinferensbeholdere. For flere eksempler, se AWS Neuron Samples GitHub repo.


Om forfatterne

AWS Inferentia2 bygger på AWS Inferentia1 ved å levere 4x høyere gjennomstrømning og 10x lavere latens | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Samir Araújo er AI/ML Solutions Architect hos AWS. Han hjelper kunder med å lage AI/ML-løsninger som løser deres forretningsutfordringer ved hjelp av AWS. Han har jobbet med flere AI/ML-prosjekter relatert til datasyn, naturlig språkbehandling, prognoser, ML på kanten og mer. Han liker å leke med maskinvare og automatiseringsprosjekter på fritiden, og han har en spesiell interesse for robotikk.

Tidstempel:

Mer fra AWS maskinlæring