Applikationer för maskininlärning (ML) är komplicerade att implementera och kräver ofta flera ML-modeller för att tjäna en enda slutledningsbegäran. En typisk begäran kan flöda över flera modeller med steg som förbearbetning, datatransformationer, modellvalslogik, modellaggregation och efterbearbetning. Detta har lett till utvecklingen av vanliga designmönster som seriella inferenspipelines, ensembler (scatter collection) och affärslogiska arbetsflöden, vilket resulterat i att hela arbetsflödet för begäran realiseras som en Directed Acyclic Graph (DAG). Men eftersom arbetsflöden blir mer komplexa leder detta till en ökning av den totala svarstiden, eller latens, för dessa applikationer, vilket i sin tur påverkar den övergripande användarupplevelsen. Dessutom, om dessa komponenter finns på olika instanser, ökar den ytterligare nätverkslatensen mellan dessa instanser den totala latensen. Betrakta ett exempel på ett populärt ML-användningsfall för en virtuell assistent i kundsupport. En typisk begäran kan behöva gå igenom flera steg som involverar taligenkänning, naturlig språkbehandling (NLP), spårning av dialogtillstånd, dialogpolicy, textgenerering och slutligen text till tal. Dessutom, för att göra användarinteraktionen mer personlig kan du också använda toppmoderna, transformatorbaserade NLP-modeller som olika versioner av BERTI, BARToch GPT. Slutresultatet är långa svarstider för dessa modellensembler och en dålig kundupplevelse.
Ett vanligt mönster för att få lägre svarstider utan att kompromissa med den totala genomströmningen är att vara värd för dessa modeller på samma instans tillsammans med den lätta affärslogik som är inbäddad i den. Dessa modeller kan vidare kapslas in i enstaka eller flera behållare på samma instans för att ge isolering för pågående processer och hålla latensen låg. Dessutom beror den totala latensen också på slutledningsapplikationslogik, modelloptimeringar, underliggande infrastruktur (inklusive beräkning, lagring och nätverk) och den underliggande webbservern som tar emot begäranden om slutledning. NVIDIA Triton Inference Server är en öppen källkodsmjukvara för slutledningsbetjäning med funktioner för att maximera genomströmning och hårdvaruanvändning med ultralåg (ensiffriga millisekunder) slutledningslatens. Den har brett stöd för ML-ramverk (inklusive TensorFlow, PyTorch, ONNX, XGBoost och NVIDIA TensorRT) och infrastrukturbackends, inklusive GPU:er, CPU:er och AWS slutledning. Dessutom är Triton Inference Server integrerad med Amazon SageMaker, en fullständigt hanterad end-to-end ML-tjänst, som ger realtidsalternativ för slutledning inklusive enda och multimodell värdskap. Dessa slutledningsalternativ inkluderar att vara värd för flera modeller inom samma behållare bakom en enda slutpunktoch värd flera modeller med flera behållare bakom en enda slutpunkt.
I november 2021 meddelade vi integrationen av Triton Inference Server på SageMaker. AWS arbetade nära NVIDIA för att göra det möjligt för dig att få det bästa av två världar och göra modelldistribution med Triton på AWS enklare.
I det här inlägget tittar vi på bästa praxis för att distribuera transformatormodeller i stor skala på GPU:er med hjälp av Triton Inference Server på SageMaker. Först börjar vi med en sammanfattning av nyckelbegrepp kring latens i SageMaker, och en översikt över riktlinjer för prestandajustering. Därefter ger vi en översikt över Triton och dess funktioner samt exempelkod för implementering på SageMaker. Slutligen utför vi belastningstester med hjälp av SageMaker Inference Recommender och sammanfatta insikterna och slutsatserna från lasttestning av en populär transformatormodell från Hugging Face.
Du kan granska anteckningsbok vi brukade distribuera modeller och utföra belastningstester på egen hand med hjälp av koden på GitHub.
Prestandajustering och optimering för modellvisning på SageMaker
Prestandajustering och optimering är en empirisk process som ofta involverar flera iterationer. Antalet parametrar som ska ställas in är kombinatoriskt och uppsättningen av konfigurationsparametervärden är inte oberoende av varandra. Olika faktorer påverkar optimal parameterinställning, inklusive nyttolaststorlek, typ och antalet ML-modeller i flödesdiagrammet för slutledningsbegäran, lagringstyp, beräkningsinstanstyp, nätverksinfrastruktur, applikationskod, programvarukörning och konfiguration av slutledningsbetjäning med mera.
Om du använder SageMaker för att distribuera ML-modeller måste du välja en beräkningsinstans med bästa pris-prestanda, vilket är en komplicerad och iterativ process som kan ta veckor av experiment. Först måste du välja rätt ML-instanstyp av över 70 alternativ baserat på resurskraven för dina modeller och storleken på indata. Därefter måste du optimera modellen för den valda instanstypen. Slutligen måste du tillhandahålla och hantera infrastruktur för att köra belastningstester och justera molnkonfigurationen för optimal prestanda och kostnad. Allt detta kan fördröja modellimplementeringen och tiden till marknaden. Dessutom måste du utvärdera avvägningarna mellan latens, genomströmning och kostnad för att välja den optimala distributionskonfigurationen. SageMaker Inference Recommender väljer automatiskt rätt beräkningsinstanstyp, instansantal, containerparametrar och modelloptimeringar för slutledning för att maximera genomströmningen, minska latens och minimera kostnaden.
Realtids slutledning och latens i SageMaker
SageMaker inferens i realtid är idealisk för slutledningsarbetsbelastningar där du har interaktiva realtidskrav med låg latens. Det finns fyra vanligast använda mätvärden för att övervaka inferensbegärans latens för SageMaker slutpunkter för slutpunkter
- Behållarfördröjning – Tiden det tar att skicka förfrågan, hämta svaret från modellens behållare och slutföra slutledning i behållaren. Detta mått är tillgängligt i Amazon CloudWatch som en del av Anropsstatistik publicerad av SageMaker.
- Modellens latens – Den totala tiden som alla SageMaker-containrar tar i en slutledningspipeline. Detta mått är tillgängligt i Amazon CloudWatch som en del av Anropsstatistik publicerad av SageMaker.
- Overhead latens – Mätt från det att SageMaker tar emot förfrågan tills den returnerar ett svar till klienten, minus modellens latens. Detta mått är tillgängligt i Amazon CloudWatch som en del av Anropsstatistik publicerad av SageMaker.
- End-to-end latens – Mätt från det att klienten skickar inferensförfrågan tills den får ett svar tillbaka. Kunder kan publicera detta som ett anpassat mått i Amazon CloudWatch.
Följande diagram illustrerar dessa komponenter.
Behållarens latens beror på flera faktorer; följande är bland de viktigaste:
- Underliggande protokoll (HTTP(s)/gRPC) som används för att kommunicera med slutledningsservern
- Overhead relaterade till att skapa nya TLS-anslutningar
- Deserialiseringstid för begäran/svarets nyttolast
- Begär kö- och batchfunktioner som tillhandahålls av den underliggande slutledningsservern
- Begär schemaläggningsfunktioner som tillhandahålls av den underliggande slutledningsservern
- Underliggande körtidsprestanda för slutledningsservern
- Prestanda för förbearbetnings- och efterbearbetningsbibliotek innan man anropar modellprediktionsfunktionen
- Underliggande ML-ramverk-backend-prestanda
- Modellspecifika och hårdvaruspecifika optimeringar
I det här inlägget fokuserar vi främst på att optimera behållarens latens tillsammans med total genomströmning och kostnad. Specifikt utforskar vi prestandajustering av Triton Inference Server som körs inuti en SageMaker-behållare.
Använda fallöversikt
Att distribuera och skala NLP-modeller i en produktionsuppställning kan vara ganska utmanande. NLP-modeller är ofta mycket stora och innehåller miljontals modellparametrar. Optimala modellkonfigurationer krävs för att tillfredsställa de stränga kraven på prestanda och skalbarhet för NLP-tillämpningar i produktionsklass.
I det här inlägget benchmarkar vi ett NLP-användningsfall med hjälp av en SageMaker-slutpunkt i realtid baserad på en Triton Inference Server-behållare och rekommenderar prestandajusteringsoptimeringar för vårt ML-användningsfall. Vi använder en stor, förutbildad transformatorbaserad Hugging Face BERT stor utan hölje modell, som har cirka 336 miljoner modellparametrar. Inmatningsmeningen som används för den binära klassificeringsmodellen är vadderad och trunkerad till en maximal indatasekvenslängd på 512 tokens. Slutledningsbelastningstestet simulerar 500 anrop per sekund (30,000 XNUMX maximala anrop per minut) och ModelLatency
på mindre än 0.5 sekunder (500 millisekunder).
Följande tabell sammanfattar vår benchmark-konfiguration.
Modellnamn | Kramande ansikte bert-large-uncased |
Modellstorlek | 1.25 GB |
Latenskrav | 0.5 sekunder (500 millisekunder) |
Anrop per sekund | 500 förfrågningar (30,000 XNUMX per minut) |
Ingångssekvenslängd | 512-symboler |
ML-uppgift | Binär klassificering |
NVIDIA Triton Inference Server
Triton Inference Server är speciellt utformad för att möjliggöra skalbar, snabb och enkel distribution av modeller i produktionen. Triton stöder en mängd stora AI-ramverk, inklusive TensorFlow, TensorRT, PyTorch, XGBoost och ONNX. Med Python och C++ anpassade backend kan du också implementera din inferensarbetsbelastning för mer anpassade användningsfall.
Viktigast av allt, Triton tillhandahåller en enkel konfigurationsbaserad installation för att vara värd för dina modeller, som exponerar en rik uppsättning prestandaoptimeringsfunktioner som du kan använda med liten kodningsansträngning.
Triton ökar slutledningsprestanda genom att maximera hårdvaruanvändningen med olika optimeringstekniker (samtidiga modellkörningar och dynamisk batchning är de mest använda). Att hitta de optimala modellkonfigurationerna från olika kombinationer av dynamiska batchstorlekar och antalet samtidiga modellinstanser är nyckeln för att uppnå realtids slutledning inom lågkostnadsservering med Triton.
Dynamisk batchning
Många utövare tenderar att köra slutledning sekventiellt när servern anropas med flera oberoende förfrågningar. Även om det är lättare att installera, är det vanligtvis inte den bästa praxisen att använda GPU:s datorkraft. För att hantera detta erbjuder Triton de inbyggda optimeringar av dynamisk batchning att kombinera dessa oberoende slutledningsbegäranden på serversidan för att dynamiskt bilda en större batch för att öka genomströmningen. Följande diagram illustrerar Tritons runtime-arkitektur.
I den föregående arkitekturen når alla förfrågningar den dynamiska batchern först innan de går in i de faktiska modellschemaläggningsköerna för att vänta på slutledning. Du kan ställa in dina föredragna batchstorlekar för dynamisk batchning med hjälp av föredragen_batchstorlek inställningar i modellkonfigurationen. (Observera att den bildade batchstorleken måste vara mindre än max_batch_size modellen stöder.) Du kan också konfigurera max_queue_delay_microseconds för att ange den maximala fördröjningstiden i batchern för att vänta på andra förfrågningar att gå med i batchen baserat på dina latenskrav.
Följande kodavsnitt visar hur du kan lägga till den här funktionen med modellkonfigurationsfiler för att ställa in dynamisk batchning med en föredragen batchstorlek på 16 för den faktiska slutsatsen. Med de nuvarande inställningarna anropas modellinstansen omedelbart när den föredragna batchstorleken på 16 uppnås eller fördröjningstiden på 100 mikrosekunder har förflutit sedan den första begäran nådde den dynamiska batchern.
Kör modeller samtidigt
En annan viktig optimering som erbjuds i Triton för att maximera hårdvaruanvändningen utan extra latensoverhead är samtidigt modellutförande, vilket gör att flera modeller eller flera kopior av samma modell kan köras parallellt. Denna funktion gör det möjligt för Triton att hantera flera slutledningsförfrågningar samtidigt, vilket ökar slutledningskapaciteten genom att använda annars inaktiv beräkningskraft på hårdvaran.
Följande bild visar hur du enkelt kan konfigurera olika modellimplementeringspolicyer med bara några rader kodändringar. Till exempel visar konfiguration A (vänster) att du kan sända samma konfiguration av två modellinstanser av bert-large-uncased
till alla tillgängliga GPU:er. Däremot visar konfiguration B (mitten) en annan konfiguration endast för GPU 0, utan att ändra policyerna på de andra GPU:erna. Du kan också distribuera instanser av olika modeller på en enda GPU, som visas i konfiguration C (höger).
I konfiguration C kan beräkningsinstansen hantera två samtidiga förfrågningar för DistilGPT-2-modellen och sju samtidiga förfrågningar för bert-large-uncased
modell parallellt. Med dessa optimeringar kan hårdvaruresurserna utnyttjas bättre för serveringsprocessen, och därigenom förbättra genomströmningen och ge bättre kostnadseffektivitet för din arbetsbörda.
TensorRT
NVIDIA TensorRT är en SDK för högpresterande djupinlärningsinferens som fungerar sömlöst med Triton. TensorRT, som stöder alla större ramverk för djupinlärning, inkluderar en slutledningsoptimerare och körtid som ger låg latens och hög genomströmning för att köra slutsatser med enorma mängder data via kraftfulla optimeringar.
TensorRT optimerar grafen för att minimera minnesfotavtryck genom att frigöra onödigt minne och effektivt återanvända det. Dessutom smälter TensorRT-kompileringen samman de glesa operationerna inuti modelldiagrammet för att bilda en större kärna för att undvika overhead av flera små kärnlanseringar. Kernel auto-tuning hjälper dig att fullt ut använda hårdvaran genom att välja den bästa algoritmen på din mål-GPU. CUDA-strömmar gör att modeller kan köras parallellt för att maximera din GPU-användning för bästa prestanda. Sist men inte minst kan kvantiseringstekniken fullt ut använda den blandade precisionsaccelerationen av Tensor-kärnorna för att köra modellen i FP32, TF32, FP16 och INT8 för att uppnå bästa slutledningsprestanda.
Triton på SageMaker-värd
SageMaker-värd tjänster är en uppsättning SageMaker-funktioner som syftar till att göra modelldistribution och betjäning enklare. Det ger en mängd olika alternativ för att enkelt distribuera, automatiskt skala, övervaka och optimera ML-modeller som är skräddarsydda för olika användningsfall. Detta innebär att du kan optimera dina distributioner för alla typer av användningsmönster, från beständiga och alltid tillgängliga med serverlösa alternativ till övergående, långvariga eller batch slutledningsbehov.
Under SageMakers värdparaply finns också uppsättningen SageMaker inference Deep Learning Containers (DLC), som kommer förpackade med lämplig modell av servermjukvara för deras motsvarande stödda ML-ramverk. Detta gör att du kan uppnå hög slutledningsprestanda utan modellserverinstallation, vilket ofta är den mest komplexa tekniska aspekten av modelldistribution och i allmänhet inte är en del av en datavetares kompetensuppsättning. Triton inferensserver är nu tillgänglig på SageMaker Deep Learning Containers (DLC).
Denna bredd av alternativ, modularitet och användarvänlighet för olika serveringsramverk gör SageMaker och Triton till en kraftfull matchning.
SageMaker Inference Recommender för benchmarking av testresultat
Vi använder SageMaker Inference Recommender för att köra våra experiment. SageMaker Inference Recommender erbjuder två typer av jobb: standard och avancerad, som illustreras i följande diagram.
Standardjobbet ger rekommendationer om instanstyper med bara modellen och ett exempel på nyttolast att jämföra. Förutom instansrekommendationer erbjuder tjänsten även körtidsparametrar som förbättrar prestandan. Standardjobbets rekommendationer är avsedda att begränsa instanssökningen. I vissa fall kan det vara instansfamiljen och i andra kan det vara de specifika instanstyperna. Resultaten av standardjobbet matas sedan in i det avancerade jobbet.
Det avancerade jobbet erbjuder fler kontroller för att ytterligare finjustera prestandan. Dessa kontroller simulerar den verkliga miljön och produktionskraven. Bland dessa kontroller finns trafikmönstret, som syftar till att iscensätta förfrågningsmönstret för riktmärkena. Du kan ställa in ramper eller stadig trafik genom att använda trafikmönstrets flera faser. Till exempel en InitialNumberOfUsers av 1, SpawnRate av 1 och DurationInSeconds av 600 kan resultera i ramptrafik på 10 minuter med 1 samtidig användare i början och 10 i slutet. Dessutom, på kontrollerna, MaxInvocations och ModelLatencyThresholds ställ in produktionströskeln, så när ett av tröskelvärdena överskrids stoppas benchmarkingen.
Slutligen rekommendationsmått inkluderar genomströmning, latens vid maximal genomströmning och kostnad per slutledning, så det är lätt att jämföra dem.
Vi använder den avancerade jobbtypen SageMaker Inference Recommender för att köra våra experiment för att få ytterligare kontroll över trafikmönstren och finjustera konfigurationen av serveringsbehållaren.
Experimentuppställning
Vi använder den anpassade belastningstestfunktionen i SageMaker Inference Recommender för att jämföra NLP-profilen som beskrivs i vårt användningsfall. Vi definierar först följande förutsättningar relaterade till NLP-modellen och ML-uppgiften. SageMaker Inference Recommender använder denna information för att hämta en slutledning Docker-bild från Amazon Elastic Container Registry (Amazon ECR) och registrera modellen med SageMakers modellregister.
Domän | NATURAL_LANGUAGE_PROCESSING |
uppgift | FILL_MASK |
Ramverk | PYTORCH: 1.6.0 |
Modell | bert-large-uncased |
Trafikmönsterkonfigurationerna i SageMaker Inference Recommender tillåter oss att definiera olika faser för det anpassade belastningstestet. Laddningstestet startar med två första användare och skapar två nya användare varje minut, under en total varaktighet av 25 minuter (1500 sekunder), som visas i följande kod:
Vi experimenterar med lasttestning av samma modell i två olika tillstånd. De PyTorch-baserade experimenten använder den oförändrade standardmodellen PyTorch. För TensorRT-baserade experiment konverterar vi PyTorch-modellen till en TensorRT-motor i förväg.
Vi använder olika kombinationer av prestandaoptimeringsfunktionerna på dessa två modeller, sammanfattade i följande tabell.
Konfigurationsnamn | Konfigurationsbeskrivning | Modellkonfiguration |
pt-base |
PyTorch baslinje | Bas PyTorch-modell, inga ändringar |
pt-db |
PyTorch med dynamisk batchning | dynamic_batching {} |
pt-ig |
PyTorch med flera modellinstanser | instance_group [ { count: 2 kind: KIND_GPU } ] |
pt-ig-db |
PyTorch med flera modellinstanser och dynamisk batchning | dynamic_batching {}, instance_group [ { count: 2 kind: KIND_GPU } ] |
trt-base |
TensorRT baslinje | PyTorch-modellen kompilerad med TensoRT trtexec verktyg |
trt-db |
TensorRT med dynamisk batchning | dynamic_batching {} |
trt-ig |
TensorRT med flera modellinstanser | instance_group [ { count: 2 kind: KIND_GPU } ] |
trt-ig-db |
TensorRT med flera modellinstanser och dynamisk batchning | dynamic_batching {}, instance_group [ { count: 2 kind: KIND_GPU } ] |
Testresultat och observationer
Vi genomförde belastningstester för tre instanstyper inom samma g4dn-familj: ml.g4dn.xlarge, ml.g4dn.2xlarge och ml.g4dn.12xlarge. Alla g4dn-instanstyper har tillgång till NVIDIA T4 Tensor Core GPU:er och 2nd Generation Intel Cascade Lake-processorer. Logiken bakom valet av instanstyper var att ha både en instans med endast en GPU tillgänglig, såväl som en instans med tillgång till flera GPU:er – fyra i fallet ml.g4dn.12xlarge. Dessutom ville vi testa om en ökning av vCPU-kapaciteten på instansen med endast en tillgänglig GPU skulle ge en förbättring av kostnads-prestandaförhållandet.
Låt oss först gå igenom snabbheten för den individuella optimeringen. Följande graf visar att TensorRT-optimering ger en 50 % minskning av modelllatens jämfört med den ursprungliga i PyTorch på ml.g4dn.xlarge-instansen. Denna latensreduktion växer till över tre gånger på multi-GPU-instanserna av ml.g4dn.12xlarge. Samtidigt är 30 % genomströmningsförbättring konsekvent i båda fallen, vilket resulterar i bättre kostnadseffektivitet efter tillämpning av TensorRT-optimeringar.
Med dynamisk batchning kan vi komma nära 2x förbättring i genomströmning med samma hårdvaruarkitektur på alla experimentinstanser av ml.g4dn.xlarge, ml.g4dn.2xlarge och ml.g4dn.12xlarge utan märkbar latencysökning.
På liknande sätt möjliggör samtidig modellexekvering oss att erhålla cirka 3-4x förbättring i genomströmning genom att maximera GPU-användningen på ml.g4dn.xlarge-instansen och cirka 2x förbättring på både ml.g4dn.2xlarge-instansen och multi-GPU-instansen av ml. g4dn.12xlarge.. Denna genomströmningsökning kommer utan någon overhead i latensen.
Ännu bättre, vi kan integrera alla dessa optimeringar för att ge bästa prestanda genom att utnyttja hårdvaruresurserna till fullo. Följande tabell och grafer sammanfattar resultaten vi fick i våra experiment.
Konfigurationsnamn | Modelloptimering |
Dynamisk Doserings |
Instansgruppskonfiguration | Instans typ | vCPU: er | GPUs |
GPU-minne (GB) |
Antal första instanser[1] | Anrop per min per instans | Modellens latens | Kostnad per timme[2] |
pt-bas | NA | Nej | NA | ml.g4dn.xlarge | 4 | 1 | 16 | 62 | 490 | 1500 | 45.6568 |
pt-db | NA | Ja | NA | ml.g4dn.xlarge | 4 | 1 | 16 | 57 | 529 | 1490 | 41.9748 |
pt-ig | NA | Nej | 2 | ml.g4dn.xlarge | 4 | 1 | 16 | 34 | 906 | 868 | 25.0376 |
pt-ig-db | NA | Ja | 2 | ml.g4dn.xlarge | 4 | 1 | 16 | 34 | 892 | 1158 | 25.0376 |
trt-bas | TensorRT | Nej | NA | ml.g4dn.xlarge | 4 | 1 | 16 | 47 | 643 | 742 | 34.6108 |
trt-db | TensorRT | Ja | NA | ml.g4dn.xlarge | 4 | 1 | 16 | 28 | 1078 | 814 | 20.6192 |
trt-ig | TensorRT | Nej | 2 | ml.g4dn.xlarge | 4 | 1 | 16 | 14 | 2202 | 1273 | 10.3096 |
trt-db-ig | TensorRT | Ja | 2 | ml.g4dn.xlarge | 4 | 1 | 16 | 10 | 3192 | 783 | 7.364 |
pt-bas | NA | Nej | NA | ml.g4dn.2xlarge | 8 | 1 | 32 | 56 | 544 | 1500 | 52.64 |
pt-db | NA | Ja | NA | ml.g4dn.2xlarge | 8 | 1 | 32 | 59 | 517 | 1500 | 55.46 |
pt-ig | NA | Nej | 2 | ml.g4dn.2xlarge | 8 | 1 | 32 | 29 | 1054 | 960 | 27.26 |
pt-ig-db | NA | Ja | 2 | ml.g4dn.2xlarge | 8 | 1 | 32 | 30 | 1017 | 992 | 28.2 |
trt-bas | TensorRT | Nej | NA | ml.g4dn.2xlarge | 8 | 1 | 32 | 42 | 718 | 1494 | 39.48 |
trt-db | TensorRT | Ja | NA | ml.g4dn.2xlarge | 8 | 1 | 32 | 23 | 1335 | 499 | 21.62 |
trt-ig | TensorRT | Nej | 2 | ml.g4dn.2xlarge | 8 | 1 | 32 | 23 | 1363 | 1017 | 21.62 |
trt-db-ig | TensorRT | Ja | 2 | ml.g4dn.2xlarge | 8 | 1 | 32 | 22 | 1369 | 963 | 20.68 |
pt-bas | NA | Nej | NA | ml.g4dn.12xlarge | 48 | 4 | 192 | 15 | 2138 | 906 | 73.35 |
pt-db | NA | Ja | NA | ml.g4dn.12xlarge | 48 | 4 | 192 | 15 | 2110 | 907 | 73.35 |
pt-ig | NA | Nej | 2 | ml.g4dn.12xlarge | 48 | 4 | 192 | 8 | 3862 | 651 | 39.12 |
pt-ig-db | NA | Ja | 2 | ml.g4dn.12xlarge | 48 | 4 | 192 | 8 | 3822 | 642 | 39.12 |
trt-bas | TensorRT | Nej | NA | ml.g4dn.12xlarge | 48 | 4 | 192 | 11 | 2892 | 279 | 53.79 |
trt-db | TensorRT | Ja | NA | ml.g4dn.12xlarge | 48 | 4 | 192 | 6 | 5356 | 278 | 29.34 |
trt-ig | TensorRT | Nej | 2 | ml.g4dn.12xlarge | 48 | 4 | 192 | 6 | 5210 | 328 | 29.34 |
trt-db-ig | TensorRT | Ja | 2 | ml.g4dn.12xlarge | 48 | 4 | 192 | 6 | 5235 | 439 | 29.34 |
[1] Det initiala antalet instanser i tabellen ovan är det rekommenderade antalet instanser som ska användas med en automatisk skalningspolicy för att upprätthålla kraven på genomströmning och latens för din arbetsbelastning.
[2] Kostnaden per timme i tabellen ovan beräknas baserat på det initiala antalet instanser och priset för instanstypen.
Resultaten validerar mestadels effekten som förväntades av olika prestandaoptimeringsfunktioner:
- TensorRT-kompileringen har den mest tillförlitliga effekten över alla instanstyper. Transaktioner per minut per instans ökade med 30–35 %, med en konsekvent kostnadsminskning på cirka 25 % jämfört med TensorRT-motorns prestanda med standard PyTorch BERT (
pt-base
). Den ökade prestandan hos TensorRT-motorn förstärks och utnyttjas av de andra testade prestandajusteringsfunktionerna. - Att ladda två modeller på varje GPU (instansgrupp) fördubblade nästan strikt alla uppmätta mätvärden. Antalet anrop per minut och instans ökade med cirka 80–90 %, vilket gav en kostnadsminskning i intervallet 50 %, nästan som om vi skulle använda två GPU:er. Faktiskt, amazoncloudwatch mätvärden för våra experiment på g4dn.2xlarge (som ett exempel) bekräftar att både CPU- och GPU-användningen fördubblas när vi konfigurerar en instansgrupp med två modeller.
Ytterligare tips om prestanda och kostnadsoptimering
Riktmärket som presenteras i det här inlägget skrapade precis på ytan av de möjliga funktionerna och teknikerna som du kan använda med Triton för att förbättra slutledningsprestanda. Dessa sträcker sig från dataförbehandlingstekniker, som att skicka binära nyttolaster till modellservern eller nyttolaster med större partier, till inbyggda Triton-funktioner, som följande:
- Modelluppvärmning, vilket förhindrar initiala, långsamma slutledningsbegäranden genom att fullständigt initiera modellen innan den första slutledningsbegäran tas emot.
- Svarscache, som cachar upprepade förfrågningar.
- Modellsammansättning, som gör att du kan skapa en pipeline av en eller flera modeller och anslutningen av ingångs- och utgångstensorer mellan dessa modeller. Detta öppnar möjligheten att lägga till förbearbetnings- och efterbearbetningssteg, eller till och med slutsatser med andra modeller, till bearbetningsflödet för varje begäran.
Vi förväntar oss att testa och jämföra dessa tekniker och funktioner i ett framtida inlägg, så håll utkik!
Slutsats
I det här inlägget utforskade vi några parametrar som du kan använda för att maximera prestandan för din SageMaker realtidsslutpunkt för att servera PyTorch BERT-modeller med Triton Inference Server. Vi använde SageMaker Inference Recommender för att utföra benchmarking-testerna för att finjustera dessa parametrar. Dessa parametrar är i huvudsak relaterade till TensorRT-baserad modelloptimering, vilket leder till nästan 50 % förbättring av svarstider jämfört med den icke-optimerade versionen. Dessutom ledde att köra modeller samtidigt och använda dynamisk batchning av Triton till nästan 70 % ökning av genomströmningen. Finjustering av dessa parametrar ledde också till en total minskning av slutledningskostnaden.
Det bästa sättet att härleda de korrekta värdena är genom experiment. Men för att börja bygga empirisk kunskap om prestandajustering och optimering kan du observera kombinationerna av olika Triton-relaterade parametrar och deras effekt på prestanda över ML-modeller och SageMaker ML-instanser.
SageMaker tillhandahåller verktygen för att ta bort de odifferentierade tunga lyften från varje steg i ML-livscykeln, och underlättar därigenom de snabba experimenterande och utforskningar som behövs för att helt optimera dina modellinstallationer.
Du kan hitta den bärbara datorn som används för belastningstestning och distribution på GitHub. Du kan uppdatera Triton-konfigurationer och SageMaker Inference Recommender-inställningar för att bäst passa ditt användningsfall för att uppnå kostnadseffektiva och bäst presterande slutledningsarbetsbelastningar.
Om författarna
Vikram Elango är en AI/ML Specialist Solutions Architect på Amazon Web Services, baserad i Virginia, USA. Vikram hjälper finans- och försäkringsbranschens kunder med design, tankeledarskap att bygga och distribuera maskininlärningsapplikationer i stor skala. Han är för närvarande fokuserad på naturlig språkbehandling, ansvarsfull AI, slutledningsoptimering och skalning av ML över hela företaget. På fritiden tycker han om att resa, vandra, laga mat och campa med sin familj.
João Moura är en AI/ML Specialist Solutions Architect på Amazon Web Services. Han fokuserar mest på NLP-användningsfall och att hjälpa kunder att optimera utbildning och implementering av Deep Learning-modeller. Han är också en aktiv förespråkare för ML-lösningar med låg kod och ML-specialiserad hårdvara.
Mohan Gandhi är senior mjukvaruingenjör på AWS. Han har varit med AWS de senaste 9 åren och har arbetat med olika AWS-tjänster som EMR, EFA och RDS på utposter. För närvarande fokuserar han på att förbättra SageMaker Inference Experience. På fritiden tycker han om att vandra och springa maraton.
Dhawal Patel är en huvudarkitekt för maskininlärning på AWS. Han har arbetat med organisationer som sträcker sig från stora företag till medelstora startups med problem relaterade till distribuerad datoranvändning och artificiell intelligens. Han fokuserar på djupinlärning inklusive NLP- och Computer Vision-domäner. Han hjälper kunder att uppnå högpresterande modellslutningar på SageMaker.
Santosh Bhavani är Senior teknisk produktchef med Amazon SageMaker Elastic Inference team. Han fokuserar på att hjälpa SageMaker-kunder att påskynda modellinferens och distribution. På fritiden tycker han om att resa, spela tennis och dricka mycket Pu'er-te.
Jiahong Liu är en lösningsarkitekt på Cloud Service Provider-teamet på NVIDIA. Han hjälper kunder att ta till sig maskininlärning och AI-lösningar som utnyttjar NVIDIAs accelererade datoranvändning för att hantera deras utbildnings- och slutledningsutmaningar. På sin fritid tycker han om origami, gör-det-själv-projekt och att spela basket.
- 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/achieve-hyperscale-performance-for-model-serving-using-nvidia-triton-inference-server-on-amazon-sagemaker/
- "
- 000
- 10
- 100
- 2021
- 70
- 77
- 84
- 9
- Om oss
- accelerera
- accelererad
- tillgång
- tvärs
- aktiv
- Dessutom
- Annat
- adress
- avancerat
- AI
- algoritm
- Alla
- Även
- amason
- Amazon Web Services
- bland
- meddelade
- Ansökan
- tillämpningar
- Tillämpa
- lämpligt
- cirka
- arkitektur
- runt
- konstgjord
- artificiell intelligens
- Assistent
- bil
- tillgänglig
- AWS
- Basketboll
- Börjar
- riktmärke
- BÄST
- bästa praxis
- SLUTRESULTAT
- Byggnad
- inbyggd
- företag
- Kan få
- kapacitet
- Kapacitet
- fall
- utmaningar
- utmanande
- Välja
- klassificering
- klienter
- cloud
- koda
- Kodning
- kombinationer
- komma
- Gemensam
- jämfört
- fullständigt
- komplex
- komprometterande
- Compute
- dator
- databehandling
- konfiguration
- anslutning
- Behållare
- Behållare
- kontroll
- Kärna
- Motsvarande
- kostnadseffektiv
- kunde
- skapa
- Skapa
- Aktuella
- För närvarande
- beställnings
- kund
- kundupplevelse
- Helpdesk
- Kunder
- datum
- fördröja
- levererar
- beror
- distribuera
- utplacera
- utplacering
- distributioner
- Designa
- utformade
- olika
- distribueras
- distribuerad databehandling
- diy
- Hamnarbetare
- domäner
- dubbla
- ner
- driv
- dynamisk
- lätt
- effekt
- effektivt
- ansträngning
- möjliggöra
- Slutpunkt
- Motor
- ingenjör
- Företag
- Miljö
- huvudsak
- väsentlig
- utvärdera
- Utvecklingen
- exempel
- utförande
- förvänta
- förväntat
- erfarenhet
- experimentera
- utforskning
- utforska
- Ansikte
- faktorer
- familj
- Leverans
- Funktioner
- Fed
- Figur
- Slutligen
- finansiella
- finna
- Förnamn
- passa
- flöda
- Fokus
- fokuserade
- fokuserar
- efter
- Fotavtryck
- formen
- Ramverk
- ytterligare
- framtida
- Allmänt
- generering
- GPU
- Grupp
- riktlinjer
- hårdvara
- höjd
- hjälpa
- hjälper
- Hög
- värd
- värd
- Hur ser din drömresa ut
- HTTPS
- bild
- Inverkan
- genomföra
- med Esport
- förbättra
- innefattar
- innefattar
- Inklusive
- Öka
- ökat
- ökande
- individuellt
- industrin
- informationen
- Infrastruktur
- ingång
- insikter
- försäkring
- integrera
- integrerade
- integrering
- Intel
- Intelligens
- interaktion
- interaktiva
- isolering
- IT
- Jobb
- Lediga jobb
- delta
- Nyckel
- kunskap
- språk
- Large
- större
- lanserar
- Ledarskap
- ledande
- Leads
- inlärning
- Led
- Hävstång
- lyft
- lättvikt
- liten
- läsa in
- Lång
- Maskinen
- maskininlärning
- bibehålla
- större
- GÖR
- Framställning
- hantera
- förvaltade
- chef
- marknad
- massiv
- Match
- Minne
- Metrics
- miljon
- miljoner
- ML
- modell
- modeller
- Övervaka
- övervakning
- mer
- mest
- multipel
- Natural
- nät
- nätverk
- anteckningsbok
- antal
- erhållna
- erbjuds
- Erbjudanden
- öppnas
- Verksamhet
- optimering
- Optimera
- optimera
- Tillbehör
- beställa
- organisationer
- Övriga
- annat
- övergripande
- egen
- Mönster
- prestanda
- i
- Strategier
- policy
- dålig
- Populära
- Möjligheten
- möjlig
- kraft
- den mäktigaste
- praktiken
- förutsägelse
- pris
- Principal
- problem
- process
- processer
- bearbetning
- Produkt
- Produktion
- Profil
- projekt
- protokoll
- ge
- ger
- tillhandahålla
- publicera
- Ramp
- område
- som sträcker sig
- nå
- realtid
- mottagna
- rekommenderar
- minska
- registrera
- begära
- förfrågningar
- kräver
- Obligatorisk
- Krav
- resurs
- Resurser
- respons
- ansvarig
- Resultat
- återgår
- översyn
- Körning
- rinnande
- skalbarhet
- skalbar
- Skala
- skalning
- sDK
- sömlöst
- Sök
- sekunder
- vald
- Server
- service
- Tjänster
- portion
- in
- inställning
- Enkelt
- Storlek
- Small
- So
- Mjukvara
- Programvara ingenjör
- lösning
- Lösningar
- några
- specialist
- specifikt
- Etapp
- standard
- starta
- startar
- Startups
- Ange
- Stater
- bo
- förvaring
- stödja
- Som stöds
- Stöder
- yta
- tar
- Målet
- grupp
- Teknisk
- tekniker
- testa
- Testning
- tester
- tanke ledarskap
- Genom
- tid
- tokens
- verktyg
- Spårning
- trafik
- Utbildning
- Transaktioner
- Traveling
- Uppdatering
- us
- USA
- användning
- användarfall
- användare
- vanligen
- utnyttja
- Använda
- mängd
- olika
- Virginia
- Virtuell
- syn
- vänta
- ville
- webb
- webbserver
- webbservice
- inom
- utan
- arbetade
- fungerar
- Världens
- skulle
- år
- Avkastning
- vilket gav