Efterhånden som maskinlæring (ML) bliver mainstream og vinder bredere udbredelse, bliver ML-drevne inferensapplikationer mere og mere almindelige til at løse en række komplekse forretningsproblemer. Løsningen på disse komplekse forretningsproblemer kræver ofte brug af flere ML-modeller og -trin. Dette indlæg viser dig, hvordan du bygger og hoster en ML-applikation med brugerdefinerede containere på Amazon SageMaker.
Amazon SageMaker tilbyder indbyggede algoritmer , forudbygget SageMaker docker-billeder til modelimplementering. Men hvis disse ikke passer til dine behov, kan du medbringe dine egne containere (BYOC) til hosting på Amazon SageMaker.
Der er flere tilfælde, hvor brugere muligvis skal BYOC til hosting på Amazon SageMaker.
- Brugerdefinerede ML-frameworks eller biblioteker: Hvis du planlægger at bruge en ML-framework eller biblioteker, der ikke understøttes af Amazon SageMaker indbyggede algoritmer eller præ-byggede containere, så skal du oprette en brugerdefineret container.
- Specialiserede modeller: For visse domæner eller industrier kan du kræve specifikke modelarkitekturer eller skræddersyede forbehandlingstrin, der ikke er tilgængelige i indbyggede Amazon SageMaker-tilbud.
- Proprietære algoritmer: Hvis du har udviklet dine egne proprietære algoritmer internt, skal du bruge en tilpasset container til at implementere dem på Amazon SageMaker.
- Komplekse inferenspipelines: Hvis din ML-inferensworkflow involverer tilpasset forretningslogik - en række komplekse trin, der skal udføres i en bestemt rækkefølge - så kan BYOC hjælpe dig med at administrere og orkestrere disse trin mere effektivt.
Løsningsoversigt
I denne løsning viser vi, hvordan man hoster en ML seriel inferensapplikation på Amazon SageMaker med realtidsslutpunkter ved hjælp af to brugerdefinerede inferensbeholdere med nyeste scikit-learn
, xgboost
pakker.
Den første beholder bruger en scikit-learn
model til at transformere rådata til fremhævede kolonner. Det gælder StandardScaler for numeriske kolonner og OneHotEncoder til kategoriske.
Den anden container er vært for en fortrænet XGboost
model (dvs. prædiktor). Prædiktormodellen accepterer det fremhævede input og udsender forudsigelser.
Til sidst implementerer vi featureizer , forudsigelse i en seriel-inferens-pipeline til et Amazon SageMaker-endepunkt i realtid.
Her er nogle forskellige overvejelser om, hvorfor du måske ønsker at have separate beholdere i din inferensapplikation.
- afkobling – Forskellige trin i rørledningen har et klart defineret formål og skal køres på separate containere på grund af de underliggende afhængigheder. Dette hjælper også med at holde rørledningen velstruktureret.
- rammer – Forskellige trin i pipelinen bruger specifikke rammer, der passer til formålet (såsom scikit eller Spark ML) og skal derfor køres på separate beholdere.
- Ressourceisolering – Forskellige trin i rørledningen har varierende krav til ressourceforbrug og skal derfor køres på separate beholdere for mere fleksibilitet og kontrol.
- Vedligeholdelse og opgraderinger – Fra et operationelt synspunkt fremmer dette funktionel isolation, og du kan fortsætte med at opgradere eller ændre individuelle trin meget lettere uden at påvirke andre modeller.
Derudover hjælper lokal opbygning af de individuelle containere i den iterative udviklings- og testproces med foretrukne værktøjer og Integrated Development Environments (IDE'er). Når containerne er klar, kan du bruge dem til at implementere dem til AWS-skyen til slutning ved hjælp af Amazon SageMaker-slutpunkter.
Fuld implementering, inklusive kodestykker, er tilgængelig i dette Github-lager link..
Forudsætninger
Da vi først tester disse brugerdefinerede containere lokalt, skal vi have docker desktop installeret på din lokale computer. Du bør være fortrolig med at bygge docker-containere.
Du skal også bruge en AWS-konto med adgang til Amazon SageMaker, Amazon ECR og Amazon S3 for at teste denne applikation ende-til-ende.
Sørg for, at du har den nyeste version af Boto3
og Amazon SageMaker Python-pakkerne installeret:
Løsningsgennemgang
Byg skræddersyet featurizer-beholder
For at bygge den første container, featurizer-containeren, træner vi en scikit-learn
model til at behandle rå funktioner i søøre datasæt. Forbehandlingsscriptet bruger SimpleImputer til håndtering af manglende værdier, StandardScaler til normalisering af numeriske kolonner, og OneHotEncoder til transformation af kategoriske kolonner. Efter montering af transformeren gemmer vi modellen ind joblib format. Vi komprimerer og uploader derefter denne gemte modelartefakt til en Amazon Simple Storage Service (Amazon S3) spand.
Her er et eksempel på et kodestykke, der demonstrerer dette. Henvise til featurizer.ipynb for fuld implementering:
Dernæst, for at skabe en brugerdefineret slutningsbeholder til featurizer-modellen, bygger vi et Docker-billede med nginx, gunicorn, flask-pakker sammen med andre nødvendige afhængigheder til featurizer-modellen.
Nginx, gunicorn og Flask-appen vil fungere som modelserveringsstakken på Amazon SageMaker-endepunkter i realtid.
Når vi bringer brugerdefinerede containere til hosting på Amazon SageMaker, skal vi sikre, at inferensscriptet udfører følgende opgaver efter at være blevet lanceret inde i containeren:
- Modelbelastning: Inferens script (
preprocessing.py
) skal henvise til/opt/ml/model
mappe for at indlæse modellen i containeren. Modelartefakter i Amazon S3 vil blive downloadet og monteret på containeren ved stien/opt/ml/model
. - Miljøvariabler: For at sende brugerdefinerede miljøvariabler til containeren skal du angive dem under Model oprettelsestrin eller under Endpoint oprettelse fra et uddannelsesjob.
- API-krav: Inference-scriptet skal implementere begge dele
/ping
,/invocations
ruter som en Flask-applikation. Det/ping
API bruges til sundhedstjek, mens/invocations
API håndterer slutningsanmodninger. - Logning: Outputlogfiler i inferensscriptet skal skrives til standardoutput (stdout) og standardfejl (stderr) strømme. Disse logfiler streames derefter til amazoncloudwatch af Amazon SageMaker.
Her er et uddrag fra preprocessing.py
der viser implementeringen af /ping
, /invocations
.
Der henvises til preprocessing.py under featurizer-mappen for fuld implementering.
Byg Docker-billede med featurizer og modelserveringstak
Lad os nu bygge en Dockerfile ved hjælp af et brugerdefineret basisbillede og installere nødvendige afhængigheder.
Til dette bruger vi python:3.9-slim-buster
som basisbillede. Du kan ændre dette et hvilket som helst andet basisbillede, der er relevant for din brugssituation.
Vi kopierer derefter nginx-konfigurationen, gunicorns webserver-gateway-fil og inferens-scriptet til containeren. Vi opretter også et python-script kaldet serve, der starter nginx- og gunicorn-processer i baggrunden og indstiller inferens-scriptet (dvs. preprocessing.py Flask-applikationen) som indgangspunktet for containeren.
Her er et uddrag af Dockerfilen til hosting af featurizer-modellen. For fuld implementering se Dockerfil under featureizer mappe.
Test brugerdefineret slutningsbillede med featurizer lokalt
Byg og test nu den tilpassede inferensbeholder med featurizer lokalt ved hjælp af Amazon SageMaker lokal tilstand. Lokal tilstand er perfekt til at teste dine behandlings-, trænings- og inferensscripts uden at starte nogen job på Amazon SageMaker. Efter at have bekræftet resultaterne af dine lokale tests, kan du nemt tilpasse trænings- og slutningsscripts til implementering på Amazon SageMaker med minimale ændringer.
For at teste det brugerdefinerede featurizer-billede lokalt, skal du først bygge billedet ved at bruge det tidligere definerede Dockerfil. Start derefter en beholder ved at montere mappen, der indeholder featurizer-modellen (preprocess.joblib
) til /opt/ml/model
mappe inde i containeren. Tilknyt desuden port 8080 fra container til værten.
Når den er lanceret, kan du sende inferensanmodninger til http://localhost:8080/invocations.
For at bygge og starte containeren skal du åbne en terminal og køre følgende kommandoer.
Bemærk, at du bør udskifte <IMAGE_NAME>
, som vist i følgende kode, med billednavnet på din container.
Den følgende kommando forudsætter også, at den trænede scikit-learn
model (preprocess.joblib
) er til stede under en mappe kaldet models
.
Efter containeren er oppe at køre, kan vi teste både /ping , /påkaldelser ruter ved hjælp af curl-kommandoer.
Kør nedenstående kommandoer fra en terminal
Når rå (utransformeret) data sendes til http://localhost:8080/invocations, svarer endepunktet med transformerede data.
Du bør se svaret noget, der ligner følgende:
Vi afslutter nu den kørende container, og tag og skubber derefter det lokale brugerdefinerede billede til et privat Amazon Elastic Container Registry (Amazon ECR) depot.
Se følgende kommandoer for at logge ind på Amazon ECR, som mærker det lokale billede med fuld Amazon ECR-billedsti og derefter skubbe billedet til Amazon ECR. Sørg for at udskifte region
, account
variabler, der matcher dit miljø.
Der henvises til oprette et depot , skub et billede til Amazon ECR AWS kommandolinjegrænseflade (AWS CLI) kommandoer for mere information.
Valgfrit trin
Du kan eventuelt udføre en live-test ved at implementere featurizer-modellen til et slutpunkt i realtid med det brugerdefinerede docker-billede i Amazon ECR. Henvise til featurizer.ipynb notebook til fuld implementering af opbygning, test og push af det brugerdefinerede billede til Amazon ECR.
Amazon SageMaker initialiserer inferensslutpunktet og kopierer modelartefakter til /opt/ml/model
mappe inde i containeren. Se Hvordan SageMaker indlæser dine modelartefakter.
Byg tilpasset XGBoost-prædiktorbeholder
For at bygge XGBoost-inferensbeholderen følger vi lignende trin, som vi gjorde, mens vi byggede billedet til featurizer-beholder:
- Download præ-trænet
XGBoost
model fra Amazon S3. - Opret
inference.py
script, der indlæser det fortrænedeXGBoost
model, konverterer de transformerede inputdata modtaget fra featurizer og konverterer tilXGBoost.DMatrix
format, kørerpredict
på boosteren og returnerer forudsigelser i json-format. - Scripts og konfigurationsfiler, der danner modelserveringsstakken (dvs.
nginx.conf
,wsgi.py
ogserve
forbliver den samme og behøver ingen ændringer. - Vi anvender
Ubuntu:18.04
som basisbillede for Dockerfilen. Dette er ikke en forudsætning. Vi bruger ubuntu-basebilledet til at demonstrere, at containere kan bygges med et hvilket som helst basisbillede. - Trinnene til at opbygge kundens docker-billede, teste billedet lokalt og skubbe det testede billede til Amazon ECR forbliver de samme som før.
For kortheds skyld, da trinene ligner tidligere vist; vi viser dog kun den ændrede kodning i det følgende.
Første, inference.py
manuskript. Her er et uddrag, der viser implementeringen af /ping
, /invocations
. Henvise til inference.py under forudsigelse mappe for fuld implementering af denne fil.
Her er et uddrag af Dockerfilen til hosting af prædiktormodellen. For fuld implementering se Dockerfil under forudsigelsesmappen.
Vi fortsætter derefter med at bygge, teste og skubbe dette tilpassede forudsigelsesbillede til et privat lager i Amazon ECR. Henvise til prædiktor.ipynb notebook til fuld implementering af opbygning, test og push af det brugerdefinerede billede til Amazon ECR.
Implementer seriel inferenspipeline
Efter at vi har testet både featurizer- og prædiktorbillederne og har skubbet dem til Amazon ECR, uploader vi nu vores modelartefakter til en Amazon S3-spand.
Derefter opretter vi to modelobjekter: et til featurizer
(Dvs. preprocess.joblib
) og andet for predictor
(Dvs. xgboost-model
) ved at angive den brugerdefinerede billed-uri, vi byggede tidligere.
Her er et uddrag, der viser det. Henvise til seriel-inferens-pipeline.ipynb til fuld implementering.
For nu at implementere disse containere på en seriel måde, skaber vi først en Rørledningsmodel objekt og bestå featurizer
model og predictor
model til et python-listeobjekt i samme rækkefølge.
Så ringer vi til .deploy()
metode til Rørledningsmodel angivelse af instanstype og instansantal.
På dette stadium implementerer Amazon SageMaker den serielle inferenspipeline til et realtidsslutpunkt. Vi venter på, at slutpunktet er InService
.
Vi kan nu teste slutpunktet ved at sende nogle slutningsanmodninger til dette live-slutpunkt.
Der henvises til seriel-inferens-pipeline.ipynb til fuld implementering.
Ryd op
Når du er færdig med at teste, skal du følge instruktionerne i oprydningssektionen på notesbogen for at slette de ressourcer, der er tilvejebragt i dette indlæg for at undgå unødvendige gebyrer. Henvise til Amazon SageMaker-priser for detaljer om omkostningerne ved slutningstilfældene.
Konklusion
I dette indlæg viste jeg, hvordan vi kan bygge og implementere en seriel ML-inferensapplikation ved hjælp af brugerdefinerede inferensbeholdere til realtidsslutpunkter på Amazon SageMaker.
Denne løsning demonstrerer, hvordan kunder kan bringe deres egne tilpassede containere til hosting på Amazon SageMaker på en omkostningseffektiv måde. Med BYOC-muligheden kan kunder hurtigt bygge og tilpasse deres ML-applikationer til at blive implementeret på Amazon SageMaker.
Vi opfordrer dig til at prøve denne løsning med et datasæt, der er relevant for din virksomheds Key Performance Indicators (KPI'er). Du kan henvise til hele løsningen i denne GitHub repository.
Referencer
Om forfatteren
Praveen Chamarthi er en senior AI/ML-specialist med Amazon Web Services. Han brænder for AI/ML og alt, hvad der har med AWS at gøre. Han hjælper kunder i hele Nord- og Sydamerika med at skalere, innovere og drive ML-arbejdsbelastninger effektivt på AWS. I sin fritid elsker Praveen at læse og nyder sci-fi-film.
- 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. Kulstof, CleanTech, Energi, Miljø, Solenergi, Affaldshåndtering. Adgang her.
- PlatoHealth. Bioteknologiske og kliniske forsøgs intelligens. Adgang her.
- Kilde: https://aws.amazon.com/blogs/machine-learning/build-and-deploy-ml-inference-applications-from-scratch-using-amazon-sagemaker/
- :har
- :er
- :ikke
- :hvor
- $OP
- 08
- 09
- 1
- 10
- 100
- 11
- 13
- 14
- 150
- 16
- 17
- 20
- 200
- 2023
- 25
- 28
- 30
- 500
- 7
- 8
- 87
- 9
- a
- Om
- Acceptere
- accepterer
- adgang
- derfor
- Konto
- tværs
- tilpasse
- Derudover
- Vedtagelse
- påvirker
- Efter
- AI / ML
- algoritmer
- Alle
- sammen
- også
- Amazon
- Amazon SageMaker
- Amazon Web Services
- Amerika
- an
- ,
- enhver
- api
- app
- Anvendelse
- applikationer
- gælder
- april
- ER
- Array
- AS
- antager
- At
- til rådighed
- undgå
- AWS
- baggrund
- bund
- baseret
- BE
- blive
- før
- være
- jf. nedenstående
- krop
- booster
- både
- bringe
- Bringe
- bygge
- Bygning
- bygget
- indbygget
- Bundle
- virksomhed
- men
- by
- ringe
- kaldet
- CAN
- tilfælde
- tilfælde
- KAT
- vis
- lave om
- ændret
- Ændringer
- afgifter
- kontrollere
- Kontrol
- tydeligt
- Cloud
- kode
- Kodning
- Kolonne
- Kolonner
- KOM
- Fælles
- komplekse
- computer
- Konfiguration
- tilsluttet
- tilslutning
- overvejelser
- konstant
- konstruere
- forbrug
- Container
- Beholdere
- indhold
- indhold
- fortsæt
- kontrol
- konvertere
- Koste
- kunne
- skabe
- Oprettelse af
- skabelse
- Legitimationsoplysninger
- skik
- kunde
- Kunder
- data
- Dato
- definere
- definerede
- demonstrere
- demonstrerer
- afhængigheder
- indsætte
- indsat
- implementering
- implementering
- udruller
- desktop
- detaljer
- bestemmes
- udviklet
- Udvikling
- DICT
- DID
- forskellige
- Docker
- Domæner
- færdig
- Dont
- grund
- i løbet af
- e
- tidligere
- nemt
- effektivt
- andet
- tilskynde
- ende til ende
- Endpoint
- sikre
- Hele
- indrejse
- Miljø
- miljøer
- fejl
- etc.
- eksempel
- Undtagen
- undtagelse
- henrettet
- bekendt
- Mode
- Favorit
- Funktionalitet
- få
- File (Felt)
- Filer
- Fornavn
- passer
- montering
- Fleksibilitet
- følger
- efter
- Til
- formular
- format
- fundet
- Framework
- rammer
- fra
- fuld
- funktion
- funktionel
- gevinster
- gateway
- få
- GitHub
- GMT
- Goes
- håndtere
- Håndterer
- Håndtering
- Have
- he
- Helse
- højde
- hjælpe
- hjælper
- hans
- host
- Hosting
- værter
- Hvordan
- How To
- Men
- HTML
- http
- HTTPS
- i
- if
- billede
- billeder
- gennemføre
- implementering
- importere
- in
- omfatter
- Herunder
- stigende
- Indikatorer
- individuel
- industrier
- oplysninger
- inhouse
- innovere
- indgang
- indvendig
- installere
- installeret
- instans
- anvisninger
- integreret
- grænseflade
- ind
- involverede
- isolation
- IT
- Job
- Karriere
- jpg
- json
- Holde
- Nøgle
- etiket
- seneste
- lancere
- lanceret
- lanceringer
- lancering
- læring
- til venstre
- Længde
- biblioteker
- Line (linje)
- Liste
- Børsnoterede
- leve
- belastning
- lastning
- belastninger
- lokale
- lokalt
- logik
- Logge på
- elsker
- maskine
- machine learning
- Mainstream
- maerker
- Making
- administrere
- måde
- kort
- markere
- Match
- Kan..
- metode
- måske
- mindste
- mangler
- ML
- tilstand
- model
- modeller
- ændre
- mere
- Film
- meget
- flere
- skal
- navn
- navne
- Behov
- behov
- ingen
- Ingen
- notesbog
- nu
- nummer
- bedøvet
- objekt
- objekter
- of
- tilbud
- Tilbud
- tit
- on
- engang
- ONE
- dem
- kun
- på
- åbent
- betjene
- operationelle
- Option
- or
- ordrer
- OS
- Andet
- vores
- output
- egen
- pakker
- pandaer
- parametre
- særlig
- passerer
- lidenskabelige
- sti
- perfekt
- Udfør
- ydeevne
- udfører
- pipeline
- fly
- plato
- Platon Data Intelligence
- PlatoData
- Vær venlig
- Punkt
- Indlæg
- forudsigelse
- Forudsigelser
- Predictor
- præsentere
- tidligere
- private
- problemer
- behandle
- Processer
- forarbejdning
- Processor
- fremmer
- proprietære
- formål
- Skub ud
- skubbet
- Pushing
- Python
- hurtigt
- rejse
- rækkevidde
- Raw
- Læs
- klar
- realtid
- modtaget
- henvise
- register
- relevant
- forblive
- erstatte
- Repository
- anmode
- anmodninger
- kræver
- påkrævet
- Krav
- Kræver
- ressource
- Ressourcer
- svar
- resultere
- Resultater
- afkast
- vender tilbage
- afkast
- ring
- R
- veje
- RÆKKE
- Kør
- kører
- løber
- sagemaker
- samme
- Gem
- gemt
- Scale
- sci-fi
- ridse
- script
- scripts
- Anden
- Sektion
- se
- send
- afsendelse
- senior
- sendt
- adskille
- seriel
- Series
- tjener
- server
- tjeneste
- Tjenester
- servering
- Session
- sæt
- sæt
- flere
- Køn
- bør
- Vis
- viste
- vist
- Shows
- lignende
- Simpelt
- uddrag
- So
- løsninger
- SOLVE
- nogle
- noget
- Spark
- specialist
- specifikke
- stable
- Stage
- standard
- standpunkt
- Status
- Trin
- Steps
- opbevaring
- streamet
- vandløb
- String
- struktureret
- Succesfuld
- sådan
- Sol
- Understøttet
- Støtte
- Understøtter
- TAG
- skræddersyet
- tager
- opgaver
- terminal
- prøve
- afprøvet
- Test
- tests
- at
- deres
- Them
- derefter
- Der.
- derfor
- Disse
- ting
- denne
- tid
- til
- værktøjer
- Tog
- uddannet
- Kurser
- Transform
- omdannet
- transformer
- transformers
- omdanne
- prøv
- forsøger
- to
- typen
- Ubuntu
- under
- underliggende
- unødvendig
- opgradering
- brugbar
- brug
- brug tilfælde
- anvendte
- brugere
- bruger
- ved brug af
- Værdier
- forskellige
- Varierende
- verificere
- udgave
- vente
- ønsker
- var
- we
- web
- Webserver
- webservices
- GODT
- som
- mens
- hvorfor
- bredere
- vilje
- med
- inden for
- uden
- workflow
- arbejder
- skriftlig
- X
- XGBoost
- Du
- Din
- zephyrnet