For datavidenskabsfolk er det ofte en betydelig udfordring at flytte maskinlæringsmodeller (ML) fra proof of concept til produktion. En af hovedudfordringerne kan være at implementere en velfungerende, lokalt trænet model til skyen til slutning og brug i andre applikationer. Det kan være besværligt at styre processen, men med det rigtige værktøj kan du reducere den nødvendige indsats markant.
Amazon SageMaker konklusion, som blev gjort generelt tilgængelig i april 2022, gør det nemt for dig at implementere ML-modeller i produktionen for at lave forudsigelser i skala, hvilket giver et bredt udvalg af ML-infrastruktur og modelimplementeringsmuligheder for at hjælpe med at opfylde alle former for ML-slutningsbehov. Du kan bruge SageMaker Serverless Inference-endepunkter til arbejdsbelastninger, der har tomgangsperioder mellem trafikken og kan tåle koldstart. Slutpunkterne skalerer ud automatisk baseret på trafik og fjerner de udifferentierede tunge løft ved at vælge og administrere servere. Derudover kan du bruge AWS Lambda direkte for at eksponere dine modeller og implementere dine ML-applikationer ved hjælp af din foretrukne open source-ramme, som kan vise sig at være mere fleksibel og omkostningseffektiv.
FastAPI er en moderne, højtydende webramme til opbygning af API'er med Python. Det skiller sig ud, når det kommer til at udvikle serverløse applikationer med RESTful-mikrotjenester og use cases, der kræver ML-inferens på tværs af flere industrier. Dens lethed og indbyggede funktionaliteter som den automatiske API-dokumentation gør det til et populært valg blandt ML-ingeniører at implementere højtydende inferens-API'er. Du kan definere og organisere dine ruter ved hjælp af out-of-the-box-funktionaliteter fra FastAPI til at skalere ud og håndtere voksende forretningslogik efter behov, teste lokalt og hoste den på Lambda og derefter eksponere den gennem en enkelt API-gateway, som giver dig mulighed for at bringe et open source-web-framework til Lambda uden nogen tunge løft eller omstrukturering af dine koder.
Dette indlæg viser dig, hvordan du nemt kan implementere og køre serverløs ML-inferens ved at eksponere din ML-model som et slutpunkt ved hjælp af FastAPI, Docker, Lambda og Amazon API Gateway. Vi viser dig også, hvordan du automatiserer implementeringen ved hjælp af AWS Cloud Development Kit (AWS CDK).
Løsningsoversigt
Følgende diagram viser arkitekturen af den løsning, vi implementerer i dette indlæg.
Forudsætninger
Du skal have følgende forudsætninger:
- Python3 installeret sammen med
virtualenv
til at skabe og administrere virtuelle miljøer i Python - aws-cdk v2 installeret på dit system for at kunne bruge AWS CDK CLI
- Docker installeret og kører på din lokale maskine
Test om al den nødvendige software er installeret:
- AWS kommandolinjegrænseflade (AWS CLI) er nødvendig. Log ind på din konto, og vælg den region, hvor du vil implementere løsningen.
- Brug følgende kode til at tjekke din Python-version:
- Tjek om
virtualenv
er installeret til at skabe og administrere virtuelle miljøer i Python. Strengt taget er dette ikke et hårdt krav, men det vil gøre dit liv lettere og hjælper med at følge med i dette indlæg nemmere. Brug følgende kode: - Tjek om cdk er installeret. Dette vil blive brugt til at implementere vores løsning.
- Tjek om Docker er installeret. Vores løsning vil gøre din model tilgængelig via et Docker-billede for Lambda. For at bygge dette billede lokalt har vi brug for Docker.
- Sørg for, at Docker er oppe og kører med følgende kode:
Sådan struktureres dit FastAPI-projekt ved hjælp af AWS CDK
Vi bruger følgende mappestruktur til vores projekt (ignorerer en eller anden AWS CDK-kode, der er uvæsentlig i forbindelse med dette indlæg):
Biblioteket følger anbefalet struktur af AWS CDK-projekter til Python.
Den vigtigste del af dette depot er fastapi_model_serving
vejviser. Den indeholder koden, der vil definere AWS CDK-stakken og de ressourcer, der skal bruges til modelservering.
fastapi_model_serving
mappen indeholder model_endpoint
undermappe, som indeholder alle de nødvendige aktiver, der udgør vores serverløse slutpunkt, nemlig Dockerfilen til at bygge Docker-billedet, som Lambda vil bruge, Lambda-funktionskoden, der bruger FastAPI til at håndtere inferensanmodninger og dirigere dem til det korrekte slutpunkt, og modellen artefakter af den model, vi ønsker at implementere. model_endpoint
indeholder også følgende:
Docker
– Denne undermappe indeholder følgende:Dockerfile
– Dette bruges til at bygge billedet til Lambda-funktionen med alle artefakter (Lambda-funktionskode, modelartefakter og så videre) på det rigtige sted, så de kan bruges uden problemer.serving.api.tar.gz
– Dette er en tarball, der indeholder alle aktiver fra runtime-mappen, der er nødvendige for at bygge Docker-billedet. Vi diskuterer, hvordan man skaber.tar.gz
fil senere i dette indlæg.runtime
– Denne undermappe indeholder følgende:serving_api
– Koden til Lambda-funktionen og dens afhængigheder angivet i filen requirement.txt.custom_lambda_utils
– Dette inkluderer et inferensscript, der indlæser de nødvendige modelartefakter, så modellen kan videregives tilserving_api
det vil så afsløre det som et slutpunkt.
Derudover har vi skabelonmappen, som giver en skabelon med mappestrukturer og filer, hvor du kan definere dine tilpassede koder og API'er efter prøven, vi gik igennem tidligere. Skabelonbiblioteket indeholder dummy-kode, som du kan bruge til at oprette nye Lambda-funktioner:
dummy
– Indeholder koden, der implementerer strukturen af en almindelig Lambda-funktion ved hjælp af Python-runtimeapi
– Indeholder koden, der implementerer en Lambda-funktion, der omslutter et FastAPI-slutpunkt omkring en eksisterende API-gateway
Implementer løsningen
Som standard er koden implementeret i eu-west-1-regionen. Hvis du vil ændre regionen, kan du ændre kontekstvariablen DEPLOYMENT_REGION i cdk.json
fil.
Husk dog, at løsningen forsøger at implementere en Lambda-funktion oven på arm64-arkitekturen, og at denne funktion muligvis ikke er tilgængelig i alle regioner. I dette tilfælde skal du ændre arkitekturparameteren i fastapi_model_serving_stack.py
fil, såvel som den første linje i Dockerfilen inde i Docker-mappen, for at være vært for denne løsning på x86-arkitekturen.
Udfør følgende trin for at implementere løsningen:
- Kør følgende kommando for at klone GitHub-lageret:
git clone https://github.com/aws-samples/lambda-serverless-inference-fastapi
Fordi vi ønsker at vise, at løsningen kan fungere med modelartefakter, som du træner lokalt, indeholder vi et eksempel på en modelartefakt af en fortrænet DistilBERT model på Hugging Face-modelhubben til en opgave med besvarelse af spørgsmål iserving_api.tar.gz
fil. Downloadtiden kan tage omkring 3-5 minutter. Lad os nu sætte miljøet op. - Download den fortrænede model, der vil blive implementeret fra Hugging Face-modelhubben til
./model_endpoint/runtime/serving_api/custom_lambda_utils/model_artifacts
vejviser. Det skaber også et virtuelt miljø og installerer alle afhængigheder, der er nødvendige. Du behøver kun at køre denne kommando én gang:make prep
. Denne kommando kan tage omkring 5 minutter (afhængigt af din internetbåndbredde), fordi den skal downloade modellens artefakter. - Pak modelartefakterne inde i en
.tar.gz
arkiv, der vil blive brugt inde i Docker-billedet, der er bygget i AWS CDK-stakken. Du skal køre denne kode, når du foretager ændringer i modelartefakter eller selve API'en for altid at have den mest opdaterede version af dit serverende slutpunkt pakket:make package_model
. Artefakterne er alle på plads. Nu kan vi implementere AWS CDK-stakken til din AWS-konto. - Kør cdk bootstrap, hvis det er din første gang, du implementerer en AWS CDK app i et miljø (konto + region kombination):
Denne stak indeholder ressourcer, der er nødvendige for værktøjskassens drift. For eksempel inkluderer stakken en Amazon Simple Storage Service (Amazon S3)-bøtte, der bruges til at gemme skabeloner og aktiver under implementeringsprocessen.
Fordi vi bygger Docker-images lokalt i denne AWS CDK-implementering, skal vi sikre, at Docker-dæmonen kører, før vi kan implementere denne stak via AWS CDK CLI.
- For at kontrollere, om Docker-dæmonen kører på dit system, skal du bruge følgende kommando:
Hvis du ikke får en fejlmeddelelse, bør du være klar til at implementere løsningen.
- Implementer løsningen med følgende kommando:
Dette trin kan tage omkring 5-10 minutter på grund af at bygge og skubbe Docker-billedet.
Fejlfinding
Hvis du er en Mac-bruger, kan du støde på en fejl, når du logger ind Amazon Elastic Container Registry (Amazon ECR) med Docker-login, som f.eks Error saving credentials ... not implemented
. For eksempel:
Før du kan bruge Lambda oven på Docker-beholdere inde i AWS CDK, skal du muligvis ændre ~/docker/config.json
fil. Mere specifikt skal du muligvis ændre parameteren credsStore i ~/.docker/config.json
til osxkeychain. Det løser Amazon ECR-loginproblemer på en Mac.
Kør inferens i realtid
Efter din AWS CloudFormation stakken er implementeret med succes, skal du gå til Udgange fanen for din stak på AWS CloudFormation-konsollen og åbn slutpunktets URL. Nu er vores model tilgængelig via slutpunkts-URL'en, og vi er klar til at køre inferens i realtid.
Naviger til URL'en for at se, om du kan se "hej verden" besked og tilføje /docs
til adressen for at se, om du kan se den interaktive swagger UI-side med succes. Der kan være en kold starttid, så du skal muligvis vente eller genopfriske et par gange.
Når du har logget ind på landingssiden for FastAPI swagger UI-siden, kan du køre via roden /
eller via /question
.
Fra /
, kan du køre API'en og få beskeden "hej verden".
Fra /question
, kunne du køre API'en og køre ML-inferens på den model, vi implementerede til en case, der besvarer spørgsmål. For eksempel bruger vi spørgsmålet er Hvad er farven på min bil nu? og konteksten er Min bil plejede at være blå, men jeg malede rød.
Når du vælger Udfør, baseret på den givne kontekst, vil modellen besvare spørgsmålet med et svar, som vist på det følgende skærmbillede.
I svarlegemet kan du se svaret med konfidensscore fra modellen. Du kan også eksperimentere med andre eksempler eller integrere API'en i din eksisterende applikation.
Alternativt kan du køre slutningen via kode. Her er et eksempel skrevet i Python ved hjælp af requests
bibliotek:
Koden udsender en streng, der ligner følgende:
Hvis du er interesseret i at vide mere om implementering af Generative AI og store sprogmodeller på AWS, så tjek her:
- Implementer serverløs generativ AI på AWS Lambda med OpenLLaMa
- Implementer store sprogmodeller på AWS Inferentia2 ved hjælp af store modelinferenscontainere
Ryd op
Kør følgende kode inde i rodmappen på dit lager for at rydde op i dine ressourcer:
Konklusion
I dette indlæg introducerede vi, hvordan du kan bruge Lambda til at implementere din trænede ML-model ved hjælp af din foretrukne webapplikationsramme, såsom FastAPI. Vi har leveret et detaljeret kodelager, som du kan implementere, og du bevarer fleksibiliteten til at skifte til de trænede modelartefakter, du behandler. Ydeevnen kan afhænge af, hvordan du implementerer og implementerer modellen.
Du er velkommen til at prøve det selv, og vi glæder os til at høre din feedback!
Om forfatterne
Tingyi Li er en Enterprise Solutions Architect fra AWS baseret i Stockholm, Sverige, der støtter de nordiske kunder. Hun nyder at hjælpe kunder med arkitektur, design og udvikling af cloud-optimerede infrastrukturløsninger. Hun er specialiseret i AI og Machine Learning og er interesseret i at styrke kunderne med intelligens i deres AI/ML-applikationer. I sin fritid er hun også illustrator på deltid, der skriver romaner og spiller klaver.
Demir Catovic er en maskinlæringsingeniør fra AWS med base i Zürich, Schweiz. Han engagerer sig med kunder og hjælper dem med at implementere skalerbare og fuldt funktionelle ML-applikationer. Han brænder for at bygge og producere maskinlæringsapplikationer til kunder og er altid ivrig efter at udforske nye trends og banebrydende teknologier i AI/ML-verdenen.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- PlatoData.Network Vertical Generative Ai. Styrk dig selv. Adgang her.
- PlatoAiStream. Web3 intelligens. Viden forstærket. Adgang her.
- PlatoESG. Automotive/elbiler, Kulstof, CleanTech, Energi, Miljø, Solenergi, Affaldshåndtering. Adgang her.
- BlockOffsets. Modernisering af miljømæssig offset-ejerskab. Adgang her.
- Kilde: https://aws.amazon.com/blogs/machine-learning/deploy-a-serverless-ml-inference-endpoint-of-large-language-models-using-fastapi-aws-lambda-and-aws-cdk/
- :er
- :ikke
- :hvor
- $OP
- 1
- 10
- 100
- 13
- 2022
- 7
- 9
- a
- I stand
- Om
- tilgængelig
- Konto
- tværs
- tilføje
- Derudover
- adresse
- AI
- AI / ML
- Alle
- tillader
- sammen
- også
- altid
- Amazon
- Amazon Web Services
- blandt
- an
- ,
- besvare
- enhver
- api
- API'er
- app
- Anvendelse
- applikationer
- april
- arkitektur
- Arkiv
- ER
- omkring
- AS
- Aktiver
- At
- automatisere
- Automatisk Ur
- automatisk
- til rådighed
- væk
- AWS
- AWS CloudFormation
- AWS Lambda
- Bagende
- båndbredde
- baseret
- BE
- fordi
- før
- mellem
- Blå
- krop
- Bootstrap
- bringe
- bred
- bygge
- Bygning
- bygget
- indbygget
- virksomhed
- men
- by
- CAN
- bil
- tilfælde
- tilfælde
- udfordre
- udfordringer
- lave om
- Ændringer
- kontrollere
- valg
- Vælg
- Cloud
- kode
- koder
- forkølelse
- farve
- kombination
- kommer
- fuldføre
- Konceptet
- tillid
- Tilslut
- tilslutning
- Konsol
- indeholder
- Container
- Beholdere
- indeholder
- sammenhæng
- korrigere
- omkostningseffektiv
- kunne
- skabe
- skaber
- Oprettelse af
- Legitimationsoplysninger
- Kunder
- tilpassede
- banebrydende
- data
- Standard
- Afhængigt
- indsætte
- indsat
- implementering
- implementering
- Design
- detaljeret
- udvikling
- Udvikling
- direkte
- diskutere
- Docker
- dokumentation
- Dont
- downloade
- grund
- i løbet af
- tidligere
- lette
- lettere
- nemt
- let
- indsats
- Integrer
- bemyndigelse
- ende
- Endpoint
- indgreb
- ingeniør
- Ingeniører
- sikre
- Enterprise
- Miljø
- miljøer
- fejl
- eksempel
- eksempler
- ophidset
- udføre
- eksisterende
- Udgang
- eksperiment
- udforske
- Ansigtet
- Feature
- få
- File (Felt)
- Filer
- Fornavn
- første gang
- Fleksibilitet
- fleksibel
- følger
- efter
- følger
- Til
- Framework
- fra
- funktion
- funktionaliteter
- funktioner
- gateway
- generelt
- generative
- Generativ AI
- få
- GitHub
- given
- Go
- gå
- Dyrkning
- håndtere
- Hård Ost
- Have
- he
- høre
- tunge
- tunge løft
- hjælpe
- hjælpe
- hjælper
- hende
- link.
- Høj ydeevne
- host
- Hvordan
- How To
- Men
- HTML
- http
- HTTPS
- Hub
- i
- tomgang
- if
- billede
- billeder
- gennemføre
- redskaber
- vigtigt
- in
- I andre
- omfatter
- industrier
- Infrastruktur
- indvendig
- installeret
- Intelligens
- interaktiv
- interesseret
- Internet
- ind
- introduceret
- spørgsmål
- IT
- ITS
- selv
- json
- Keen
- Kendskab til
- landing
- Sprog
- stor
- senere
- læring
- Bibliotek
- Livet
- løft
- ligesom
- Line (linje)
- belastninger
- lokale
- lokalt
- log
- logning
- logik
- Logge på
- mac
- maskine
- machine learning
- lavet
- Main
- lave
- maerker
- administrere
- styring
- Kan..
- Mød
- besked
- microservices
- måske
- tankerne
- minutter
- ML
- model
- modeller
- Moderne
- mere
- mest
- flytning
- flere
- skal
- my
- nemlig
- nødvendig
- Behov
- behov
- behov
- Ny
- nu
- of
- tit
- on
- engang
- ONE
- kun
- åbent
- open source
- drift
- Indstillinger
- or
- ordrer
- almindelig
- Andet
- vores
- ud
- emballeret
- side
- parameter
- del
- Bestået
- lidenskabelige
- ydeevne
- perioder
- Place
- plato
- Platon Data Intelligence
- PlatoData
- spiller
- Populær
- Indlæg
- Forudsigelser
- foretrækkes
- forudsætninger
- gaver
- behandle
- produktion
- projekt
- projekter
- bevis
- Bevis for koncept
- Bevise
- forudsat
- giver
- leverer
- Pushing
- Python
- spørgsmål
- klar
- realtid
- Rød
- reducere
- region
- regioner
- Repository
- anmodninger
- påkrævet
- krav
- Krav
- Ressourcer
- svar
- resultere
- tilbageholde
- højre
- rod
- R
- veje
- Kør
- kører
- sagemaker
- besparelse
- skalerbar
- Scale
- forskere
- rækkevidde
- score
- se
- udvælgelse
- valg
- Serverless
- Servere
- tjeneste
- Tjenester
- servering
- sæt
- hun
- bør
- Vis
- udstillingsvindue
- vist
- Shows
- signifikant
- betydeligt
- lignende
- Simpelt
- enkelt
- So
- Software
- løsninger
- Løsninger
- Løser
- nogle
- taler
- specialiserede
- specifikt
- specificeret
- stable
- står
- starte
- starter
- Status
- Trin
- Steps
- opbevaring
- butik
- lagring
- String
- struktur
- Succesfuld
- sådan
- Støtte
- Sverige
- Schweiz
- systemet
- Tag
- Opgaver
- Teknologier
- skabelon
- skabeloner
- prøve
- at
- deres
- Them
- derefter
- Der.
- de
- denne
- Gennem
- tid
- gange
- til
- værktøj
- top
- Trafik
- Tog
- uddannet
- Tendenser
- prøv
- ui
- unix
- up-to-date
- URL
- brug
- anvendte
- Bruger
- bruger
- ved brug af
- udgave
- via
- Virtual
- vente
- ønsker
- var
- we
- web
- Webapplikation
- webservices
- velkommen
- GODT
- gik
- Hvad
- Hvad er
- hvornår
- når
- hvorvidt
- som
- WHO
- vilje
- med
- uden
- Arbejde
- world
- skriftlig
- Du
- Din
- dig selv
- zephyrnet
- Zürich