View a markdown version of this page

Visualice los resultados del AI/ML modelo con Flask y AWS Elastic Beanstalk - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Visualice los resultados del AI/ML modelo con Flask y AWS Elastic Beanstalk

Chris Caudill y Durga Sury, Amazon Web Services

Resumen

La visualización de los resultados de los servicios de inteligencia artificial y machine learning (IA/ML) suele requerir llamadas complejas a la API, que los desarrolladores e ingenieros deben personalizar. Esto puede ser un inconveniente si sus analistas desean explorar rápidamente un nuevo conjunto de datos.

Para mejorar la accesibilidad de sus servicios y ofrecer una forma de análisis de datos más interactiva puede utilizar una interfaz de usuario (UI) basada en la web que permite a los usuarios cargar sus propios datos y visualizar los resultados del modelo en un panel de control.

Este patrón utiliza Flask y Plotly para integrar Amazon Comprehend en una aplicación web personalizada y visualizar opiniones y entidades a partir de los datos proporcionados por los usuarios. El patrón también proporciona los pasos para implementar una aplicación mediante el uso AWS Elastic Beanstalk. Puede adaptar la aplicación mediante servicios de AWS IA o con un modelo entrenado personalizado alojado en un punto final (por ejemplo, un SageMaker punto final de Amazon).

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • La aplicación Flask de este patrón está diseñada para funcionar con archivos .csv que utilizan una sola columna de texto y están limitados a 200 filas. El código de la aplicación se puede adaptar para gestionar otros tipos de archivos y volúmenes de datos.

  • La aplicación no tiene en cuenta la retención de datos y continúa agregando los archivos de usuario cargados hasta que se eliminan manualmente. Puede integrar la aplicación con Amazon Simple Storage Service (Amazon S3) para el almacenamiento persistente de objetos o utilizar una base de datos como Amazon DynamoDB para el almacenamiento de valores clave sin servidor.

  • La aplicación solo tiene en cuenta documentos en inglés. Sin embargo, puede utilizar Amazon Comprehend para detectar el idioma principal de un documento. Para obtener más información acerca de los idiomas admitidos para cada acción, consulte la Referencia de la API en la documentación de Amazon Comprehend.

Arquitectura

Arquitectura de aplicaciones Flask

Flask es una estructura ligera para desarrollar aplicaciones web en Python. Está diseñada para combinar el potente procesamiento de datos de Python con una interfaz de usuario web enriquecida. La aplicación Flask del patrón muestra cómo crear una aplicación web que permita a los usuarios cargar datos, enviar los datos a Amazon Comprehend para su inferencia y, a continuación, visualizar los resultados.   La aplicación tiene la estructura siguiente:

  • static— Contiene todos los archivos estáticos que admiten la interfaz de usuario web (por ejemplo JavaScript, CSS e imágenes)

  • templates – Contiene todas las páginas HTML de la aplicación

  • userData – Almacena los datos cargados por el usuario

  • application.py – El archivo de la aplicación Flask

  • comprehend_helper.py – Funciones para realizar llamadas de API a Amazon Comprehend

  • config.py – Archivo de configuración de la aplicación

  • requirements.txt – Las dependencias de Python que requiere la aplicación

El script application.py contiene la funcionalidad principal de la aplicación web, que consta de cuatro rutas de Flask. En el diagrama siguiente se muestran estas rutas de Flask.

Las cuatro rutas de Flask que componen la funcionalidad principal de la aplicación web.

  • / es la raíz de la aplicación y dirige a los usuarios a la página upload.html (almacenada en el directorio templates).

  • /saveFile es una ruta que se invoca después de que un usuario cargue un archivo. Esta ruta recibe una solicitud POST a través de un formulario HTML, que contiene el archivo cargado por el usuario. El archivo se guarda en el directorio userData y la ruta redirige a los usuarios a la ruta /dashboard.

  • /dashboard envía a los usuarios a la página dashboard.html. En el HTML de esta página, ejecuta el JavaScript código static/js/core.js que lee los datos de la /data ruta y, a continuación, crea visualizaciones para la página.

  • /data es una API de JSON que presenta los datos que se van a visualizar en el panel de control. Esta ruta lee los datos proporcionados por el usuario y utiliza las funciones en comprehend_helper.py para enviar los datos del usuario a Amazon Comprehend para el análisis de opiniones y el reconocimiento de entidades nombradas (NER). La respuesta de Amazon Comprehend se formatea y se devuelve como un objeto JSON.

Arquitectura de implementación

Diagrama de arquitectura para usar Flask y Elastic AI/ML Beanstalk para visualizar los resultados del modelo.

Consideraciones sobre el diseño

Para obtener más información sobre las consideraciones de diseño de las aplicaciones implementadas con Elastic Beanstalk Nube de AWS en el, consulte la documentación. AWS Elastic Beanstalk

Pila de tecnología

  • Amazon Comprehend

  • Elastic Beanstalk

  • Flask 

Automatización y escala

Las implementaciones de Elastic Beanstalk se configuran automáticamente con equilibradores de carga y grupos de escalado automático. Para obtener más opciones de configuración, consulte Configuración de entornos de Elastic Beanstalk en la documentación de Elastic Beanstalk.

Tools (Herramientas)

  • AWS Command Line Interface (AWS CLI) es una herramienta unificada que proporciona una interfaz coherente para interactuar con todas las partes de AWS.

  • Amazon Comprehend: utiliza el procesamiento de lenguaje natural (NLP) para extraer información sobre el contenido de los documentos, sin necesitar procesamiento especial.

  • AWS Elastic Beanstalkle ayuda a implementar y administrar aplicaciones rápidamente Nube de AWS sin tener que conocer la infraestructura en la que se ejecutan esas aplicaciones.

  • La CLI de Elastic Beanstalk (EB CLI) es una AWS Elastic Beanstalk interfaz de línea de comandos que proporciona comandos interactivos para simplificar la creación, la actualización y la supervisión de los entornos desde un repositorio local.

  • El marco de Flask hace el procesamiento de datos y las llamadas a la API mediante Python y ofrece una visualización web interactiva con Plotly.

Repositorio de código

El código de este patrón está disponible en los resultados del AI/ML modelo de GitHub Visualize mediante Flask y el repositorio. AWS Elastic Beanstalk

Epics

TareaDescripciónHabilidades requeridas

Clona el GitHub repositorio.

Extraiga el código de la aplicación de los resultados del AI/ML modelo de GitHub Visualize mediante Flask y el AWS Elastic Beanstalk repositorio ejecutando el siguiente comando:

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

nota

Asegúrese de configurar sus claves SSH con. GitHub

Desarrollador

Instale los módulos de Python.

Una vez clonado el repositorio, se crea un nuevo directorio aws-comprehend-elasticbeanstalk-for-flask local. En ese directorio, el archivo requirements.txt contiene los módulos y las versiones de Python que ejecutan la aplicación. Utilice los comandos siguientes para instalar los módulos:

cd aws-comprehend-elasticbeanstalk-for-flask

pip install -r requirements.txt

Python developer

Pruebe la aplicación localmente.

Ejecute el siguiente comando para iniciar el servidor de Flask:

python application.py

Esto devuelve información sobre el servidor en ejecución. Debería poder acceder a la aplicación si abre un navegador y visita http://localhost:5000

nota

Si ejecutas la aplicación en un AWS Cloud9 IDE, debes reemplazar el application.run() comando del application.py archivo por la siguiente línea:

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

Debe revertir este cambio antes de la implementación.

Python developer
TareaDescripciónHabilidades requeridas

Inicie la aplicación Elastic Beanstalk.

Para lanzar el proyecto como una aplicación de Elastic Beanstalk, ejecute el comando siguiente desde el directorio raíz de la aplicación:

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

importante

 

  • comprehend_flask es el nombre de la aplicación de Elastic Beanstalk y se puede cambiar según las necesidades. 

  • Puede sustituirla por Región de AWS una región de su elección. Si no especificas una región, AWS CLI se utiliza la opción de región predeterminada.

  • La aplicación se creó con la versión de Python 3.6. Es posible que se produzcan errores si utiliza otras versiones de Python.

Ejecute el comando eb init -i para obtener más opciones de configuración de implementación.

Arquitecto, desarrollador

Implemente el entorno de Elastic Beanstalk.

Ejecute el comando siguiente desde el directorio raíz de la aplicación:

eb create comprehend-flask-env

nota

comprehend-flask-env es el nombre del entorno de Elastic Beanstalk y se puede cambiar según las necesidades. El nombre solo puede contener letras, números y guiones.

Arquitecto, desarrollador

Autorice su implementación para usar Amazon Comprehend.

Si bien es posible que su aplicación se haya implementado correctamente, también debe proporcionar a su implementación acceso a Amazon Comprehend. ComprehendFullAccesses una política AWS gestionada que proporciona a la aplicación implementada permisos para realizar llamadas de API a Amazon Comprehend.

Adjunte la política ComprehendFullAccess a aws-elasticbeanstalk-ec2-role (esta función se crea automáticamente para las instancias de Amazon Elastic Compute Cloud (Amazon EC2) de la implementación) al ejecutar el comando siguiente:

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

importante

aws-elasticbeanstalk-ec2-role se crea cuando se implementa la aplicación. Debe completar el proceso de implementación antes de poder adjuntar la política AWS Identity and Access Management (IAM).

Desarrollador, arquitecto de seguridad

Visite su aplicación implementada.

Una vez que la aplicación se haya implementado correctamente, puede visitarla mediante la ejecución del comando eb open.

También puede ejecutar el comando eb status para recibir detalles sobre su implementación. La URL de la implementación aparece en CNAME.

Arquitecto, desarrollador
TareaDescripciónHabilidades requeridas

Autorice que Elastic Beanstalk acceda al nuevo modelo.

Asegúrese de que Elastic Beanstalk tenga los permisos de acceso necesarios para el nuevo modelo de punto de conexión. Por ejemplo, si utilizas un punto de conexión de Amazon SageMaker AI, tu implementación debe tener permiso para invocar el punto de conexión. 

Para obtener más información al respecto, consulte InvokeEndpointla documentación de Amazon SageMaker AI.

Desarrollador, arquitecto de seguridad

Envíe los datos del usuario a un nuevo modelo.

Para cambiar el modelo de ML subyacente en esta aplicación, debe cambiar los archivos siguientes:

  • comprehend_helper.py: Este es el script de Python que se conecta con Amazon Comprehend, procesa la respuesta y devuelve el resultado final a la aplicación. En este script, puede enrutar los datos a otro servicio de IA del Nube de AWS servidor o enviar los datos a un punto final de modelo personalizado. Es recomendable formatear también los resultados de este script para separarlos lógicamente y poder reutilizar este patrón.

  • application.py: Si cambia el nombre del script comprehend_helper.py o de las funciones, debe actualizar el script application.py de la aplicación para que refleje esos cambios.

Científico de datos

Actualice las visualizaciones del panel de control.

Por lo general, la incorporación de un nuevo modelo de ML significa que las visualizaciones deben actualizarse para reflejar los nuevos resultados. Se han realizado estos cambios en los archivos siguientes:

  • templates/dashboard.html: La aplicación prediseñada solo tiene en cuenta dos visualizaciones básicas. El diseño completo de la página se puede ajustar en este archivo.

  • static/js/core.js: Este script captura la salida formateada de la ruta /data del servidor Flask y usa Plotly para crear visualizaciones. Puede añadir o actualizar los gráficos de la página.

Desarrollador web
TareaDescripciónHabilidades requeridas

Actualice el archivo de requisitos de su solicitud.

Antes de enviar los cambios a Elastic Beanstalk, actualice el archivo requirements.txt para que refleje los nuevos módulos de Python. Para ello, ejecute el siguiente comando en el directorio raíz de la aplicación:

pip freeze > requirements.txt

Python developer

Vuelva a implementar el entorno de Elastic Beanstalk.

Para asegurarse de que los cambios en la aplicación se reflejen en la implementación de Elastic Beanstalk, navegue hasta el directorio raíz de la aplicación y ejecute el comando siguiente:

eb deploy

Esto envía la versión más reciente del código de la aplicación a la implementación de Elastic Beanstalk existente.

Administrador de sistemas, arquitecto

Resolución de problemas

ProblemaSolución

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

Si este error se produce al ejecutareb create, cree una aplicación de muestra en la consola de Elastic Beanstalk para crear el perfil de instancia predeterminado. Para obtener más información al respecto, consulte Creación de un entorno de Elastic Beanstalk en la documentación. AWS Elastic Beanstalk

Your WSGIPath refers to a file that does not exist.

Este error se produce en los registros de implementación porque Elastic Beanstalk espera que se nombre el código de Flask. application.py Si eligió un nombre diferente, ejecútelo eb config y edítelo WSGIPath como se muestra en el siguiente ejemplo de código:

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

Asegúrese de reemplazar application.py con el nombre de su archivo.

También puede aprovechar Gunicorn y un Procfile. Para obtener más información sobre este enfoque, consulte Configurar el servidor WSGI con un Procfile en la AWS Elastic Beanstalk documentación.

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

Elastic Beanstalk espera que se nombre la variable que representa la aplicación Flask. application Asegúrese de que el archivo application.py utilice application como nombre de la variable:

application = Flask(__name__)

The EB CLI cannot find your SSH key file for keyname

Utilice la CLI de EB para especificar qué par de claves usar o para crear un par de claves para las instancias Amazon EC2 de la implementación. Para resolver el error, ejecute eb init -i y una de las opciones le solicitará lo siguiente:

Do you want to set up SSH for your instances?

Responda Y para crear un par de claves o especificar un par de claves existente.

He actualizado mi código y lo he vuelto a implementar, pero mi implementación no refleja mis cambios.

Si utilizas un repositorio de Git con tu implementación, asegúrate de añadir y confirmar los cambios antes de volver a implementarlos.

Estás previsualizando la aplicación Flask desde un AWS Cloud9 IDE y te encuentras con errores.

Para obtener más información al respecto, consulte la documentación sobre cómo obtener una vista previa de las aplicaciones en ejecución en el AWS Cloud9 IDE. AWS Cloud9

Recursos relacionados

Información adicional

Uso de Amazon Comprehend para el procesamiento de lenguaje natural

Al elegir Amazon Comprehend, puede detectar entidades personalizadas en documentos de texto individuales mediante la ejecución de análisis en tiempo real o trabajos por lotes asíncronos. Amazon Comprehend también le permite entrenar modelos personalizados de reconocimiento de entidades y clasificación de texto que se pueden utilizar en tiempo real mediante la creación de un punto de conexión.

Este patrón utiliza trabajos por lotes asíncronos para detectar opiniones y entidades en un archivo de entrada que contiene varios documentos. La aplicación de ejemplo que proporciona este patrón está diseñada para que los usuarios carguen un archivo .csv que contenga una sola columna con un documento de texto por fila. El comprehend_helper.py archivo del AI/ML modelo GitHub Visualize muestra los resultados con Flask y el AWS Elastic Beanstalk repositorio lee el archivo de entrada y envía la entrada a Amazon Comprehend para su procesamiento.

BatchDetectEntities

Amazon Comprehend inspecciona el texto de un lote de documentos en busca de entidades nombradas y devuelve la entidad detectada, la ubicación, el tipo de entidad y una puntuación que indica el nivel de confianza de Amazon Comprehend. Se puede enviar un máximo de 25 documentos en una llamada de API, y cada documento tiene un tamaño inferior a 5000 bytes. Puede filtrar los resultados para mostrar solo determinadas entidades en función del caso de uso. Así, por ejemplo, puede omitir el tipo de entidad ‘quantity’ y establecer una puntuación límite para la entidad detectada (por ejemplo, 0,75). Le recomendamos que explore los resultados para su caso de uso específico antes de elegir un valor umbral. Para obtener más información al respecto, consulte BatchDetectEntitiesla documentación de Amazon Comprehend.

BatchDetectSentiment

Amazon Comprehend inspecciona un lote de documentos entrantes y devuelve la opinión predominante para cada documento (POSITIVE, NEUTRAL, MIXED o NEGATIVE). Se puede enviar un máximo de 25 documentos en una llamada de API, y cada documento tiene un tamaño inferior a 5000 bytes. Analizar la opinión es sencillo y se puede elegir aquella que tiene la puntuación más alta para que aparezca en los resultados finales. Para obtener más información al respecto, consulte BatchDetectSentimentla documentación de Amazon Comprehend.

Manejo de la configuración de Flask

Los servidores Flask utilizan una serie de variables de configuración para controlar el funcionamiento del servidor. Estas variables pueden contener el resultado de la depuración, tokens de sesión u otros ajustes de la aplicación. También puede definir variables personalizadas a las que se puede acceder mientras la aplicación se está ejecutando. Existen varios enfoques para establecer las variables de configuración.

En este patrón, la configuración se define config.py y se hereda dentro de application.py.

  • config.py contiene las variables de configuración que se configuran al iniciar la aplicación. En esta aplicación, se define una variable DEBUG para indicar a la aplicación que ejecute el servidor en modo de depuración.

    nota

    El modo de depuración no debe utilizarse cuando se ejecuta una aplicación en un entorno de producción. UPLOAD_FOLDERes una variable personalizada que se define para hacer referencia a ella más adelante en la aplicación e indicarle dónde deben almacenarse los datos de usuario cargados.

  • application.py inicia la aplicación Flask y hereda los ajustes de configuración definidos en config.py. Esto se lleva a cabo mediante el código siguiente:

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