Cree aplicaciones Streamlit en Amazon SageMaker Studio

Desarrollar interfaces web para interactuar con un modelo de aprendizaje automático (ML) es una tarea tediosa. Con Streamlites fácil desarrollar aplicaciones de demostración para su solución ML. Streamlit es una biblioteca Python de código abierto que facilita la creación y el intercambio de aplicaciones web para ML y ciencia de datos. Como científico de datos, es posible que desee presentar sus resultados para un conjunto de datos o implementar un modelo entrenado. Las aplicaciones Streamlit son útiles para presentar el progreso del proyecto a su equipo, obtener y compartir información con sus gerentes e incluso recibir comentarios de los clientes.

Con el entorno de desarrollo integrado (IDE) de Amazon SageMaker Studio con Jupyter Lab 3, podemos crear, ejecutar y ofrecer aplicaciones web Streamlit desde este mismo entorno con fines de desarrollo. Este artículo explica cómo crear y alojar aplicaciones Streamlit en Studio de forma segura y repetible sin ningún tedioso desarrollo de front-end. Por ejemplo, usamos una demostración personalizada de Amazon Rekognition, que anotará y etiquetará una imagen cargada. Esto servirá como punto de partida y se puede generalizar para demostrar cualquier modelo de ML personalizado. El código de este blog se puede encontrar en este repositorio GitHub.

Descripción general de la solución

Aquí está el diagrama de arquitectura de nuestra solución.

Un usuario accede primero a Studio a través del navegador. El servidor de Jupyter asociado con el perfil de usuario se ejecuta en la instancia de Amazon Elastic Compute Cloud (Amazon EC2) Studio. La instancia de Studio EC2 contiene el código de muestra y la lista de dependencias. El usuario puede ejecutar la aplicación Streamlit, app.py, en la terminal del sistema. Studio ejecuta la interfaz de usuario de JupyterLab en un servidor Jupyter, desacoplado de los núcleos de los portátiles. El servidor Jupyter viene con un proxy y nos permite acceder a nuestra aplicación Streamlit. Una vez que la aplicación se está ejecutando, el usuario puede iniciar una sesión separada a través del proxy de AWS Jupyter ajustando la URL.

Desde una perspectiva de seguridad, el proxy de AWS Jupyter se amplía mediante la autenticación de AWS. Siempre que un usuario tenga acceso a la cuenta de AWS, el ID de dominio de Studio y el perfil de usuario, puede acceder al enlace.

Cree Studio usando JupyterLab 3.0

Studio con JupyterLab 3 debe estar instalado para que esta solución funcione. Es posible que las versiones anteriores no admitan las funciones descritas en este artículo. Para obtener más información, consulte Amazon SageMaker Studio y SageMaker Notebook Instance ahora se envían con notebooks JupyterLab 3 para aumentar la productividad de los desarrolladores. De manera predeterminada, Studio viene con JupyterLab 3. Debe verificar la versión y cambiarla si está ejecutando una versión anterior. Para obtener más información, consulte Administración de versiones de JupyterLab.

Puede configurar Studio con el kit de desarrollo de la nube de AWS (AWS CDK); para obtener más información, consulte Configuración de Amazon SageMaker Studio con Jupyter Lab 3 mediante AWS CDK. También puede usar la consola de SageMaker para modificar la configuración del dominio. Realice los siguientes pasos:

  1. En la consola de SageMaker, elija Áreas en el panel de navegación.
  2. Seleccione su dominio y elija Editar.

  1. Para Versión predeterminada de Jupyter Labasegúrese de que la versión esté configurada en Laboratorio Jupyter 3.0.

(Opcional) Crea un espacio compartido

Podemos usar la consola de SageMaker o la CLI de AWS para agregar soporte para espacios compartidos a un dominio existente siguiendo los pasos en la documentación o este blog. Crear un espacio compartido en AWS tiene los siguientes beneficios:

  1. Colaboración: un espacio compartido permite que varios usuarios o equipos colaboren en un proyecto o conjunto de recursos, sin tener que duplicar datos o infraestructura.
  2. Ahorro de costos: en lugar de que cada usuario o equipo cree y administre sus propios recursos, un espacio compartido puede ser más rentable porque los recursos se pueden agrupar y compartir entre varios usuarios.
  3. Gestión simplificada: con un espacio compartido, los administradores pueden gestionar los recursos de forma centralizada, en lugar de tener que gestionar varias instancias de los mismos recursos para cada usuario o equipo.
  4. Escalabilidad mejorada: un espacio compartido se puede expandir o contraer más fácilmente para satisfacer las demandas cambiantes porque los recursos se pueden asignar dinámicamente para satisfacer las necesidades de diferentes usuarios o equipos.
  5. Seguridad mejorada: al centralizar los recursos en un espacio compartido, la seguridad se puede mejorar ya que los controles de acceso y el monitoreo se pueden aplicar de manera más fácil y consistente.

Instale dependencias y clone el ejemplo en Studio

Luego lanzamos Studio y abrimos la terminal del sistema. Usamos el IDE de SageMaker para clonar nuestro ejemplo y el terminal del sistema para iniciar nuestra aplicación. El código de este blog se puede encontrar en este repositorio GitHub. Empezamos clonando el repositorio:

