För dataforskare är det ofta en betydande utmaning att flytta modeller för maskininlärning (ML) från proof of concept till produktion. En av de största utmaningarna kan vara att distribuera en välpresterande, lokalt utbildad modell till molnet för slutledning och användning i andra applikationer. Det kan vara krångligt att hantera processen, men med rätt verktyg kan du minska den ansträngning som krävs avsevärt.
Amazon SageMaker slutledning, som gjordes allmänt tillgänglig i april 2022, gör det enkelt för dig att distribuera ML-modeller i produktion för att göra förutsägelser i stor skala, vilket ger ett brett urval av ML-infrastruktur och modelldistributionsalternativ för att möta alla typer av ML-slutledningsbehov. Du kan använda SageMaker Serverless Inference endpoints för arbetsbelastningar som har tomgångsperioder mellan trafiksprutorna och som tål kallstarter. Slutpunkterna skalas ut automatiskt baserat på trafik och tar bort det odifferentierade tunga lyftet med att välja och hantera servrar. Dessutom kan du använda AWS Lambda direkt för att exponera dina modeller och distribuera dina ML-applikationer med ditt föredragna ramverk med öppen källkod, vilket kan visa sig vara mer flexibelt och kostnadseffektivt.
FastAPI är ett modernt, högpresterande webbramverk för att bygga API:er med Python. Det sticker ut när det gäller att utveckla serverlösa applikationer med RESTful-mikrotjänster och användningsfall som kräver ML-inferens i stor skala över flera branscher. Dess lätthet och inbyggda funktioner som den automatiska API-dokumentationen gör det till ett populärt val bland ML-ingenjörer att distribuera högpresterande slutlednings-API:er. Du kan definiera och organisera dina rutter med hjälp av out-of-the-box-funktioner från FastAPI för att skala ut och hantera växande affärslogik efter behov, testa lokalt och vara värd för den på Lambda och sedan exponera den genom en enda API-gateway, som låter dig ta med ett webbramverk med öppen källkod till Lambda utan några tunga lyft eller omstrukturering av dina koder.
Det här inlägget visar hur du enkelt distribuerar och kör serverlös ML-inferens genom att exponera din ML-modell som en slutpunkt med hjälp av FastAPI, Docker, Lambda och Amazon API Gateway. Vi visar dig också hur du automatiserar distributionen med hjälp av AWS Cloud Development Kit (AWS CDK).
Lösningsöversikt
Följande diagram visar arkitekturen för lösningen vi distribuerar i det här inlägget.
Förutsättningar
Du måste ha följande förutsättningar:
- Python3 installerat, tillsammans med
virtualenv
för att skapa och hantera virtuella miljöer i Python - aws-cdk v2 installerad på ditt system för att kunna använda AWS CDK CLI
- Docker installerad och körs på din lokala dator
Testa om all nödvändig programvara är installerad:
- Smakämnen AWS-kommandoradsgränssnitt (AWS CLI) behövs. Logga in på ditt konto och välj den region där du vill distribuera lösningen.
- Använd följande kod för att kontrollera din Python-version:
- Kolla om
virtualenv
är installerat för att skapa och hantera virtuella miljöer i Python. Strängt taget är detta inte ett svårt krav, men det kommer att göra ditt liv enklare och hjälper till att följa med i det här inlägget lättare. Använd följande kod: - Kontrollera om cdk är installerat. Detta kommer att användas för att distribuera vår lösning.
- Kontrollera om Docker är installerat. Vår lösning kommer att göra din modell tillgänglig via en Docker-bild för Lambda. För att bygga den här bilden lokalt behöver vi Docker.
- Se till att Docker är igång med följande kod:
Hur du strukturerar ditt FastAPI-projekt med AWS CDK
Vi använder följande katalogstruktur för vårt projekt (ignorerar någon AWS CDK-kod som är oväsentlig i sammanhanget för detta inlägg):
Katalogen följer rekommenderad struktur för AWS CDK-projekt för Python.
Den viktigaste delen av detta förvar är fastapi_model_serving
katalog. Den innehåller koden som kommer att definiera AWS CDK-stacken och resurserna som kommer att användas för modellbetjäning.
Smakämnen fastapi_model_serving
katalogen innehåller model_endpoint
underkatalog, som innehåller alla nödvändiga tillgångar som utgör vår serverlösa slutpunkt, nämligen Dockerfilen för att bygga Docker-bilden som Lambda kommer att använda, Lambda-funktionskoden som använder FastAPI för att hantera slutledningsförfrågningar och dirigera dem till rätt slutpunkt, och modellen artefakter av modellen som vi vill distribuera. model_endpoint
innehåller även följande:
Docker
– Den här underkatalogen innehåller följande:Dockerfile
– Detta används för att bygga bilden för Lambda-funktionen med alla artefakter (Lambda-funktionskod, modellartefakter och så vidare) på rätt plats så att de kan användas utan problem.serving.api.tar.gz
– Det här är en tarball som innehåller alla tillgångar från runtime-mappen som är nödvändiga för att bygga Docker-avbildningen. Vi diskuterar hur man skapar.tar.gz
fil senare i detta inlägg.runtime
– Den här underkatalogen innehåller följande:serving_api
– Koden för Lambda-funktionen och dess beroenden som anges i filen requirements.txt.custom_lambda_utils
– Detta inkluderar ett slutledningsskript som laddar de nödvändiga modellartefakterna så att modellen kan skickas tillserving_api
som kommer att exponera det som en slutpunkt.
Dessutom har vi mallkatalogen, som tillhandahåller en mall med mappstrukturer och filer där du kan definiera dina anpassade koder och API:er enligt exemplet vi gick igenom tidigare. Mallkatalogen innehåller dummy-kod som du kan använda för att skapa nya Lambda-funktioner:
dummy
– Innehåller koden som implementerar strukturen för en vanlig Lambda-funktion med Python-körtidenapi
– Innehåller koden som implementerar en Lambda-funktion som lindar en FastAPI-slutpunkt runt en befintlig API-gateway
Distribuera lösningen
Som standard distribueras koden i eu-west-1-regionen. Om du vill ändra region kan du ändra kontextvariabeln DEPLOYMENT_REGION i cdk.json
fil.
Tänk dock på att lösningen försöker distribuera en Lambda-funktion ovanpå arm64-arkitekturen, och att den här funktionen kanske inte är tillgänglig i alla regioner. I det här fallet måste du ändra arkitekturparametern i fastapi_model_serving_stack.py
fil, såväl som den första raden i Dockerfilen i Docker-katalogen, för att vara värd för denna lösning på x86-arkitekturen.
Så här distribuerar du lösningen:
- Kör följande kommando för att klona GitHub-förvaret:
git clone https://github.com/aws-samples/lambda-serverless-inference-fastapi
Eftersom vi vill visa att lösningen kan fungera med modellartefakter som du tränar lokalt, innehåller vi ett exempel på modellartefakter av en förtränad DistilBERT modell på Hugging Face modellnavet för en uppgift att svara på frågor iserving_api.tar.gz
fil. Nedladdningstiden kan ta cirka 3–5 minuter. Låt oss nu ställa in miljön. - Ladda ner den förtränade modellen som kommer att distribueras från Hugging Face modellnavet till
./model_endpoint/runtime/serving_api/custom_lambda_utils/model_artifacts
katalog. Det skapar också en virtuell miljö och installerar alla beroenden som behövs. Du behöver bara köra detta kommando en gång:make prep
. Det här kommandot kan ta cirka 5 minuter (beroende på din internetbandbredd) eftersom det måste ladda ner modellartefakterna. - Paketera modellartefakterna inuti en
.tar.gz
arkiv som kommer att användas i Docker-avbildningen som är inbyggd i AWS CDK-stacken. Du måste köra den här koden när du gör ändringar i modellartefakterna eller själva API:et för att alltid ha den mest uppdaterade versionen av din serveringsslutpunkt paketerad:make package_model
. Artefakterna är alla på plats. Nu kan vi distribuera AWS CDK-stacken till ditt AWS-konto. - Kör cdk bootstrap om det är första gången du distribuerar en AWS CDK-app i en miljö (konto + regionkombination):
Denna stack innehåller resurser som behövs för verktygslådans drift. Till exempel innehåller stacken en Amazon Simple Storage Service (Amazon S3) hink som används för att lagra mallar och tillgångar under distributionsprocessen.
Eftersom vi bygger Docker-avbildningar lokalt i denna AWS CDK-distribution, måste vi se till att Docker-demonen körs innan vi kan distribuera denna stack via AWS CDK CLI.
- För att kontrollera om Docker-demonen körs på ditt system eller inte, använd följande kommando:
Om du inte får ett felmeddelande bör du vara redo att distribuera lösningen.
- Distribuera lösningen med följande kommando:
Detta steg kan ta cirka 5–10 minuter på grund av att du bygger och trycker på Docker-bilden.
Felsökning
Om du är en Mac-användare kan du stöta på ett fel när du loggar in Amazon Elastic Container Registry (Amazon ECR) med Docker-inloggningen, som t.ex Error saving credentials ... not implemented
. Till exempel:
Innan du kan använda Lambda ovanpå Docker-behållare inuti AWS CDK, kan du behöva ändra ~/docker/config.json
fil. Mer specifikt kan du behöva ändra parametern credsStore i ~/.docker/config.json
till osxkeychain. Det löser Amazon ECR-inloggningsproblem på en Mac.
Kör inferens i realtid
Efter din AWS molnformation stacken har distribuerats framgångsrikt, gå till Utgångarna fliken för din stack på AWS CloudFormation-konsolen och öppna slutpunktens URL. Nu är vår modell tillgänglig via slutpunkts-URL och vi är redo att köra slutledning i realtid.
Navigera till URL:en för att se om du kan se "hej världen" meddelande och lägg till /docs
till adressen för att se om du kan se den interaktiva swagger UI-sidan framgångsrikt. Det kan finnas en kall starttid, så du kan behöva vänta eller uppdatera några gånger.
När du har loggat in på målsidan för FastAPI swagger UI-sidan kan du köra via roten /
eller via /question
.
Från /
, kan du köra API:et och få meddelandet "hej världen".
Från /question
, kan du köra API:et och köra ML-inferens på modellen vi distribuerade för ett frågesvar. Vi använder till exempel frågan: Vilken färg har min bil nu? och sammanhanget är Min bil brukade vara blå men jag målade röd.
När du väljer Utförande, baserat på det givna sammanhanget, kommer modellen att besvara frågan med ett svar, som visas i följande skärmdump.
I svarskroppen kan du se svaret med konfidenspoängen från modellen. Du kan också experimentera med andra exempel eller bädda in API:t i din befintliga applikation.
Alternativt kan du köra slutledningen via kod. Här är ett exempel skrivet i Python, med hjälp av requests
bibliotek:
Koden matar ut en sträng som liknar följande:
Om du är intresserad av att veta mer om att distribuera generativ AI och stora språkmodeller på AWS, kolla in här:
- Distribuera serverlös generativ AI på AWS Lambda med OpenLLaMa
- Distribuera stora språkmodeller på AWS Inferentia2 med hjälp av stora modellinferensbehållare
Städa upp
Kör följande kod i rotkatalogen för ditt förvar för att rensa upp dina resurser:
Slutsats
I det här inlägget presenterade vi hur du kan använda Lambda för att distribuera din utbildade ML-modell med ditt föredragna ramverk för webbapplikationer, till exempel FastAPI. Vi tillhandahåller ett detaljerat kodlager som du kan distribuera, och du behåller flexibiliteten att byta till vilken utbildad modellartefakter du än bearbetar. Prestandan kan bero på hur du implementerar och distribuerar modellen.
Du är välkommen att prova själv, och vi är glada över att höra din feedback!
Om författarna
Tingyi Li är en Enterprise Solutions Architect från AWS baserad i Stockholm, Sverige som stödjer de nordiska kunderna. Hon tycker om att hjälpa kunder med arkitektur, design och utveckling av molnoptimerade infrastrukturlösningar. Hon är specialiserad på AI och Machine Learning och är intresserad av att ge kunderna intelligens i sina AI/ML-applikationer. På fritiden är hon även illustratör på deltid som skriver romaner och spelar piano.
Demir Catovic är en maskininlärningsingenjör från AWS baserad i Zürich, Schweiz. Han engagerar sig med kunder och hjälper dem att implementera skalbara och fullt fungerande ML-applikationer. Han brinner för att bygga och producera maskininlärningsapplikationer för kunder och är alltid angelägen om att utforska nya trender och banbrytande teknologier inom AI/ML-världen.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoData.Network Vertical Generative Ai. Styrka dig själv. Tillgång här.
- PlatoAiStream. Web3 Intelligence. Kunskap förstärkt. Tillgång här.
- Platoesg. Fordon / elbilar, Kol, CleanTech, Energi, Miljö, Sol, Avfallshantering. Tillgång här.
- BlockOffsets. Modernisera miljökompensation ägande. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/deploy-a-serverless-ml-inference-endpoint-of-large-language-models-using-fastapi-aws-lambda-and-aws-cdk/
- :är
- :inte
- :var
- $UPP
- 1
- 10
- 100
- 13
- 2022
- 7
- 9
- a
- Able
- Om oss
- tillgänglig
- Konto
- tvärs
- lägga till
- Dessutom
- adress
- AI
- AI / ML
- Alla
- tillåter
- längs
- också
- alltid
- amason
- Amazon Web Services
- bland
- an
- och
- svara
- vilken som helst
- api
- API: er
- app
- Ansökan
- tillämpningar
- April
- arkitektur
- arkiv
- ÄR
- runt
- AS
- Tillgångar
- At
- automatisera
- Automat
- automatiskt
- tillgänglig
- bort
- AWS
- AWS molnformation
- AWS Lambda
- backend
- Bandbredd
- baserat
- BE
- därför att
- innan
- mellan
- Blå
- kropp
- Bootstrap
- föra
- bred
- SLUTRESULTAT
- Byggnad
- byggt
- inbyggd
- företag
- men
- by
- KAN
- bil
- Vid
- fall
- utmanar
- utmaningar
- byta
- Förändringar
- ta
- val
- Välja
- cloud
- koda
- koder
- förkylning
- färg
- kombination
- kommer
- fullborda
- begrepp
- förtroende
- Kontakta
- anslutning
- Konsol
- innehålla
- Behållare
- Behållare
- innehåller
- sammanhang
- korrekt
- kostnadseffektiv
- kunde
- skapa
- skapar
- Skapa
- referenser
- Kunder
- kundanpassad
- allra senaste
- datum
- Standard
- beroende
- distribuera
- utplacerade
- utplacera
- utplacering
- Designa
- detaljerad
- utveckla
- Utveckling
- direkt
- diskutera
- Hamnarbetare
- dokumentation
- inte
- ladda ner
- grund
- under
- Tidigare
- lätta
- lättare
- lätt
- lätt
- ansträngning
- embed
- ge
- änden
- Slutpunkt
- ingriper
- ingenjör
- Ingenjörer
- säkerställa
- Företag
- Miljö
- miljöer
- fel
- exempel
- exempel
- exciterade
- exekvera
- befintliga
- Utgång
- experimentera
- utforska
- Ansikte
- Leverans
- få
- Fil
- Filer
- Förnamn
- första gången
- Flexibilitet
- flexibel
- följer
- efter
- följer
- För
- Ramverk
- från
- fungera
- funktionaliteter
- funktioner
- nätbryggan
- allmänhet
- generativ
- Generativ AI
- skaffa sig
- GitHub
- ges
- Go
- kommer
- Odling
- hantera
- Hård
- Har
- he
- höra
- tung
- tunga lyft
- hjälpa
- hjälpa
- hjälper
- här
- här.
- högpresterande
- värd
- Hur ser din drömresa ut
- How To
- Men
- html
- http
- HTTPS
- Nav
- i
- Idle
- if
- bild
- bilder
- genomföra
- redskap
- med Esport
- in
- I andra
- innefattar
- industrier
- Infrastruktur
- inuti
- installerad
- Intelligens
- interaktiva
- intresserad
- Internet
- in
- introducerade
- problem
- IT
- DESS
- sig
- json
- Angelägen
- Menande
- landning
- språk
- Large
- senare
- inlärning
- Bibliotek
- livet
- lyft
- tycka om
- linje
- laster
- lokal
- lokalt
- log
- skogsavverkning
- Logiken
- logga in
- mac
- Maskinen
- maskininlärning
- gjord
- Huvudsida
- göra
- GÖR
- hantera
- hantera
- Maj..
- Möt
- meddelande
- microservices
- kanske
- emot
- minuter
- ML
- modell
- modeller
- Modern Konst
- mer
- mest
- rörliga
- multipel
- måste
- my
- nämligen
- nödvändigt för
- Behöver
- behövs
- behov
- Nya
- nu
- of
- Ofta
- on
- gång
- ONE
- endast
- öppet
- öppen källkod
- drift
- Tillbehör
- or
- beställa
- vanlig
- Övriga
- vår
- ut
- förpackade
- sida
- parameter
- del
- Godkänd
- brinner
- prestanda
- perioder
- Plats
- plato
- Platon Data Intelligence
- PlatonData
- spelar
- Populära
- Inlägg
- Förutsägelser
- föredragen
- förutsättningar
- presenterar
- process
- Produktion
- projektet
- projekt
- bevis
- bevis på koncept
- Bevisa
- förutsatt
- ger
- tillhandahålla
- Tryckande
- Python
- fråga
- redo
- realtid
- Red
- minska
- region
- regioner
- Repository
- förfrågningar
- Obligatorisk
- krav
- Krav
- Resurser
- respons
- resultera
- behålla
- höger
- rot
- Rutt
- rutter
- Körning
- rinnande
- sagemaker
- sparande
- skalbar
- Skala
- vetenskapsmän
- omfattning
- göra
- se
- väljer
- Val
- Server
- Servrar
- service
- Tjänster
- portion
- in
- hon
- skall
- show
- visa
- visas
- Visar
- signifikant
- signifikant
- liknande
- Enkelt
- enda
- So
- Mjukvara
- lösning
- Lösningar
- Löser
- några
- tala
- specialiserad
- specifikt
- specificerade
- stapel
- står
- starta
- startar
- status
- Steg
- Steg
- förvaring
- lagra
- misslyckande
- Sträng
- struktur
- Framgångsrikt
- sådana
- Stödjande
- Sverige
- schweiz
- system
- Ta
- uppgift
- Tekniken
- mall
- mallar
- testa
- den där
- Smakämnen
- deras
- Dem
- sedan
- Där.
- de
- detta
- Genom
- tid
- gånger
- till
- verktyg
- topp
- trafik
- Tåg
- tränad
- Trender
- prova
- ui
- unix
- TIDSENLIG
- URL
- användning
- Begagnade
- Användare
- användningar
- med hjälp av
- version
- via
- Virtuell
- vänta
- vill
- var
- we
- webb
- webbapplikation
- webbservice
- välkommen
- VÄL
- begav sig
- Vad
- Vad är
- när
- närhelst
- om
- som
- VEM
- kommer
- med
- utan
- Arbete
- världen
- skriven
- Om er
- Din
- själv
- zephyrnet
- zurich