Distribuisci una soluzione di acquisizione dati di inferenza di machine learning su AWS Lambda PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Distribuisci una soluzione di acquisizione dati di inferenza di machine learning su AWS Lambda

Il monitoraggio delle previsioni di machine learning (ML) può contribuire a migliorare la qualità dei modelli distribuiti. L'acquisizione dei dati dalle inferenze effettuate in produzione può consentire di monitorare i modelli distribuiti e rilevare deviazioni nella qualità del modello. Il rilevamento tempestivo e proattivo di queste deviazioni consente di intraprendere azioni correttive, come la riqualificazione dei modelli, l'audit dei sistemi a monte o la risoluzione dei problemi di qualità.

AWS Lambda è un servizio di elaborazione serverless in grado di fornire inferenza ML in tempo reale su larga scala. In questo post, mostriamo una funzionalità di acquisizione dati di esempio che può essere distribuita a un carico di lavoro di inferenza Lambda ML.

Nel dicembre 2020, Lambda ha introdotto il supporto per le immagini del contenitore come formato di confezionamento. Questa funzionalità ha aumentato il limite delle dimensioni del pacchetto di distribuzione da 500 MB a 10 GB. Prima del lancio di questa funzionalità, il vincolo relativo alle dimensioni del pacchetto rendeva difficile la distribuzione di framework ML come TensorFlow o PyTorch alle funzioni Lambda. Dopo il lancio, l'aumento del limite delle dimensioni del pacchetto ha reso il machine learning un carico di lavoro praticabile e interessante da distribuire su Lambda. Nel 2021, l'inferenza ML è stata uno dei tipi di carichi di lavoro in più rapida crescita nel servizio Lambda.

Amazon Sage Maker, il servizio ML completamente gestito di Amazon, contiene la propria funzionalità di monitoraggio del modello. Tuttavia, il progetto di esempio in questo post mostra come eseguire l'acquisizione dei dati da utilizzare nel monitoraggio del modello per i clienti che utilizzano Lambda per l'inferenza ML. Il progetto utilizza estensioni Lambda per acquisire dati di inferenza al fine di ridurre al minimo l'impatto sulle prestazioni e sulla latenza della funzione di inferenza. L'utilizzo delle estensioni Lambda riduce inoltre al minimo l'impatto sugli sviluppatori di funzioni. Integrandosi tramite un'estensione, la funzionalità di monitoraggio può essere applicata a più funzioni e gestita da un team centralizzato.

Panoramica della soluzione

Questo progetto contiene codice sorgente e file di supporto per un'applicazione serverless che fornisce inferenza in tempo reale utilizzando un modello di risposta alle domande preaddestrato basato su distilbert. Il progetto utilizza la domanda Hugging Face e risponde al modello di elaborazione del linguaggio naturale (PNL). PyTorch per eseguire compiti di inferenza del linguaggio naturale. Il progetto contiene anche una soluzione per eseguire l'acquisizione di dati di inferenza per le previsioni del modello. Lo scrittore della funzione Lambda può determinare esattamente quali dati dall'input della richiesta di inferenza e dal risultato della previsione inviare all'estensione. In questa soluzione inviamo l'input e la risposta dal modello all'estensione. L'estensione invia quindi periodicamente i dati a un file Servizio di archiviazione semplice Amazon (Amazon S3) secchio. Costruiamo l'estensione di acquisizione dati come immagine contenitore utilizzando un file makefile. Successivamente creiamo la funzione di inferenza Lambda come immagine del contenitore e aggiungiamo l'immagine del contenitore dell'estensione come livello dell'immagine del contenitore. Il diagramma seguente mostra una panoramica dell'architettura.

Le estensioni Lambda sono un modo per aumentare le funzioni Lambda. In questo progetto utilizziamo un'estensione Lambda esterna per registrare la richiesta di inferenza e la previsione dall'inferenza. L'estensione esterna viene eseguita come processo separato nell'ambiente runtime Lambda, diminuendo l'impatto sulla funzione di inferenza. Tuttavia, la funzione condivide risorse come CPU, memoria e spazio di archiviazione con la funzione Lambda. Consigliamo di allocare memoria sufficiente alla funzione Lambda per garantire una disponibilità ottimale delle risorse. (Durante i nostri test, abbiamo allocato 5 GB di memoria alla funzione Lambda di inferenza e abbiamo riscontrato una disponibilità di risorse e una latenza di inferenza ottimali). Una volta completata un'inferenza, il servizio Lambda restituisce immediatamente la risposta e non attende che l'estensione finisca di registrare la richiesta e la risposta nel bucket S3. Con questo modello, l'estensione del monitoraggio non influisce sulla latenza dell'inferenza. Per ulteriori informazioni sulle estensioni Lambda dai un'occhiata a queste serie di video.

Contenuti del progetto

Questo progetto utilizza l'estensione Modello di applicazione serverless AWS (AWS SAM) interfaccia a riga di comando (CLI). Questo strumento da riga di comando consente agli sviluppatori di inizializzare e configurare le applicazioni; confezionare, creare e testare localmente; e distribuirlo nel cloud AWS.

Puoi scaricare il codice sorgente per questo progetto da il repository GitHub.

Questo progetto include i seguenti file e cartelle:

  • app/app.py – Codice per la funzione Lambda dell'applicazione, incluso il codice per l'inferenza ML.
  • app/Dockerfile – Il Dockerfile per creare l'immagine del contenitore che racchiude la funzione di inferenza, il modello scaricato da Hugging Face e l'estensione Lambda creata come livello. A differenza delle funzioni .zip, i livelli non possono essere collegati alle funzioni Lambda contenute nel contenitore al momento della creazione della funzione. Costruiamo invece il livello e ne copiamo il contenuto nell'immagine del contenitore.
  • Estensioni – I file di estensione del monitor del modello. Questa estensione Lambda viene utilizzata per registrare l'input nella funzione di inferenza e la previsione corrispondente in un bucket S3.
  • app/modello – Il modello scaricato da Hugging Face.
  • app/requisiti.txt – Le dipendenze Python da installare nel contenitore.
  • eventi – Eventi di chiamata che è possibile utilizzare per testare la funzione.
  • template.yaml – Un file descrittore che definisce le risorse AWS dell'applicazione.

L'applicazione utilizza diverse risorse AWS, incluse le funzioni Lambda e un file Gateway API Amazon API. Queste risorse sono definite nel template.yaml file in questo progetto. Puoi aggiornare il modello per aggiungere risorse AWS tramite lo stesso processo di distribuzione che aggiorna il codice dell'applicazione.

Prerequisiti

Per questa procedura dettagliata, è necessario disporre dei seguenti prerequisiti:

Distribuire l'applicazione di esempio

Per creare la tua applicazione per la prima volta, completa i seguenti passaggi:

  • Esegui il seguente codice nella tua shell. (Questo creerà anche l'estensione):
  • Crea un'immagine Docker dell'applicazione di monitoraggio del modello. I contenuti della build risiedono nel file .aws-sam elenco
docker build -t serverless-ml-model-monitor:latest .

docker tag serverless-ml-model-monitor:latest .dkr.ecr.us-east-1.amazonaws.com/serverless-ml-model-monitor:latest

  • Accedi ad Amazon ECR:
aws ecr get-login-password --region us-east-1 docker login --username AWS --password-stdin .dkr.ecr.us-east-1.amazonaws.com

  • Crea un repository in Amazon ECR:

aws ecr create-repositoryrepository-name serverless-ml-model-monitor--image-scanning-configuration scanOnPush=true--region us-east-1

  • Invia l'immagine del contenitore ad Amazon ECR:
docker push .dkr.ecr.us-east-1.amazonaws.com/serverless-ml-model-monitor:latest

  • Decommenta la riga n. 1 in app/Dockerfile e modificalo in modo che punti all'immagine del repository ECR corretta, quindi decommenta le righe n. 6 e n. 7 in app/Dockerfile:
WORKDIR /opt
COPY --from=layer /opt/ .

  • Compila nuovamente l'applicazione:

Costruiamo di nuovo perché Lambda non supporta i livelli Lambda direttamente per il tipo di pacchetto dell'immagine del contenitore. Dobbiamo prima creare il componente di monitoraggio del modello come immagine del contenitore, caricarlo su Amazon ECR e quindi utilizzare quell'immagine nell'applicazione di monitoraggio del modello come livello del contenitore.

  • Infine, distribuisci la funzione Lambda, API Gateway e l'estensione:
sam deploy --guided

Questo comando impacchetta e distribuisce la tua applicazione su AWS con una serie di richieste:

  • Nome dello stack : il nome del schierato AWS CloudFormazione pila. Dovrebbe essere univoco per il tuo account e la tua regione e un buon punto di partenza sarebbe qualcosa che corrisponda al nome del tuo progetto.
  • Regione AWS : la regione AWS in cui distribuisci la tua applicazione.
  • Conferma le modifiche prima della distribuzione : Se impostato su yes, eventuali serie di modifiche vengono visualizzate prima dell'esecuzione per la revisione manuale. Se impostato su no, la CLI AWS SAM distribuisce automaticamente le modifiche dell'applicazione.
  • Consenti la creazione del ruolo IAM della CLI AWS SAM : molti modelli AWS SAM, incluso questo esempio, creano Gestione dell'identità e dell'accesso di AWS Ruoli (IAM) richiesti per le funzioni Lambda incluse per accedere ai servizi AWS. Per impostazione predefinita, l'ambito è limitato alle autorizzazioni minime richieste. Per distribuire uno stack CloudFormation che crea o modifica i ruoli IAM, il file CAPABILITY_IAM valore per capabilities deve essere fornito. Se l'autorizzazione non viene fornita tramite questo prompt, per distribuire questo esempio è necessario passare esplicitamente --capabilities CAPABILITY_IAM Vai all’email sam deploy comando.
  • Salvare gli argomenti in samconfig.toml : Se impostato su yes, le tue scelte vengono salvate in un file di configurazione all'interno del progetto in modo che in futuro tu possa semplicemente eseguirlo sam deploy senza parametri per distribuire le modifiche alla tua applicazione.

Puoi trovare l'URL dell'endpoint API Gateway nei valori di output visualizzati dopo la distribuzione.

Prova l'applicazione

Per testare l'applicazione, utilizza Postman o curl per inviare una richiesta all'endpoint API Gateway. Per esempio:

curl -X POST -H "Content-Type: text/plain" https://.execute-api.us-east-1.amazonaws.com/Prod/nlp-qa -d '{"question": "Where do you live?", "context": "My name is Clara and I live in Berkeley."}'

Dovresti vedere un output come il seguente codice. Il modello ML ha dedotto dal contesto e ha restituito la risposta alla nostra domanda.

{
    "Question": "Where do you live?",
    "Answer": "Berkeley",
    "score": 0.9113729596138
}

Dopo alcuni minuti, dovresti vedere un file nel bucket S3 nlp-qamodel-model-monitoring-modelmonitorbucket- con l'input e l'inferenza registrati.

ripulire

Per eliminare l'applicazione di esempio creata, utilizza AWS CLI:

aws cloudformation delete-stack --stack-name 

Conclusione

In questo post, abbiamo implementato una funzionalità di monitoraggio del modello come estensione Lambda e l'abbiamo distribuita a un carico di lavoro di inferenza Lambda ML. Abbiamo mostrato come creare e distribuire questa soluzione sul tuo account AWS. Infine, abbiamo mostrato come eseguire un test per verificare la funzionalità del monitor.

Si prega di fornire eventuali pensieri o domande nella sezione commenti. Per ulteriori risorse di apprendimento serverless, visita Terra senza server.


Informazioni sugli autori

Distribuisci una soluzione di acquisizione dati di inferenza di machine learning su AWS Lambda PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dan Fox è Principal Specialist Solutions Architect presso la Worldwide Specialist Organization for Serverless. Dan collabora con i clienti per aiutarli a sfruttare i servizi serverless per creare applicazioni scalabili, con tolleranza agli errori, ad alte prestazioni e convenienti. Dan è grato di poter vivere e lavorare nell'incantevole Boulder, in Colorado.

Distribuisci una soluzione di acquisizione dati di inferenza di machine learning su AWS Lambda PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Newton Giain è un Senior Product Manager responsabile della creazione di nuove esperienze per i clienti di machine learning, calcolo ad alte prestazioni (HPC) ed elaborazione multimediale su AWS Lambda. Dirige lo sviluppo di nuove funzionalità per aumentare le prestazioni, ridurre la latenza, migliorare la scalabilità, aumentare l'affidabilità e ridurre i costi. Assiste inoltre i clienti AWS nella definizione di una strategia serverless efficace per le loro applicazioni ad alta intensità di calcolo.

Distribuisci una soluzione di acquisizione dati di inferenza di machine learning su AWS Lambda PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.DikshaSharma è un Solutions Architect e uno specialista di machine learning presso AWS. Aiuta i clienti ad accelerare l'adozione del cloud, in particolare nelle aree del machine learning e delle tecnologie serverless. Diksha distribuisce prove di concetto personalizzate che mostrano ai clienti il ​​valore di AWS nel soddisfare le loro sfide aziendali e IT. Supporta i clienti nella loro conoscenza di AWS e lavora a fianco dei clienti per creare la soluzione desiderata.

Distribuisci una soluzione di acquisizione dati di inferenza di machine learning su AWS Lambda PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Veda Rama è un Senior Specialist Solutions Architect per l'apprendimento automatico con sede nel Maryland. Veda collabora con i clienti per aiutarli a progettare applicazioni di machine learning efficienti, sicure e scalabili. Veda è interessata ad aiutare i clienti a sfruttare le tecnologie serverless per l'apprendimento automatico.

Distribuisci una soluzione di acquisizione dati di inferenza di machine learning su AWS Lambda PlatoBlockchain Data Intelligence. Ricerca verticale. Ai. Josh Kahn è il leader tecnologico mondiale per Serverless e un Principal Solutions Architect. È a capo di una comunità globale di esperti serverless in AWS che aiutano i clienti di tutte le dimensioni, dalle start-up alle più grandi imprese del mondo, a utilizzare in modo efficace le tecnologie serverless di AWS.

Timestamp:

Di più da Apprendimento automatico di AWS