Etter hvert som maskinlæring (ML) blir mainstream og får bredere bruk, blir ML-drevne inferensapplikasjoner stadig mer vanlige for å løse en rekke komplekse forretningsproblemer. Løsningen på disse komplekse forretningsproblemene krever ofte bruk av flere ML-modeller og trinn. Dette innlegget viser deg hvordan du bygger og er vert for en ML-applikasjon med tilpassede beholdere på Amazon SageMaker.
Amazon SageMaker tilbyr innebygde algoritmer og forhåndsbygd SageMaker docker-bilder for modelldistribusjon. Men hvis disse ikke passer dine behov, kan du ta med dine egne beholdere (BYOC) for hosting på Amazon SageMaker.
Det er flere brukstilfeller der brukere kan trenge BYOC for hosting på Amazon SageMaker.
- Tilpassede ML-rammeverk eller biblioteker: Hvis du planlegger å bruke et ML-rammeverk eller biblioteker som ikke støttes av Amazon SageMaker innebygde algoritmer eller forhåndsbygde beholdere, må du opprette en tilpasset beholder.
- Spesialiserte modeller: For visse domener eller bransjer kan det hende du trenger spesifikke modellarkitekturer eller skreddersydde forbehandlingstrinn som ikke er tilgjengelige i innebygde Amazon SageMaker-tilbud.
- Proprietære algoritmer: Hvis du har utviklet dine egne proprietære algoritmer internt, trenger du en tilpasset beholder for å distribuere dem på Amazon SageMaker.
- Komplekse slutningsrørledninger: Hvis arbeidsflyten for ML-inferens involverer tilpasset forretningslogikk – en rekke komplekse trinn som må utføres i en bestemt rekkefølge – kan BYOC hjelpe deg med å administrere og orkestrere disse trinnene mer effektivt.
Løsningsoversikt
I denne løsningen viser vi hvordan du er vert for en ML seriell inferensapplikasjon på Amazon SageMaker med sanntidsendepunkter ved å bruke to tilpassede inferensbeholdere med nyeste scikit-learn
og xgboost
pakker.
Den første beholderen bruker en scikit-learn
modell for å transformere rådata til utvalgte kolonner. Det gjelder Standard Scaler for numeriske kolonner og OneHotEncoder til kategoriske.
Den andre beholderen er vert for en fortrent XGboost
modell (dvs. prediktor). Prediktormodellen aksepterer de funksjonelle inndataene og gir ut spådommer.
Til slutt distribuerer vi featureizer og prediktor i en serie-inferens-pipeline til et Amazon SageMaker-endepunkt i sanntid.
Her er noen forskjellige betraktninger om hvorfor du kanskje vil ha separate beholdere i slutningsapplikasjonen din.
- dekobling – Ulike trinn i rørledningen har et klart definert formål og må kjøres på separate beholdere på grunn av de underliggende avhengighetene som er involvert. Dette bidrar også til å holde rørledningen godt strukturert.
- rammer – Ulike trinn i rørledningen bruker spesifikke rammeverk som passer til formålet (som scikit eller Spark ML) og må derfor kjøres på separate beholdere.
- Ressursisolasjon – Ulike trinn i rørledningen har varierende krav til ressursforbruk og må derfor kjøres på separate beholdere for mer fleksibilitet og kontroll.
- Vedlikehold og oppgraderinger – Fra et operasjonelt synspunkt fremmer dette funksjonell isolasjon, og du kan fortsette å oppgradere eller endre individuelle trinn mye lettere, uten å påvirke andre modeller.
I tillegg hjelper lokal bygging av de individuelle beholderne i den iterative prosessen med utvikling og testing med favorittverktøy og integrerte utviklingsmiljøer (IDE). Når beholderne er klare, kan du bruke dem til å distribuere dem til AWS-skyen for slutninger ved å bruke Amazon SageMaker-endepunkter.
Full implementering, inkludert kodebiter, er tilgjengelig i dette Github-depotet her..
Forutsetninger
Ettersom vi tester disse egendefinerte beholderne lokalt først, trenger vi docker desktop installert på din lokale datamaskin. Du bør være kjent med å bygge docker-containere.
Du trenger også en AWS-konto med tilgang til Amazon SageMaker, Amazon ECR og Amazon S3 for å teste denne applikasjonen ende-til-ende.
Sørg for at du har den nyeste versjonen av Boto3
og Amazon SageMaker Python-pakkene installert:
Løsningsgjennomgang
Bygg egendefinert featureizer-beholder
For å bygge den første beholderen, featurizer-beholderen, trener vi en scikit-learn
modell for å behandle råfunksjoner i sjøøre datasett. Forbehandlingsskriptet bruker SimpleImputer for håndtering av manglende verdier, Standard Scaler for normalisering av numeriske kolonner, og OneHotEncoder for transformering av kategoriske kolonner. Etter å ha montert transformatoren lagrer vi modellen inn jobblib format. Vi komprimerer og laster deretter opp denne lagrede modellartefakten til en Amazon Simple Storage Service (Amazon S3) bøtte.
Her er en eksempelkodebit som demonstrerer dette. Referere til featurizer.ipynb for full implementering:
Deretter, for å lage en tilpasset slutningsbeholder for featurizer-modellen, bygger vi et Docker-bilde med nginx, gunicorn, flask-pakker, sammen med andre nødvendige avhengigheter for featurizer-modellen.
Nginx, Gunicorn og Flask-appen vil fungere som modellserveringsstakken på Amazon SageMaker sanntidsendepunkter.
Når vi tar med tilpassede beholdere for hosting på Amazon SageMaker, må vi sørge for at inferensskriptet utfører følgende oppgaver etter å ha blitt lansert inne i beholderen:
- Modelllasting: Inferensskript (
preprocessing.py
) bør referere til/opt/ml/model
katalogen for å laste modellen i beholderen. Modellartefakter i Amazon S3 vil bli lastet ned og montert på containeren ved stien/opt/ml/model
. - Miljøvariabler: For å sende tilpassede miljøvariabler til beholderen, må du spesifisere dem under Modell opprettelsestrinn eller under Endpoint opprettelse fra en treningsjobb.
- API-krav: Inferens-skriptet må implementere begge deler
/ping
og/invocations
ruter som en Flask-applikasjon. De/ping
API brukes til helsesjekker, mens/invocations
API håndterer slutningsforespørsler. - Hogst: Utdatalogger i inferensskriptet må skrives til standardutdata (stdout) og standardfeil (stderr) bekker. Disse loggene blir deretter streamet til Amazon CloudWatch av Amazon SageMaker.
Her er et utdrag fra preprocessing.py
som viser gjennomføringen av /ping
og /invocations
.
Referere til preprosessing.py under featurizer-mappen for full implementering.
Bygg Docker-bilde med featurizer og modellserveringsstabel
La oss nå bygge en Dockerfile ved å bruke et tilpasset basebilde og installere nødvendige avhengigheter.
Til dette bruker vi python:3.9-slim-buster
som basisbilde. Du kan endre dette hvilket som helst annet basisbilde som er relevant for din brukssituasjon.
Vi kopierer deretter nginx-konfigurasjonen, gunicorns webserver-gateway-fil og inferensskriptet til containeren. Vi lager også et python-skript kalt serve som starter nginx- og gunicorn-prosesser i bakgrunnen og setter inferensskriptet (dvs. preprocessing.py Flask-applikasjonen) som inngangspunkt for beholderen.
Her er et utdrag av Dockerfile for hosting av funksjonsmodellen. For fullstendig gjennomføring se Dockerfile etter featureizer mappe.
Test egendefinert konklusjonsbilde med featurizer lokalt
Nå, bygg og test den tilpassede slutningsbeholderen med featurizer lokalt ved å bruke Amazon SageMaker lokal modus. Lokal modus er perfekt for å teste prosesserings-, trenings- og slutningsskriptene dine uten å starte noen jobber på Amazon SageMaker. Etter å ha bekreftet resultatene av dine lokale tester, kan du enkelt tilpasse trenings- og slutningsskriptene for distribusjon på Amazon SageMaker med minimale endringer.
For å teste det egendefinerte featurizer-bildet lokalt, må du først bygge bildet ved å bruke det tidligere definerte Dockerfile. Start deretter en beholder ved å montere katalogen som inneholder featurizer-modellen (preprocess.joblib
) til /opt/ml/model
katalog inne i beholderen. Kartlegg i tillegg port 8080 fra container til verten.
Når den er lansert, kan du sende slutningsforespørsler til http://localhost:8080/invocations.
For å bygge og starte containeren, åpne en terminal og kjør følgende kommandoer.
Merk at du bør erstatte <IMAGE_NAME>
, som vist i følgende kode, med bildenavnet til beholderen din.
Følgende kommando forutsetter også at den trente scikit-learn
modell (preprocess.joblib
) er til stede under en katalog som heter models
.
Etter at containeren er oppe og går, kan vi teste både /ping og /påkallelser ruter ved hjelp av curl-kommandoer.
Kjør kommandoene nedenfor fra en terminal
Når rå (utransformerte) data sendes til http://localhost:8080/invocations, svarer endepunktet med transformerte data.
Du bør se svar noe som ligner på følgende:
Vi avslutter nå den kjørende beholderen, og merker og skyver det lokale tilpassede bildet til et privat Amazon Elastic Container Registry (Amazon ECR) oppbevaringssted.
Se følgende kommandoer for å logge på Amazon ECR, som merker det lokale bildet med full Amazon ECR-bildebane og deretter skyver bildet til Amazon ECR. Sørg for å erstatte region
og account
variabler for å matche miljøet ditt.
Referere til opprette et depot og push et bilde til Amazon ECR AWS kommandolinjegrensesnitt (AWS CLI) kommandoer for mer informasjon.
Valgfritt trinn
Eventuelt kan du utføre en live-test ved å distribuere featurizer-modellen til et sanntidsendepunkt med det tilpassede docker-bildet i Amazon ECR. Referere til featurizer.ipynb notatbok for full implementering av bygging, testing og skyving av det tilpassede bildet til Amazon ECR.
Amazon SageMaker initialiserer inferensendepunktet og kopierer modellartefaktene til /opt/ml/model
katalog inne i beholderen. Se Hvordan SageMaker laster inn modellartefakter.
Bygg tilpasset XGBoost-prediktorbeholder
For å bygge XGBoost-inferensbeholderen følger vi lignende trinn som vi gjorde mens vi bygde bildet for featurizer-beholderen:
- Last ned forhåndstrent
XGBoost
modell fra Amazon S3. - Opprett
inference.py
skript som laster det forhåndstrenteXGBoost
modell, konverterer de transformerte inndataene mottatt fra featurizer, og konverterer tilXGBoost.DMatrix
format, kjørerpredict
på boosteren, og returnerer spådommer i json-format. - Skript og konfigurasjonsfiler som danner modellserveringsstakken (dvs.
nginx.conf
,wsgi.py
ogserve
forblir den samme og trenger ingen modifikasjoner. - Vi bruker
Ubuntu:18.04
som basisbilde for Dockerfilen. Dette er ikke en forutsetning. Vi bruker ubuntu-grunnbildet for å demonstrere at containere kan bygges med hvilket som helst basisbilde. - Trinnene for å bygge kundens docker-bilde, teste bildet lokalt og skyve det testede bildet til Amazon ECR forblir de samme som før.
For korthets skyld, siden trinnene er lignende vist tidligere; imidlertid viser vi bare den endrede kodingen i det følgende.
Først inference.py
manus. Her er et utdrag som viser implementeringen av /ping
og /invocations
. Referere til inference.py under prediktor mappe for full implementering av denne filen.
Her er et utdrag av Dockerfilen for å være vert for prediktormodellen. For fullstendig gjennomføring se Dockerfile under prediktormappen.
Vi fortsetter deretter å bygge, teste og skyve dette tilpassede prediktorbildet til et privat depot i Amazon ECR. Referere til prediktor.ipynb notatbok for full implementering av å bygge, teste og skyve det tilpassede bildet til Amazon ECR.
Distribuer seriell inferensrørledning
Etter at vi har testet både funksjons- og prediktorbildene og har overført dem til Amazon ECR, laster vi nå opp modellartefakterene våre til en Amazon S3-bøtte.
Deretter lager vi to modellobjekter: ett for featurizer
(dvs, preprocess.joblib
) og andre for predictor
(dvs, xgboost-model
) ved å spesifisere den tilpassede bilde-urien vi bygde tidligere.
Her er et utdrag som viser det. Referere til serial-inference-pipeline.ipynb for full gjennomføring.
Nå, for å distribuere disse beholderne på en seriell måte, lager vi først en Rørledningsmodell objekt og passere featurizer
modell og predictor
modell til et python-listeobjekt i samme rekkefølge.
Så kaller vi .deploy()
metoden på Rørledningsmodell spesifisere forekomsttype og forekomstantall.
På dette stadiet distribuerer Amazon SageMaker den serielle inferensrørledningen til et sanntidsendepunkt. Vi venter på at endepunktet skal være InService
.
Vi kan nå teste endepunktet ved å sende noen slutningsforespørsler til dette direkte endepunktet.
Referere til serial-inference-pipeline.ipynb for full gjennomføring.
Rydd opp
Etter at du er ferdig med å teste, følg instruksjonene i oppryddingsdelen av notatboken for å slette ressursene som er tilordnet i dette innlegget for å unngå unødvendige kostnader. Referere til Amazon SageMaker-priser for detaljer om kostnadene ved slutningsforekomstene.
konklusjonen
I dette innlegget viste jeg hvordan vi kan bygge og distribuere en seriell ML-inferensapplikasjon ved å bruke tilpassede slutningsbeholdere til sanntidsendepunkter på Amazon SageMaker.
Denne løsningen viser hvordan kunder kan ta med sine egne tilpassede beholdere for hosting på Amazon SageMaker på en kostnadseffektiv måte. Med BYOC-alternativet kan kunder raskt bygge og tilpasse ML-applikasjonene sine for å bli distribuert på Amazon SageMaker.
Vi oppfordrer deg til å prøve denne løsningen med et datasett som er relevant for din virksomhet Key Performance Indicators (KPIer). Du kan vise til hele løsningen i denne GitHub repository.
Referanser
om forfatteren
Praveen Chamarthi er en senior AI/ML-spesialist med Amazon Web Services. Han er lidenskapelig opptatt av AI/ML og alt som har med AWS å gjøre. Han hjelper kunder over hele Amerika med å skalere, innovere og drive ML-arbeidsmengder effektivt på AWS. På fritiden elsker Praveen å lese og liker sci-fi-filmer.
- SEO-drevet innhold og PR-distribusjon. Bli forsterket i dag.
- PlatoData.Network Vertical Generative Ai. Styrk deg selv. Tilgang her.
- PlatoAiStream. Web3 Intelligence. Kunnskap forsterket. Tilgang her.
- PlatoESG. Karbon, CleanTech, Energi, Miljø, Solenergi, Avfallshåndtering. Tilgang her.
- PlatoHelse. Bioteknologisk og klinisk etterretning. Tilgang her.
- kilde: https://aws.amazon.com/blogs/machine-learning/build-and-deploy-ml-inference-applications-from-scratch-using-amazon-sagemaker/
- : har
- :er
- :ikke
- :hvor
- $OPP
- 08
- 09
- 1
- 10
- 100
- 11
- 13
- 14
- 150
- 16
- 17
- 20
- 200
- 2023
- 25
- 28
- 30
- 500
- 7
- 8
- 87
- 9
- a
- Om oss
- Aksepterer
- godtar
- adgang
- tilsvar
- Logg inn
- tvers
- tilpasse
- I tillegg
- Adopsjon
- påvirker
- Etter
- AI / ML
- algoritmer
- Alle
- langs
- også
- Amazon
- Amazon SageMaker
- Amazon Web Services
- Americas
- an
- og
- noen
- api
- app
- Søknad
- søknader
- gjelder
- april
- ER
- Array
- AS
- antar
- At
- tilgjengelig
- unngå
- AWS
- bakgrunn
- basen
- basert
- BE
- bli
- før du
- være
- under
- kroppen
- booster
- både
- bringe
- Bringe
- bygge
- Bygning
- bygget
- innebygd
- XNUMX bunk
- virksomhet
- men
- by
- ring
- som heter
- CAN
- saken
- saker
- CAT
- viss
- endring
- endret
- Endringer
- avgifter
- sjekk
- Sjekker
- klart
- Cloud
- kode
- Koding
- Kolonne
- kolonner
- COM
- Felles
- komplekse
- datamaskin
- Konfigurasjon
- tilkoblet
- tilkobling
- betraktninger
- konstant
- konstruere
- forbruk
- Container
- Containere
- innhold
- innhold
- fortsette
- kontroll
- konvertere
- Kostnad
- kunne
- skape
- Opprette
- skaperverket
- Credentials
- skikk
- kunde
- Kunder
- dato
- Dato
- definere
- definert
- demonstrere
- demonstrerer
- avhengig
- utplassere
- utplassert
- utplasserings
- distribusjon
- Distribueres
- desktop
- detaljer
- bestemmes
- utviklet
- Utvikling
- DIKT
- gJORDE
- forskjellig
- Docker
- domener
- gjort
- ikke
- to
- under
- e
- Tidligere
- lett
- effektivt
- ellers
- oppmuntre
- ende til ende
- Endpoint
- sikre
- Hele
- entry
- Miljø
- miljøer
- feil
- etc
- eksempel
- Unntatt
- unntak
- henrettet
- kjent
- Mote
- Favoritt
- Egenskaper
- Noen få
- filet
- Filer
- Først
- passer
- fitting
- fleksibilitet
- følge
- etter
- Til
- skjema
- format
- funnet
- Rammeverk
- rammer
- fra
- fullt
- funksjon
- funksjonelle
- inntjening
- gateway
- få
- GitHub
- GMT
- Går
- håndtere
- Håndterer
- Håndtering
- Ha
- he
- Helse
- høyde
- hjelpe
- hjelper
- hans
- vert
- Hosting
- Vertskapet
- Hvordan
- Hvordan
- Men
- HTML
- http
- HTTPS
- i
- if
- bilde
- bilder
- iverksette
- gjennomføring
- importere
- in
- inkluderer
- Inkludert
- stadig
- indikatorer
- individuelt
- bransjer
- informasjon
- inhouse
- innovere
- inngang
- innsiden
- installere
- installerte
- f.eks
- instruksjoner
- integrert
- Interface
- inn
- involvert
- isolasjon
- IT
- Jobb
- Jobb
- jpg
- JSON
- Hold
- nøkkel
- Etiketten
- siste
- lansere
- lansert
- lanseringer
- lansere
- læring
- venstre
- Lengde
- bibliotekene
- linje
- Liste
- oppført
- leve
- laste
- lasting
- laster
- lokal
- lokalt
- logikk
- Logg inn
- elsker
- maskin
- maskinlæring
- Mainstream
- GJØR AT
- Making
- administrer
- måte
- kart
- merke
- Match
- Kan..
- metode
- kunne
- minimal
- mangler
- ML
- Mote
- modell
- modeller
- modifisere
- mer
- Filmer
- mye
- flere
- må
- navn
- navn
- Trenger
- behov
- Nei.
- none
- bærbare
- nå
- Antall
- følelsesløs
- objekt
- gjenstander
- of
- tilbud
- Tilbud
- ofte
- on
- gang
- ONE
- seg
- bare
- videre til
- åpen
- betjene
- operasjonell
- Alternativ
- or
- rekkefølge
- OS
- Annen
- vår
- produksjon
- egen
- pakker
- pandaer
- parametere
- Spesielt
- passere
- lidenskapelig
- banen
- perfekt
- Utfør
- ytelse
- utfører
- rørledning
- fly
- plato
- Platon Data Intelligence
- PlatonData
- vær så snill
- Point
- Post
- prediksjon
- Spådommer
- Predictor
- presentere
- tidligere
- privat
- problemer
- prosess
- Prosesser
- prosessering
- prosessor
- fremmer
- proprietær
- formål
- Skyv
- presset
- Skyver
- Python
- raskt
- heve
- område
- Raw
- Lese
- klar
- sanntids
- mottatt
- referere
- registret
- relevant
- forbli
- erstatte
- Repository
- anmode
- forespørsler
- krever
- påkrevd
- Krav
- Krever
- ressurs
- Ressurser
- svar
- resultere
- Resultater
- retur
- retur
- avkastning
- Ringe
- Rute
- ruter
- RAD
- Kjør
- rennende
- går
- sagemaker
- samme
- Spar
- lagret
- Skala
- sci-fi
- skraper
- script
- skript
- Sekund
- Seksjon
- se
- send
- sending
- senior
- sendt
- separat
- serie~~POS=TRUNC
- Serien
- betjene
- server
- tjeneste
- Tjenester
- servering
- Session
- sett
- sett
- flere
- Kjønn
- bør
- Vis
- viste
- vist
- Viser
- lignende
- Enkelt
- tekstutdrag
- So
- løsning
- LØSE
- noen
- noe
- Spark
- spesialist
- spesifikk
- stable
- Scene
- Standard
- ståsted
- status
- Trinn
- Steps
- lagring
- streames
- bekker
- String
- strukturert
- vellykket
- slik
- Sol
- Støttes
- Støtte
- Støtter
- TAG
- skreddersydd
- tar
- oppgaver
- terminal
- test
- testet
- Testing
- tester
- Det
- De
- deres
- Dem
- deretter
- Der.
- derfor
- Disse
- ting
- denne
- tid
- til
- verktøy
- Tog
- trent
- Kurs
- Transform
- forvandlet
- transformator
- transformers
- transformere
- prøve
- prøver
- to
- typen
- Ubuntu
- etter
- underliggende
- unødvendig
- oppgradering
- bruk
- bruke
- bruk sak
- brukt
- Brukere
- bruker
- ved hjelp av
- Verdier
- ulike
- Varierende
- verifisere
- versjon
- vente
- ønsker
- var
- we
- web
- webserveren
- webtjenester
- VI VIL
- hvilken
- mens
- hvorfor
- bredere
- vil
- med
- innenfor
- uten
- arbeidsflyt
- arbeid
- skrevet
- X
- Xgboost
- Du
- Din
- zephyrnet