Luego abrimos la terminal del sistema.

Una vez clonado, en la terminal del sistema, instale las dependencias para ejecutar nuestro código de muestra ejecutando el siguiente comando. Esto primero instalará las dependencias ejecutando pip install --no-cache-dir -r requirements.txt. EL no-cache-dir bandera deshabilitará el almacenamiento en caché. El almacenamiento en caché se utiliza para almacenar archivos de instalación (.whl) de los módulos que instalas a través de pip. También almacena archivos fuente (.tar.gz) para evitar volver a descargarlos cuando no hayan caducado. S’il n’y a pas d’espace sur notre disque dur ou si nous voulons garder une image Docker aussi petite que possible, nous pouvons utiliser cet indicateur pour que la commande s’exécute jusqu’à la fin avec une utilisation minimale de la memoria. Entonces el script instalará los paquetes. iproute Y jq que se utilizará en el siguiente paso.
sh setup.sh

Ejecute la demostración de Streamlit y cree un enlace para compartir

Para verificar que todas las dependencias estén instaladas correctamente y para ver la demostración de Amazon Rekognition, ejecute el siguiente comando:

Se mostrará el número de puerto que aloja la aplicación.

Tenga en cuenta que durante el desarrollo, puede ser útil reiniciar automáticamente el script cuando app.py se cambia en el disco. Para hacer esto, podemos modificar el runOnSave opciones de configuración agregando el --server.runOnSave true bandera a nuestro mando:

streamlit run app.py --server.runOnSave true

La siguiente captura de pantalla muestra un ejemplo de lo que debería mostrarse en el terminal.

En el ejemplo anterior, vemos el número de puerto, la identificación del dominio y la URL del estudio donde estamos ejecutando nuestra aplicación. Finalmente, podemos ver la URL que necesitamos usar para acceder a nuestra aplicación streamlit. Este script cambia la URL de Studio, reemplazando lab? con proxy/[PORT NUMBER]/ . Aparecerá la demostración de detección de objetos de Rekognition, como se muestra en la siguiente captura de pantalla.

Ahora que la aplicación Streamlit está funcionando, podemos compartir esta URL con cualquier persona que tenga acceso a este ID de dominio y perfil de usuario de Studio. Para que sea más fácil compartir estas demostraciones, podemos verificar el estado y enumerar todas las aplicaciones streamlit en ejecución ejecutando el siguiente comando: sh status.sh

Podemos usar scripts de ciclo de vida o espacios compartidos para extender este trabajo. En lugar de ejecutar secuencias de comandos de shell e instalar dependencias manualmente, utilice secuencias de comandos de ciclo de vida para agilizar este proceso. Para desarrollar y ampliar esta aplicación con un equipo y compartir paneles con compañeros, utilice espacios compartidos. Al crear espacios compartidos en Studio, los usuarios pueden colaborar en el espacio compartido para desarrollar una aplicación Streamlit en tiempo real. Todos los recursos en un espacio compartido se filtran y etiquetan, lo que facilita concentrarse en los proyectos de ML y administrar los costos. Consulte el siguiente código para crear sus propias aplicaciones en Studio.

Limpiar

Una vez que hayamos terminado de usar la aplicación, queremos liberar los puertos de escucha. Para obtener todos los procesos en ejecución y liberarlos, podemos ejecutar nuestro script de limpieza: sh cleanup.sh

Conclusión

En este artículo, mostramos un ejemplo completo del alojamiento de una demostración de Streamlit para un trabajo de detección de objetos mediante Amazon Rekognition. Hemos detallado las motivaciones para crear aplicaciones web rápidas, las consideraciones de seguridad y los requisitos del sistema para ejecutar nuestra propia aplicación Streamlit en Studio. Finalmente, cambiamos el patrón de URL en nuestro navegador web para iniciar una sesión separada a través del proxy AWS Jupyter.

Esta demostración le permite cargar cualquier imagen y ver los resultados de Amazon Rekognition. Los resultados también se procesan y puede descargar un archivo CSV con todos los cuadros delimitadores a través de la aplicación. Puede ampliar este trabajo para anotar y etiquetar su propio conjunto de datos, o modificar el código para mostrar su modelo personalizado.


Sobre los autores

Dipika Khullar es ingeniero de aprendizaje automático en el laboratorio de soluciones de aprendizaje automático de Amazon. Ayuda a los clientes a integrar soluciones de ML para resolver sus problemas comerciales. Más recientemente, ha creado canalizaciones de capacitación e inferencia para clientes de medios y modelos predictivos para marketing.

marcelo aberle es un ingeniero de ML en la organización de IA de AWS. Dirige los esfuerzos de MLOps en Amazon ML Solutions Lab, ayudando a los clientes a diseñar e implementar sistemas de ML escalables. Su misión es guiar a los clientes a través de su viaje de ML empresarial y acelerar su viaje de ML a producción.

yash shah es gerente científico en el laboratorio Amazon ML Solutions. Él y su equipo de científicos aplicados e ingenieros de ML trabajan en una variedad de casos de uso de ML en atención médica, deportes, automoción y fabricación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *