Visualizza i risultati del modello AI/ML utilizzando Flask ed Elastic Beanstalk AWS - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Visualizza i risultati del modello AI/ML utilizzando Flask ed Elastic Beanstalk AWS

Creato da Chris Caudill () e Durga Sury AWS

Ambiente: PoC o pilota

Tecnologie: apprendimento automatico e intelligenza artificiale; analisi DevOps; app Web e mobili

Carico di lavoro: open source

AWSservizi: Amazon Comprehend; AWS Elastic Beanstalk

Riepilogo

La visualizzazione dei risultati dei servizi di intelligenza artificiale e machine learning (AI/ML) richiede spesso API chiamate complesse che devono essere personalizzate dagli sviluppatori e dagli ingegneri. Questo può essere uno svantaggio se gli analisti vogliono esplorare rapidamente un nuovo set di dati.

È possibile migliorare l'accessibilità dei servizi e fornire una forma più interattiva di analisi dei dati utilizzando un'interfaccia utente (UI) basata sul Web che consente agli utenti di caricare i propri dati e visualizzare i risultati del modello in una dashboard.

Questo modello utilizza Flask e Plotly per integrare Amazon Comprehend con un'applicazione web personalizzata e visualizzare sentimenti ed entità a partire dai dati forniti dagli utenti. Il modello fornisce anche i passaggi per distribuire un'applicazione utilizzando AWS Elastic Beanstalk. Puoi adattare l'applicazione utilizzando i servizi di intelligenza artificiale di Amazon Web Services (AWS) o con un modello addestrato personalizzato ospitato su un endpoint (ad esempio, un SageMaker endpoint Amazon).

Prerequisiti e limitazioni

Prerequisiti

  • Un account AWS attivo. 

  • AWSCommand Line Interface (AWSCLI), installata e configurata sul computer locale. Per ulteriori informazioni su questo argomento, consulta Nozioni di base sulla configurazione nella AWS CLI documentazione. Puoi anche usare un ambiente di sviluppo integrato AWS Cloud9 IDE (); per maggiori informazioni a riguardo, consulta il tutorial di Python per Cloud9 e l'anteprima delle applicazioni in esecuzione in AWS Cloud9 nella documentazione di Cloud9. AWS IDE AWS

  • Una comprensione del framework di applicazioni web di Flask. Per ulteriori informazioni su Flask, consulta il Quickstart nella documentazione di Flask.

  • Python versione 3.6 o successiva, installato e configurato. Puoi installare Python seguendo le istruzioni contenute nella sezione Configurazione dell'ambiente di sviluppo Python nella documentazione di Elastic AWS Beanstalk.

  • Elastic Beanstalk Command Line Interface CLI (EB), installata e configurata. Per ulteriori informazioni su questo argomento, consulta Installare l'EB CLI e Configurare l'EB CLI dalla documentazione di AWS Elastic Beanstalk.

Limitazioni

  • L'applicazione Flask di questo pattern è progettata per funzionare con file.csv che utilizzano una singola colonna di testo e sono limitati a 200 righe. Il codice dell'applicazione può essere adattato per gestire altri tipi di file e volumi di dati.

  • L'applicazione non considera la conservazione dei dati e continua ad aggregare i file utente caricati fino a quando non vengono eliminati manualmente. Puoi integrare l'applicazione con Amazon Simple Storage Service (Amazon S3) per lo storage persistente di oggetti o utilizzare un database come Amazon DynamoDB per lo storage di chiave-valore senza server.

  • L'applicazione prende in considerazione solo i documenti in lingua inglese. Tuttavia, puoi utilizzare Amazon Comprehend per rilevare la lingua principale di un documento. Per ulteriori informazioni sulle lingue supportate per ogni azione, consulta il APIriferimento nella documentazione di Amazon Comprehend.

  • Un elenco di risoluzione dei problemi che contiene gli errori più comuni e le relative soluzioni è disponibile nella sezione Informazioni aggiuntive.

Architettura

Architettura dell'applicazione Flask

Flask è un framework leggero per lo sviluppo di applicazioni web in Python. È progettato per combinare la potente elaborazione dei dati di Python con una ricca interfaccia utente web. L'applicazione Flask del pattern mostra come creare un'applicazione Web che consenta agli utenti di caricare dati, inviarli ad Amazon Comprehend per l'inferenza e quindi visualizzare i risultati.   L'applicazione ha la seguente struttura:

  • static— Contiene tutti i file statici che supportano l'interfaccia utente Web (ad esempio JavaScriptCSS, e immagini)

  • templates— Contiene tutte le HTML pagine dell'applicazione

  • userData— Memorizza i dati utente caricati

  • application.py— Il file dell'applicazione Flask

  • comprehend_helper.py— Funzioni per effettuare API chiamate verso Amazon Comprehend

  • config.py— Il file di configurazione dell'applicazione

  • requirements.txt— Le dipendenze Python richieste dall'applicazione

Lo application.py script contiene le funzionalità principali dell'applicazione web, che consiste in quattro percorsi Flask. Il diagramma seguente mostra questi percorsi Flask.

I quattro percorsi Flask che costituiscono la funzionalità principale dell'applicazione web.
  • /è la radice dell'applicazione e indirizza gli utenti alla upload.html pagina (memorizzata nella templates directory).

  • /saveFileè una route che viene richiamata dopo che un utente carica un file. Questo percorso riceve una POST richiesta tramite un HTML modulo, che contiene il file caricato dall'utente. Il file viene salvato nella userData directory e il percorso reindirizza gli utenti alla /dashboard rotta.

  • /dashboardinvia gli utenti alla pagina. dashboard.html All'interno di questa paginaHTML, esegue il JavaScript codice static/js/core.js che legge i dati dal /data percorso e quindi crea visualizzazioni per la pagina.

  • /dataè un programma JSON API che presenta i dati da visualizzare nella dashboard. Questo percorso legge i dati forniti dall'utente e utilizza le funzioni comprehend_helper.py per inviare i dati utente ad Amazon Comprehend per l'analisi del sentiment e il riconoscimento di entità denominate (). NER La risposta di Amazon Comprehend viene formattata e restituita come JSON oggetto.

Architettura di distribuzione

Per ulteriori informazioni sulle considerazioni di progettazione per le applicazioni distribuite utilizzando Elastic Beanstalk on the CloudAWS, consulta la documentazione di Elastic Beanstalk. AWS

Diagramma di architettura per l'utilizzo di Flask ed Elastic Beanstalk per visualizzare i risultati del modello AI/ML.

Considerazioni sulla progettazione

Stack tecnologico

  • Amazon Comprehend 

  • Elastic Beanstalk 

  • Flask 

Automazione e scalabilità

Le implementazioni di Elastic Beanstalk vengono configurate automaticamente con sistemi di bilanciamento del carico e gruppi di auto scaling. Per ulteriori opzioni di configurazione, consulta Configurazione degli ambienti Elastic Beanstalk nella AWS documentazione di Elastic Beanstalk.

Strumenti

  • AWSCommand Line Interface (AWSCLI) è uno strumento unificato che fornisce un'interfaccia coerente per interagire con tutte le parti di. AWS

  • Amazon Comprehend utilizza l'elaborazione del linguaggio naturale (NLP) per estrarre informazioni sul contenuto dei documenti senza richiedere una preelaborazione speciale.

  • AWSElastic Beanstalk ti aiuta a distribuire e gestire rapidamente le applicazioni AWS nel cloud senza dover conoscere l'infrastruttura che esegue tali applicazioni.

  • CLIElastic Beanstalk CLI (EB) è un'interfaccia a riga di comando per AWS Elastic Beanstalk che fornisce comandi interattivi per semplificare la creazione, l'aggiornamento e il monitoraggio di ambienti da un repository locale.

  • Il framework Flask esegue l'elaborazione dei dati e API le chiamate utilizzando Python e offre una visualizzazione web interattiva con Plotly.

Codice

Il codice per questo pattern è disponibile nei risultati del modello GitHub Visualize AI/ML utilizzando il repository Flask ed Elastic AWS Beanstalk.

Epiche

AttivitàDescrizioneCompetenze richieste

Clona il GitHub repository.

Estrai il codice dell'applicazione dai risultati del modello GitHub Visualize AI/ML utilizzando il repository Flask ed Elastic Beanstalk eseguendo il AWS seguente comando:

git clone git@github.com:aws-samples/aws-comprehend-elasticbeanstalk-for-flask.git

Nota: assicurati di configurare le chiavi con. SSH GitHub

Developer

Installa i moduli Python.

Dopo aver clonato il repository, viene creata una nuova aws-comprehend-elasticbeanstalk-for-flask directory locale. In quella directory, il requirements.txt file contiene i moduli e le versioni di Python che eseguono l'applicazione. Utilizzate i seguenti comandi per installare i moduli:

cd aws-comprehend-elasticbeanstalk-for-flask

pip install -r requirements.txt

Sviluppatore Python

Prova l'applicazione localmente.

Avvia il server Flask eseguendo il seguente comando:

python application.py

Ciò restituisce informazioni sul server in esecuzione. Dovresti essere in grado di accedere all'applicazione aprendo un browser e visitando http://localhost:5000

Nota: se esegui l'applicazione in un AWS IDE Cloud9, devi sostituire application.run() il comando nel file con application.py la seguente riga:

application.run(host=os.getenv('IP', '0.0.0.0'),port=int(os.getenv('PORT', 8080)))

È necessario annullare questa modifica prima della distribuzione.

Sviluppatore Python
AttivitàDescrizioneCompetenze richieste

Avvia l'applicazione Elastic Beanstalk.

Per avviare il progetto come applicazione Elastic Beanstalk, esegui il seguente comando dalla directory principale dell'applicazione:

eb init -p python-3.6 comprehend_flask --region us-east-1

Importante:

  • comprehend_flaskè il nome dell'applicazione Elastic Beanstalk e può essere modificato in base alle proprie esigenze. 

  • Puoi sostituire la AWS regione con una regione a tua scelta. Se non si specifica una regione, AWS CLI viene utilizzata la regione predefinita in.

  • L'applicazione è stata creata con Python versione 3.6. Potresti riscontrare errori se usi altre versioni di Python.

Esegui il eb init -i comando per ulteriori opzioni di configurazione della distribuzione.

Architetto, sviluppatore

Implementa l'ambiente Elastic Beanstalk.

Esegui il comando seguente dalla directory principale dell'applicazione:

eb create comprehend-flask-env

Nota: comprehend-flask-env è il nome dell'ambiente Elastic Beanstalk e può essere modificato in base alle proprie esigenze. Il nome può contenere solo lettere, numeri e trattini.

Architetto, sviluppatore

Autorizza la tua distribuzione all'uso di Amazon Comprehend.

Sebbene la tua applicazione possa essere stata distribuita correttamente, dovresti anche fornire alla distribuzione l'accesso ad Amazon Comprehend. ComprehendFullAccessè una policy AWS gestita che fornisce all'applicazione distribuita le autorizzazioni per effettuare API chiamate ad Amazon Comprehend.

Allega la ComprehendFullAccess policy a aws-elasticbeanstalk-ec2-role (questo ruolo viene creato automaticamente per le istanze Amazon Elastic Compute Cloud (AmazonEC2) della tua distribuzione) eseguendo il seguente comando:

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ComprehendFullAccess --role-name aws-elasticbeanstalk-ec2-role

Importante: aws-elasticbeanstalk-ec2-role viene creato quando l'applicazione viene distribuita. È necessario completare il processo di distribuzione prima di poter allegare la policy AWS Identity and Access Management (IAM).

Sviluppatore, architetto della sicurezza

Visita la tua applicazione distribuita.

Dopo che l'applicazione è stata distribuita correttamente, puoi visitarla eseguendo il eb open comando.

Puoi anche eseguire il eb status comando per ricevere dettagli sulla distribuzione. La distribuzione URL è elencata sottoCNAME.

Architetto, sviluppatore
AttivitàDescrizioneCompetenze richieste

Autorizza Elastic Beanstalk ad accedere al nuovo modello.

Assicurati che Elastic Beanstalk disponga delle autorizzazioni di accesso necessarie per il tuo nuovo endpoint modello. Ad esempio, se utilizzi un SageMaker endpoint Amazon, la tua distribuzione deve disporre dell'autorizzazione per richiamare l'endpoint. 

Per ulteriori informazioni a riguardo, InvokeEndpointconsulta la SageMaker documentazione di Amazon.

Sviluppatore, architetto della sicurezza

Invia i dati utente a un nuovo modello.

Per modificare il modello ML sottostante in questa applicazione, è necessario modificare i seguenti file:

  • comprehend_helper.py— Si tratta dello script Python che si connette ad Amazon Comprehend, elabora la risposta e restituisce il risultato finale all'applicazione. In questo script, puoi indirizzare i dati a un altro servizio di intelligenza artificiale sul AWS cloud oppure inviare i dati a un endpoint modello personalizzato. Ti consigliamo di formattare anche i risultati in questo script per la separazione logica e la riutilizzabilità di questo pattern.

  • application.py— Se si modifica il nome dello comprehend_helper.py script o delle funzioni, è necessario aggiornare application.py lo script dell'applicazione per riflettere tali modifiche.

Data scientist

Aggiorna le visualizzazioni del pannello di controllo.

In genere, incorporare un nuovo modello ML significa che le visualizzazioni devono essere aggiornate per riflettere i nuovi risultati. Queste modifiche vengono apportate nei seguenti file:

  • templates/dashboard.html— L'applicazione predefinita tiene conto solo di due visualizzazioni di base. L'intero layout della pagina può essere modificato in questo file.

  • static/js/core.js— Questo script acquisisce l'output formattato del /data percorso del server Flask e utilizza Plotly per creare visualizzazioni. Puoi aggiungere o aggiornare i grafici della pagina.

Sviluppatore web
AttivitàDescrizioneCompetenze richieste

Aggiorna il file dei requisiti dell'applicazione.

Prima di inviare modifiche a Elastic Beanstalk, requirements.txt aggiorna il file in modo che rifletta eventuali nuovi moduli Python eseguendo il seguente comando nella directory principale dell'applicazione:

pip freeze > requirements.txt

Sviluppatore Python

Ridistribuisci l'ambiente Elastic Beanstalk.

Per assicurarti che le modifiche all'applicazione si riflettano nella distribuzione di Elastic Beanstalk, vai alla directory principale dell'applicazione ed esegui il comando seguente:

eb deploy

Questo invia la versione più recente del codice dell'applicazione alla distribuzione esistente di Elastic Beanstalk.

Amministratore di sistema, Architetto

Risorse correlate

Informazioni aggiuntive

Elenco di risoluzione dei problemi

Di seguito sono riportati sei errori comuni e le relative soluzioni.

Errore 1

Unable to assume role "arn:aws:iam::xxxxxxxxxx:role/aws-elasticbeanstalk-ec2-role". Verify that the role exists and is configured correctly.

Soluzione: se questo errore si verifica durante l'esecuzioneeb create, crea un'applicazione di esempio sulla console Elastic Beanstalk per creare il profilo di istanza predefinito. Per ulteriori informazioni su questo argomento, consulta Creazione di un ambiente Elastic Beanstalk nella documentazione di Elastic Beanstalk. AWS

Errore 2

Your WSGIPath refers to a file that does not exist.

Soluzione: questo errore si verifica nei registri di distribuzione perché Elastic Beanstalk prevede che il codice Flask venga denominato. application.py Se hai scelto un nome diverso, eseguilo eb config e modificalo WSGIPath come mostrato nel seguente esempio di codice:

aws:elasticbeanstalk:container:python: NumProcesses: '1' NumThreads: '15' StaticFiles: /static/=static/ WSGIPath: application.py

Assicurati di sostituirlo application.py con il nome del file.

Puoi anche sfruttare Gunicorn e un Procfile. Per ulteriori informazioni su questo approccio, consulta Configurazione del WSGI server con un Procfile nella documentazione di Elastic AWS Beanstalk.

Errore 3

Target WSGI script '/opt/python/current/app/application.py' does not contain WSGI application 'application'.

Soluzione: Elastic Beanstalk si aspetta che la variabile che rappresenta l'applicazione Flask venga denominata. application Assicurati che il application.py file utilizzi application come nome della variabile:

application = Flask(__name__)

Errore 4

The EB CLI cannot find your SSH key file for keyname

Soluzione: utilizza l'EB CLI per specificare quale coppia di chiavi utilizzare o per creare una coppia di chiavi per le EC2 istanze della distribuzione. Per risolvere l'errore, esegui eb init -i e una delle opzioni chiederà:

Do you want to set up SSH for your instances?

