Man mano che il machine learning (ML) diventa mainstream e ottiene un'adozione più ampia, le applicazioni di inferenza basate su ML stanno diventando sempre più comuni per risolvere una serie di problemi aziendali complessi. La soluzione a questi complessi problemi aziendali spesso richiede l’utilizzo di più modelli e passaggi di ML. Questo post mostra come creare e ospitare un'applicazione ML con contenitori personalizzati attivi Amazon Sage Maker.
Offerte di Amazon SageMaker algoritmi incorporati ed SageMaker precostruito immagini docker per la distribuzione del modello. Ma se questi non soddisfano le tue esigenze, puoi portare i tuoi contenitori (BYOC) per l'hosting su Amazon SageMaker.
Esistono diversi casi d'uso in cui gli utenti potrebbero aver bisogno di BYOC per l'hosting su Amazon SageMaker.
- Framework o librerie ML personalizzati: se prevedi di utilizzare un framework ML o librerie che non sono supportati dagli algoritmi integrati o dai contenitori predefiniti di Amazon SageMaker, dovrai creare un contenitore personalizzato.
- Modelli specializzati: per determinati domini o settori, potresti richiedere architetture di modelli specifici o passaggi di preelaborazione personalizzati che non sono disponibili nelle offerte Amazon SageMaker integrate.
- Algoritmi proprietari: se hai sviluppato internamente i tuoi algoritmi proprietari, avrai bisogno di un contenitore personalizzato per distribuirli su Amazon SageMaker.
- Pipeline di inferenza complesse: se il flusso di lavoro di inferenza ML prevede una logica aziendale personalizzata, ovvero una serie di passaggi complessi che devono essere eseguiti in un ordine particolare, BYOC può aiutarti a gestire e orchestrare questi passaggi in modo più efficiente.
Panoramica della soluzione
In questa soluzione mostriamo come ospitare un'applicazione di inferenza seriale ML su Amazon SageMaker con endpoint in tempo reale utilizzando due contenitori di inferenza personalizzati con le versioni più recenti scikit-learn
ed xgboost
Pacchetti.
Il primo contenitore utilizza a scikit-learn
modello per trasformare i dati grezzi in colonne con funzionalità. Si applica StandardScaler per colonne numeriche e OneHotEncoder a quelli categorici.
Il secondo contenitore ospita un file preaddestrato XGboost
modello (cioè predittore). Il modello predittivo accetta le previsioni di input e output caratterizzate.
Infine, distribuiamo il file caratterizzato ed predittore in una pipeline di inferenza seriale a un endpoint in tempo reale Amazon SageMaker.
Di seguito sono riportate alcune considerazioni diverse sul motivo per cui potresti voler avere contenitori separati all'interno della tua applicazione di inferenza.
- Il disaccoppiamento – Vari passaggi della pipeline hanno uno scopo chiaramente definito e devono essere eseguiti su contenitori separati a causa delle dipendenze sottostanti coinvolte. Questo aiuta anche a mantenere la pipeline ben strutturata.
- quadri – Vari passaggi della pipeline utilizzano framework specifici adatti allo scopo (come scikit o Spark ML) e pertanto devono essere eseguiti su contenitori separati.
- Isolamento delle risorse – Vari passaggi della pipeline hanno requisiti di consumo delle risorse variabili e pertanto devono essere eseguiti su contenitori separati per maggiore flessibilità e controllo.
- Manutenzione e aggiornamenti – Dal punto di vista operativo, questo favorisce l’isolamento funzionale ed è possibile continuare ad aggiornare o modificare i singoli passaggi molto più facilmente, senza influenzare altri modelli.
Inoltre, la creazione locale dei singoli contenitori aiuta nel processo iterativo di sviluppo e test con gli strumenti preferiti e gli ambienti di sviluppo integrato (IDE). Una volta che i contenitori sono pronti, puoi distribuirli nel cloud AWS per l'inferenza utilizzando gli endpoint Amazon SageMaker.
L'implementazione completa, inclusi i frammenti di codice, è disponibile in questo repository Github qui.
Prerequisiti
Poiché testiamo prima questi contenitori personalizzati localmente, avremo bisogno del desktop docker installato sul tuo computer locale. Dovresti avere familiarità con la creazione di contenitori docker.
Avrai inoltre bisogno di un account AWS con accesso ad Amazon SageMaker, Amazon ECR e Amazon S3 per testare questa applicazione end-to-end.
Assicurati di avere l'ultima versione di Boto3
e i pacchetti Amazon SageMaker Python installati:
Procedura dettagliata della soluzione
Crea un contenitore di funzionalità personalizzato
Per costruire il primo contenitore, il contenitore dei featureizer, addestriamo a scikit-learn
modello per elaborare le funzionalità grezze nel file orecchia di mare set di dati. Lo script di preelaborazione utilizza SimpleImuter per gestire i valori mancanti, StandardScaler per normalizzare le colonne numeriche e OneHotEncoder per trasformare le colonne categoriali. Dopo aver montato il trasformatore, salviamo il modello joblib formato. Quindi comprimiamo e carichiamo questo artefatto del modello salvato su un Amazon Simple Storage Service (Amazon S3) secchio.
Ecco uno snippet di codice di esempio che lo dimostra. Fare riferimento a featurizer.ipynb per la piena attuazione:
Successivamente, per creare un contenitore di inferenza personalizzato per il modello featurizer, creiamo un'immagine Docker con nginx, gunicorn, pacchetti flask e altre dipendenze richieste per il modello featurizer.
Nginx, gunicorn e l'app Flask fungeranno da stack di servizio modello sugli endpoint in tempo reale di Amazon SageMaker.
Quando portiamo contenitori personalizzati per l'hosting su Amazon SageMaker, dobbiamo garantire che lo script di inferenza esegua le seguenti attività dopo essere stato avviato all'interno del contenitore:
- Caricamento del modello: Script di inferenza (
preprocessing.py
) dovrebbe fare riferimento/opt/ml/model
directory per caricare il modello nel contenitore. Gli artefatti del modello in Amazon S3 verranno scaricati e montati sul contenitore nel percorso/opt/ml/model
. - Variabili ambientali: Per passare variabili di ambiente personalizzate al contenitore, è necessario specificarle durante il file Modello fase di creazione o durante endpoint creazione da un lavoro di formazione.
- Requisiti dell'API: Lo script di inferenza deve implementare entrambi
/ping
ed/invocations
percorsi come applicazione Flask. IL/ping
L'API viene utilizzata per i controlli di integrità, mentre il file/invocations
L'API gestisce le richieste di inferenza. - Registrazione: I log di output nello script di inferenza devono essere scritti nell'output standard (stdout) e l'errore standard (stderr) flussi. Questi registri vengono quindi trasmessi in streaming Amazon Cloud Watch di Amazon SageMaker.
Ecco uno snippet di preprocessing.py
che mostrano l'implementazione di /ping
ed /invocations
.
Fare riferimento a preelaborazione.py nella cartella featureizer per l'implementazione completa.
Crea un'immagine Docker con funzionalità e stack di modelli
Creiamo ora un Dockerfile utilizzando un'immagine di base personalizzata e installiamo le dipendenze richieste.
Per questo usiamo python:3.9-slim-buster
come immagine di base. Puoi modificarla con qualsiasi altra immagine di base pertinente al tuo caso d'uso.
Quindi copiamo la configurazione nginx, il file del gateway del server web di gunicorn e lo script di inferenza nel contenitore. Creiamo anche uno script Python chiamato serve che avvia i processi nginx e gunicorn in background e imposta lo script di inferenza (ovvero l'applicazione preprocessing.py Flask) come punto di ingresso per il contenitore.
Ecco uno snippet del Dockerfile per ospitare il modello feturizer. Per l'implementazione completa fare riferimento a Dockerfile per caratterizzato cartella.
Testare l'immagine di inferenza personalizzata con il featureurizer localmente
Ora crea e testa il contenitore di inferenza personalizzato con funzionalità in locale, utilizzando Amazon SageMaker in modalità locale. La modalità locale è perfetta per testare gli script di elaborazione, formazione e inferenza senza avviare alcun processo su Amazon SageMaker. Dopo aver confermato i risultati dei test locali, puoi adattare facilmente gli script di training e di inferenza per la distribuzione su Amazon SageMaker con modifiche minime.
Per testare localmente l'immagine personalizzata del featureizer, crea prima l'immagine utilizzando il file definito in precedenza Dockerfile. Quindi, avvia un contenitore montando la directory contenente il modello di feature (preprocess.joblib
) al /opt/ml/model
directory all'interno del contenitore. Inoltre, mappa la porta 8080 dal contenitore all'host.
Una volta avviato, puoi inviare richieste di inferenza a http://localhost:8080/invocations.
Per creare e avviare il contenitore, apri un terminale ed esegui i seguenti comandi.
Tieni presente che dovresti sostituire il file <IMAGE_NAME>
, come mostrato nel codice seguente, con il nome dell'immagine del contenitore.
Anche il comando seguente presuppone che il file trainer scikit-learn
modello (preprocess.joblib
) è presente in una directory chiamata models
.
Dopo che il contenitore è attivo e funzionante, possiamo testare sia il file /ping ed /invocazioni percorsi utilizzando i comandi curl.
Esegui i comandi seguenti da un terminale
Quando vengono inviati dati grezzi (non trasformati). http://localhost:8080/invocations, l'endpoint risponde con dati trasformati.
Dovresti vedere una risposta simile alla seguente:
Ora terminiamo il contenitore in esecuzione, quindi tagghiamo e inviamo l'immagine personalizzata locale a un Amazon Elastic Container Registry privato (Amazon ECR) deposito.
Consulta i comandi seguenti per accedere ad Amazon ECR, che contrassegna l'immagine locale con il percorso completo dell'immagine Amazon ECR e quindi invia l'immagine ad Amazon ECR. Assicurati di sostituire region
ed account
variabili per adattarle al tuo ambiente.
Fare riferimento a creare un archivio ed inviare un'immagine ad Amazon ECR Interfaccia a riga di comando di AWS (CLI AWS) comandi per ulteriori informazioni.
Passaggio opzionale
Facoltativamente, puoi eseguire un test in tempo reale distribuendo il modello di funzionalità su un endpoint in tempo reale con l'immagine docker personalizzata in Amazon ECR. Fare riferimento a featurizer.ipynb notebook per l'implementazione completa di creazione, test e invio dell'immagine personalizzata su Amazon ECR.
Amazon SageMaker inizializza l'endpoint di inferenza e copia gli artefatti del modello nel file /opt/ml/model
directory all'interno del contenitore. Vedere Come SageMaker carica gli artefatti del modello.
Crea un contenitore di predittori XGBoost personalizzato
Per creare il contenitore di inferenza XGBoost seguiamo passaggi simili a quelli che abbiamo fatto durante la creazione dell'immagine per il contenitore featurizer:
- Scarica pre-addestrato
XGBoost
modello da Amazon S3. - creare il
inference.py
script che carica il file preaddestratoXGBoost
model, converte i dati di input trasformati ricevuti dal featureizer e li converte inXGBoost.DMatrix
formato, viene eseguitopredict
sul booster e restituisce previsioni in formato json. - Script e file di configurazione che formano lo stack di servizio del modello (ad esempio,
nginx.conf
,wsgi.py
eserve
rimangono gli stessi e non necessitano di modifiche. - Usiamo
Ubuntu:18.04
come immagine di base per il Dockerfile. Questo non è un prerequisito. Utilizziamo l'immagine di base di Ubuntu per dimostrare che i contenitori possono essere creati con qualsiasi immagine di base. - I passaggi per creare l'immagine della finestra mobile del cliente, testare l'immagine localmente e inviare l'immagine testata ad Amazon ECR rimangono gli stessi di prima.
Per brevità, poiché i passaggi sono simili a quelli mostrati in precedenza; tuttavia di seguito mostriamo solo la codifica modificata.
In primo luogo, la inference.py
sceneggiatura. Ecco uno snippet che mostra l'implementazione di /ping
ed /invocations
. Fare riferimento a inferenza.py sotto il predittore cartella per l'implementazione completa di questo file.
Ecco uno snippet del Dockerfile per ospitare il modello predittivo. Per l'implementazione completa fare riferimento a Dockerfile nella cartella dei predittori.
Continuiamo quindi a creare, testare e inviare questa immagine del predittore personalizzata a un repository privato in Amazon ECR. Fare riferimento a predittore.ipynb notebook per l'implementazione completa della creazione, del test e del push dell'immagine personalizzata su Amazon ECR.
Distribuire la pipeline di inferenza seriale
Dopo aver testato sia le immagini del featurizer che quelle del predittore e averle inviate ad Amazon ECR, ora carichiamo gli artefatti del nostro modello in un bucket Amazon S3.
Quindi creiamo due oggetti modello: uno per il featurizer
(Cioè, preprocess.joblib
) e altro per il predictor
(Cioè, xgboost-model
) specificando l'URI dell'immagine personalizzata che abbiamo creato in precedenza.
Ecco uno snippet che lo mostra. Fare riferimento a serial-inference-pipeline.ipynb per la piena attuazione.
Ora, per distribuire questi contenitori in modo seriale, creiamo prima un file Modello di pipeline oggetto e passare il featurizer
modello e il predictor
model in un oggetto elenco Python nello stesso ordine.
Quindi, chiamiamo il .deploy()
metodo sul Modello di pipeline specificando il tipo di istanza e il numero di istanze.
In questa fase, Amazon SageMaker distribuisce la pipeline di inferenza seriale su un endpoint in tempo reale. Aspettiamo che venga raggiunto l'endpoint InService
.
Ora possiamo testare l'endpoint inviando alcune richieste di inferenza a questo endpoint live.
Fare riferimento a serial-inference-pipeline.ipynb per la piena attuazione.
ripulire
Una volta terminato il test, seguire le istruzioni nella sezione di pulizia del notebook per eliminare le risorse fornite in questo post per evitare addebiti non necessari. Fare riferimento a Prezzi di Amazon SageMaker per i dettagli sul costo delle istanze di inferenza.
Conclusione
In questo post ho mostrato come possiamo creare e distribuire un'applicazione di inferenza ML seriale utilizzando contenitori di inferenza personalizzati su endpoint in tempo reale su Amazon SageMaker.
Questa soluzione dimostra come i clienti possono portare i propri contenitori personalizzati per l'hosting su Amazon SageMaker in modo economicamente vantaggioso. Con l'opzione BYOC, i clienti possono creare e adattare rapidamente le proprie applicazioni ML da distribuire su Amazon SageMaker.
Ti invitiamo a provare questa soluzione con un set di dati pertinente ai tuoi indicatori chiave di prestazione (KPI) aziendali. Puoi fare riferimento all'intera soluzione in questo Repository GitHub.
Riferimenti
L'autore
Praven Chamarthi è un Senior AI/ML Specialist con Amazon Web Services. È appassionato di AI/ML e di tutto ciò che riguarda AWS. Aiuta i clienti nelle Americhe a scalare, innovare e gestire i carichi di lavoro ML in modo efficiente su AWS. Nel suo tempo libero, Praveen ama leggere e godersi i film di fantascienza.
- Distribuzione di contenuti basati su SEO e PR. Ricevi amplificazione oggi.
- PlatoData.Network Generativo verticale Ai. Potenzia te stesso. Accedi qui.
- PlatoAiStream. Intelligenza Web3. Conoscenza amplificata. Accedi qui.
- PlatoneESG. Carbonio, Tecnologia pulita, Energia, Ambiente, Solare, Gestione dei rifiuti. Accedi qui.
- Platone Salute. Intelligence sulle biotecnologie e sulle sperimentazioni cliniche. Accedi qui.
- Fonte: https://aws.amazon.com/blogs/machine-learning/build-and-deploy-ml-inference-applications-from-scratch-using-amazon-sagemaker/
- :ha
- :È
- :non
- :Dove
- $ SU
- 08
- 09
- 1
- 10
- 100
- 11
- 13
- 14
- 150
- 16
- 17
- 20
- 200
- 2023
- 25
- 28
- 30
- 500
- 7
- 8
- 87
- 9
- a
- WRI
- Accetta
- accetta
- accesso
- di conseguenza
- Il mio account
- operanti in
- adattare
- Inoltre
- Adozione
- che interessano
- Dopo shavasana, sedersi in silenzio; saluti;
- AI / ML
- Algoritmi
- Tutti
- lungo
- anche
- Amazon
- Amazon Sage Maker
- Amazon Web Services
- Americas
- an
- ed
- in qualsiasi
- api
- App
- Applicazioni
- applicazioni
- si applica
- aprile
- SONO
- Italia
- AS
- assume
- At
- disponibile
- evitare
- AWS
- sfondo
- base
- basato
- BE
- diventando
- prima
- essendo
- sotto
- stile di vita
- ripetitore
- entrambi
- portare
- Portare
- costruire
- Costruzione
- costruito
- incassato
- impacchettare
- affari
- ma
- by
- chiamata
- detto
- Materiale
- Custodie
- casi
- CAT
- certo
- il cambiamento
- cambiato
- Modifiche
- oneri
- dai un'occhiata
- Controlli
- chiaramente
- Cloud
- codice
- codifica
- Colonna
- colonne
- COM
- Uncommon
- complesso
- computer
- Configurazione
- collegato
- veloce
- Considerazioni
- costante
- costruire
- consumo
- Contenitore
- Tecnologie Container
- contenuto
- testuali
- continua
- di controllo
- convertire
- Costo
- potuto
- creare
- Creazione
- creazione
- Credenziali
- costume
- cliente
- Clienti
- dati
- Data
- definire
- definito
- dimostrare
- dimostra
- dipendenze
- schierare
- schierato
- distribuzione
- deployment
- Distribuisce
- tavolo
- dettagli
- determinato
- sviluppato
- Mercato
- DITT
- DID
- diverso
- docker
- domini
- fatto
- Dont
- dovuto
- durante
- e
- In precedenza
- facilmente
- in modo efficiente
- altro
- incoraggiare
- da un capo all'altro
- endpoint
- garantire
- Intero
- iscrizione
- Ambiente
- ambienti
- errore
- eccetera
- esempio
- Tranne
- eccezione
- eseguito
- familiare
- Moda
- preferito
- Caratteristiche
- pochi
- Compila il
- File
- Nome
- in forma
- adatto
- Flessibilità
- seguire
- i seguenti
- Nel
- modulo
- formato
- essere trovato
- Contesto
- quadri
- da
- pieno
- function
- funzionale
- Guadagni
- porta
- ottenere
- GitHub
- GMT
- va
- maniglia
- Maniglie
- Manovrabilità
- Avere
- he
- Salute e benessere
- altezza
- Aiuto
- aiuta
- il suo
- host
- di hosting
- padroni di casa
- Come
- Tutorial
- Tuttavia
- HTML
- http
- HTTPS
- i
- if
- Immagine
- immagini
- realizzare
- implementazione
- importare
- in
- inclusi
- Compreso
- sempre più
- individuale
- industrie
- informazioni
- inhouse
- innovare
- ingresso
- interno
- install
- installato
- esempio
- istruzioni
- integrato
- Interfaccia
- ai miglioramenti
- coinvolto
- da solo
- IT
- Lavoro
- Offerte di lavoro
- jpg
- json
- mantenere
- Le
- Discografica
- con i più recenti
- lanciare
- lanciato
- lancia
- lancio
- apprendimento
- a sinistra
- Lunghezza
- biblioteche
- linea
- Lista
- elencati
- vivere
- caricare
- Caricamento in corso
- carichi
- locale
- a livello locale
- logica
- accesso
- ama
- macchina
- machine learning
- corrente principale
- FA
- Fare
- gestire
- modo
- carta geografica
- marchio
- partita
- Maggio..
- metodo
- forza
- minimo
- mancante
- ML
- Moda
- modello
- modelli
- modificare
- Scopri di più
- Film
- molti
- multiplo
- devono obbligatoriamente:
- Nome
- nomi
- Bisogno
- esigenze
- no
- Nessuna
- taccuino
- adesso
- numero
- numpy
- oggetto
- oggetti
- of
- offerte
- Offerte
- di frequente
- on
- una volta
- ONE
- quelli
- esclusivamente
- su
- aprire
- operare
- operativa
- Opzione
- or
- minimo
- OS
- Altro
- nostro
- produzione
- proprio
- Packages
- panda
- parametri
- particolare
- passare
- appassionato
- sentiero
- perfetta
- Eseguire
- performance
- esegue
- conduttura
- piano
- Platone
- Platone Data Intelligence
- PlatoneDati
- per favore
- punto
- Post
- predizione
- Previsioni
- Predictor
- presenti
- in precedenza
- un bagno
- problemi
- processi
- i processi
- lavorazione
- Processore
- promuove
- proprio
- scopo
- Spingi
- spinto
- spingendo
- Python
- rapidamente
- aumentare
- gamma
- Crudo
- Leggi
- pronto
- tempo reale
- ricevuto
- riferimento
- registro
- pertinente
- rimanere
- sostituire
- deposito
- richiesta
- richieste
- richiedere
- necessario
- Requisiti
- richiede
- risorsa
- Risorse
- risposta
- colpevole
- Risultati
- ritorno
- di ritorno
- problemi
- Anello
- strada
- percorsi
- RIGA
- Correre
- running
- corre
- sagemaker
- stesso
- Risparmi
- salvato
- Scala
- fantascienza
- graffiare
- copione
- script
- Secondo
- Sezione
- vedere
- inviare
- invio
- anziano
- inviato
- separato
- serial
- Serie
- servire
- server
- servizio
- Servizi
- servizio
- Sessione
- set
- Set
- alcuni
- Sesso
- dovrebbero
- mostrare attraverso le sue creazioni
- ha mostrato
- mostrato
- Spettacoli
- simile
- Un'espansione
- frammento
- So
- soluzione
- RISOLVERE
- alcuni
- qualcosa
- Scintilla
- specialista
- specifico
- pila
- Stage
- Standard
- punto di vista
- Stato dei servizi
- step
- Passi
- conservazione
- streaming
- flussi
- Corda
- strutturato
- Con successo
- tale
- Dom.
- supportato
- Supporto
- supporti
- TAG
- su misura
- prende
- task
- terminal
- test
- testato
- Testing
- test
- che
- Il
- loro
- Li
- poi
- Là.
- perciò
- Strumenti Bowman per analizzare le seguenti finiture:
- cose
- questo
- tempo
- a
- strumenti
- Treni
- allenato
- Training
- Trasformare
- trasformato
- trasformatore
- trasformatori
- trasformazione
- prova
- cerca
- seconda
- Digitare
- Ubuntu
- per
- sottostante
- inutile
- upgrade
- utilizzabile
- uso
- caso d'uso
- utilizzato
- utenti
- usa
- utilizzando
- Valori
- vario
- variando
- verifica
- versione
- aspettare
- volere
- Prima
- we
- sito web
- web server
- servizi web
- WELL
- quale
- while
- perché
- più ampia
- volere
- con
- entro
- senza
- flusso di lavoro
- lavoro
- scritto
- X
- XGBoost
- Tu
- Trasferimento da aeroporto a Sharm
- zefiro