YRispondi con per creare una coppia di chiavi o specificare una coppia di chiavi esistente.

Errore 5

Ho aggiornato il codice e l'ho ridistribuito, ma la mia distribuzione non riflette le mie modifiche.

Soluzione: se utilizzi un repository Git con la tua distribuzione, assicurati di aggiungere e confermare le modifiche prima di ridistribuirle.

Errore 6

Stai visualizzando l'anteprima dell'applicazione Flask da un Cloud9 e riscontri degli AWS erroriIDE.

Soluzione: per ulteriori informazioni su questo argomento, consulta Anteprima delle applicazioni in esecuzione in AWS Cloud9 nella documentazione di IDE Cloud9. AWS

Elaborazione del linguaggio naturale con Amazon Comprehend

Scegliendo di utilizzare Amazon Comprehend, puoi rilevare entità personalizzate in singoli documenti di testo eseguendo analisi in tempo reale o processi batch asincroni. Amazon Comprehend consente inoltre di addestrare modelli personalizzati di riconoscimento delle entità e classificazione del testo che possono essere utilizzati in tempo reale creando un endpoint.

Questo modello utilizza processi batch asincroni per rilevare sentimenti ed entità da un file di input che contiene più documenti. L'applicazione di esempio fornita da questo modello è progettata per consentire agli utenti di caricare un file.csv contenente una singola colonna con un documento di testo per riga. Il comprehend_helper.py file nei risultati del modello GitHub Visualize AI/ML utilizzando il repository Flask ed Elastic Beanstalk AWS legge il file di input e invia l'input ad Amazon Comprehend per l'elaborazione.

BatchDetectEntities

Amazon Comprehend esamina il testo di un batch di documenti alla ricerca di entità denominate e restituisce l'entità, l'ubicazione, il tipo di entità rilevati e un punteggio che indica il livello di fiducia di Amazon Comprehend. È possibile inviare un massimo di 25 documenti in una API chiamata, con ogni documento di dimensioni inferiori a 5.000 byte. Puoi filtrare i risultati per mostrare solo determinate entità in base al caso d'uso. Ad esempio, è possibile ignorare il tipo di ‘quantity’ entità e impostare un punteggio di soglia per l'entità rilevata (ad esempio, 0,75). Ti consigliamo di esaminare i risultati per il tuo caso d'uso specifico prima di scegliere un valore di soglia. Per ulteriori informazioni su questo argomento, consulta la BatchDetectEntitiesdocumentazione di Amazon Comprehend.

BatchDetectSentiment

Amazon Comprehend ispeziona un batch di documenti in entrata e restituisce il sentimento prevalente per ogni documento (,, o). POSITIVE NEUTRAL MIXED NEGATIVE È possibile inviare un massimo di 25 documenti in una API chiamata, con ogni documento di dimensioni inferiori a 5.000 byte. L'analisi del sentimento è semplice e puoi scegliere il sentimento con il punteggio più alto da visualizzare nei risultati finali. Per ulteriori informazioni su questo argomento, consulta la BatchDetectSentimentdocumentazione di Amazon Comprehend.

 

Gestione della configurazione di Flask

I server Flask utilizzano una serie di variabili di configurazione per controllare il funzionamento del server. Queste variabili possono contenere output di debug, token di sessione o altre impostazioni dell'applicazione. È inoltre possibile definire variabili personalizzate a cui è possibile accedere mentre l'applicazione è in esecuzione. Esistono diversi approcci per l'impostazione delle variabili di configurazione.

In questo modello, la configurazione è definita config.py ed ereditata all'internoapplication.py.

  • config.pycontiene le variabili di configurazione impostate all'avvio dell'applicazione. In questa applicazione, viene definita una DEBUG variabile per indicare all'applicazione di eseguire il server in modalità di debug. Nota: la modalità di debug non deve essere utilizzata quando si esegue un'applicazione in un ambiente di produzione. UPLOAD_FOLDERè una variabile personalizzata definita per essere referenziata più avanti nell'applicazione e che indica dove devono essere archiviati i dati utente caricati.

  • application.pyavvia l'applicazione Flask ed eredita le impostazioni di configurazione definite in. config.py Questa operazione viene eseguita dal seguente codice:

application = Flask(__name__) application.config.from_pyfile('config.py')