[ad_1]
El monitoreo de las predicciones de aprendizaje automático (ML) puede ayudar a mejorar la calidad de los modelos implementados. Al capturar los datos de las inferencias realizadas en producción, puede monitorear sus modelos implementados e identificar discrepancias en la calidad del modelo. Al detectar estas desviaciones de manera temprana y proactiva, puede tomar medidas correctivas, p. B. Vuelva a entrenar los modelos, verifique los sistemas aguas arriba o solucione los problemas de calidad.
AWS Lambda es un servicio informático sin servidor capaz de ofrecer inferencia de aprendizaje automático en tiempo real a escala. En esta publicación, demostramos una función de ingesta de datos de ejemplo que se puede implementar en una carga de trabajo de inferencia de Lambda ML.
En diciembre de 2020, Lambda introdujo la compatibilidad con imágenes de contenedores como formato de empaquetado. Esta función aumentó el límite de tamaño del paquete de implementación de 500 MB a 10 GB. Antes de la introducción de esta característica, las limitaciones de tamaño del paquete dificultaban la implementación de marcos de ML como TensorFlow o PyTorch para las funciones de Lambda. Una vez introducido, el límite de tamaño de paquete aumentado hizo que ML fuera una carga de trabajo viable y atractiva para la implementación en Lambda. En 2021, la inferencia de ML fue uno de los tipos de carga de trabajo de más rápido crecimiento en el servicio Lambda.
Amazon SageMaker, el servicio de aprendizaje automático completamente administrado de Amazon, incluye su propia capacidad de monitoreo de modelos. Sin embargo, el proyecto de muestra en esta publicación muestra cómo realizar la recopilación de datos para usar en el monitoreo de modelos para clientes que usan Lambda para la inferencia de ML. El proyecto utiliza extensiones de Lambda para recopilar datos de inferencia a fin de minimizar el impacto en el rendimiento y la latencia del motor de inferencia. El uso de extensiones de Lambda también minimiza el impacto en los desarrolladores de funciones. La integración a través de una extensión permite que la capacidad de monitoreo se aplique a múltiples funciones y sea mantenida por un equipo centralizado.
Descripción general de la solución
Este proyecto contiene código fuente y archivos de soporte para una aplicación sin servidor que proporciona inferencia en tiempo real usando un modelo de respuesta a preguntas pre-entrenado basado en Distilbert. El proyecto utiliza el modelo Hugging Face Question and Answer Natural Language Processing (NLP) con PyTorch para realizar tareas de inferencia de lenguaje natural. El proyecto también incluye una solución para realizar la recopilación de datos de inferencia para las predicciones del modelo. El escritor de funciones de Lambda puede determinar exactamente qué datos enviar a la extensión desde la entrada de la solicitud de inferencia y el resultado de la predicción. En esta solución enviamos la entrada y la respuesta del modelo a la extensión. Luego, la extensión envía periódicamente los datos a un depósito de Amazon Simple Storage Service (Amazon S3). Construimos la extensión de recopilación de datos como una imagen de contenedor utilizando un makefile
. Luego, creamos la función de inferencia Lambda como una imagen de contenedor y agregamos la imagen de contenedor de extensión como una capa de imagen de contenedor. El siguiente diagrama muestra una descripción general de la arquitectura.
Las extensiones de Lambda son una forma de ampliar las funciones de Lambda. En este proyecto, usamos una extensión Lambda externa para registrar la solicitud de inferencia y la predicción de la inferencia. La extensión externa se ejecuta como un proceso separado en el tiempo de ejecución de Lambda, lo que reduce el impacto en el motor de inferencia. Sin embargo, la función comparte recursos como CPU, memoria y almacenamiento con la función Lambda. Recomendamos asignar suficiente memoria a la función Lambda para garantizar una disponibilidad óptima de los recursos. (En nuestras pruebas, asignamos 5 GB de memoria a la función lambda de inferencia y encontramos una disponibilidad de recursos y una latencia de inferencia óptimas). Cuando se completa una inferencia, el servicio de Lambda devuelve la respuesta de inmediato y no espera a que la extensión termine de registrar la solicitud y la respuesta en el depósito de S3. Con este patrón, la extensión de monitoreo no afecta la latencia de inferencia. Para obtener más información sobre las extensiones de Lambda, vea esta serie de videos.
contenido del proyecto
Este proyecto utiliza la interfaz de línea de comandos (CLI) del Modelo de aplicación sin servidor de AWS (AWS SAM). Esta herramienta de línea de comandos permite a los desarrolladores inicializar y configurar aplicaciones; empaquetar, construir y probar localmente; e implementar en la nube de AWS.
Puede descargar el código fuente de este proyecto desde el repositorio de GitHub.
Este proyecto contiene los siguientes archivos y carpetas:
- aplicación/aplicación.py – Código para la función Lambda de la aplicación, incluido el código para las inferencias de ML.
- Aplicación/Dockerfile – El Dockerfile para crear la imagen del contenedor que empaqueta la función de inferencia, el modelo descargado de Hugging Face y la extensión Lambda en capas. A diferencia de las funciones .zip, las capas no se pueden adjuntar a las funciones de Lambda empaquetadas en contenedores en el momento de la creación de la función. En su lugar, creamos la capa y copiamos su contenido en la imagen del contenedor.
- extensiones – Los archivos de extensión del monitor modelo. Esta extensión de Lambda se usa para registrar la entrada en la función de inferencia y la predicción correspondiente en un depósito de S3.
- aplicación/modelo – El modelo descargado de Hugging Face.
- aplicación/requisitos.txt – Las dependencias de Python que se instalarán en el contenedor.
- eventos – Eventos de invocación que puede utilizar para probar la función.
- plantilla.yaml – Un archivo descriptor que define los recursos de AWS de la aplicación.
La aplicación utiliza varios recursos de AWS, incluidas las funciones de Lambda y una API de Amazon API Gateway. Estos recursos están definidos en el template.yaml
archivo en este proyecto. Puede actualizar la plantilla para agregar recursos de AWS a través del mismo proceso de aprovisionamiento que actualiza el código de su aplicación.
requisitos
Para este tutorial, debe cumplir con los siguientes requisitos previos:
Implementar la aplicación de muestra
Complete los siguientes pasos para crear su aplicación por primera vez:
- Ejecute el siguiente código en su shell. (Esto también creará la extensión):
- Cree una imagen de Docker de la aplicación de visualización de modelos. El contenido de la compilación está en el
.aws-sam
directorio
- Cree un repositorio en Amazon ECR:
aws ecr create-repository
repository-name serverless-ml-model-monitor
--image-scanning-configuration scanOnPush=true
--region us-east-1
- Envíe la imagen del contenedor a Amazon ECR:
- Descomente la línea n.° 1 en Aplicación/Dockerfile y edítelo para que apunte a la imagen de repositorio de ECR correcta, luego comente las líneas 6 y 7 Aplicación/Dockerfile:
- Reconstruya la aplicación:
Estamos compilando nuevamente porque Lambda no es compatible directamente con las capas de Lambda para el tipo de paquete de imagen de contenedor. Primero debemos crear el componente del monitor del modelo como una imagen de contenedor, cargarlo en Amazon ECR y luego usar esta imagen como la capa del contenedor en la aplicación del monitor del modelo.
- Finalmente, implemente la función de Lambda, la puerta de enlace API y la extensión:
Este comando empaqueta e implementa su aplicación en AWS con una serie de indicaciones:
- nombre del lote : el nombre de la pila de AWS CloudFormation implementada. Esto debe ser exclusivo de su cuenta y región, y un buen lugar para comenzar sería algo que coincida con el nombre de su proyecto.
- Región de AWS : la región de AWS en la que está implementando su aplicación.
- Confirmar cambios antes de la implementación : cuando se establece en
yes
, verá todos los conjuntos de cambios antes de ejecutarlos para su revisión manual. Si se establece en no, la CLI de AWS SAM implementa automáticamente los cambios de la aplicación. - Permitir la creación de roles de IAM de la CLI de AWS SAM Nota: muchas plantillas de AWS SAM, incluido este ejemplo, crean roles de AWS Identity and Access Management (IAM) que las funciones de Lambda incluidas requieren para acceder a los servicios de AWS. De forma predeterminada, estos están limitados a los permisos mínimos requeridos. Para implementar una pila de CloudFormation que cree o modifique roles de IAM, el
CAPABILITY_IAM
valor porcapabilities
debe ser provisto. Si no se proporciona el permiso a través de este aviso, debe pasarlo explícitamente para implementar esta muestra--capabilities CAPABILITY_IAM
haciasam deploy
Dominio. - Almacenar argumentos en samconfig.toml : cuando se establece en
yes
sus elecciones se guardan en un archivo de configuración dentro del proyecto para que pueda ejecutarlas fácilmente en el futurosam deploy
sin parámetros para implementar cambios en su aplicación.
Puede encontrar su URL de punto final de API Gateway en los valores de salida que se muestran después de la implementación.
Probar la aplicación
Para probar la aplicación, use Postman o curl para enviar una solicitud al extremo de API Gateway. Por ejemplo:
Debería ver una salida como el siguiente código. El modelo ML infirió del contexto y devolvió la respuesta a nuestra pregunta.
Después de unos minutos, debería ver un archivo en el depósito S3 nlp-qamodel-model-monitoring-modelmonitorbucket-<xxxxxx>
con la entrada y la inferencia registrada.
Limpiar
Para eliminar la aplicación de muestra que creó, utilice la CLI de AWS:
Conclusión
En esta publicación, implementamos una función de monitor de modelo como una extensión de Lambda y la implementamos en una carga de trabajo de inferencia de Lambda ML. Mostramos cómo crear e implementar esta solución en su propia cuenta de AWS. Finalmente, mostramos cómo ejecutar una prueba para verificar la funcionalidad del monitor.
Por favor proporcione sus pensamientos o preguntas en la sección de comentarios. Para obtener más recursos de aprendizaje sin servidor, consulte Serverless Land.
Sobre los autores
Dan Fuchs es Arquitecto Principal de Soluciones Especializadas en la Organización Mundial de Especialistas en Serverless. Dan trabaja con los clientes para ayudarlos a aprovechar los servicios sin servidor para crear aplicaciones escalables, tolerantes a fallas, de alto rendimiento y rentables. Dan está agradecido de poder vivir y trabajar en la hermosa Boulder, Colorado.
Newton jainista es gerente sénior de productos responsable de crear nuevas experiencias para clientes de aprendizaje automático, computación de alto rendimiento (HPC) y procesamiento de medios en AWS Lambda. Dirige el desarrollo de nuevas funciones para aumentar el rendimiento, reducir la latencia, mejorar la escalabilidad, aumentar la confiabilidad y reducir los costos. También ayuda a los clientes de AWS a definir una estrategia sin servidor efectiva para sus aplicaciones de computación intensiva.
Diksha Sharma es arquitecto de soluciones y especialista en aprendizaje automático en AWS. Ayuda a los clientes a acelerar su adopción de la nube, especialmente en las áreas de aprendizaje automático y tecnologías sin servidor. Diksha proporciona pruebas de concepto personalizadas que muestran a los clientes el valor de AWS para resolver sus desafíos comerciales y de TI. Comparte su conocimiento de AWS con los clientes y trabaja con ellos para crear la solución deseada.
veda raman es un arquitecto de soluciones especializado sénior en aprendizaje automático con sede en Maryland. Veda trabaja con los clientes para ayudarlos a crear aplicaciones de aprendizaje automático eficientes, seguras y escalables. Veda está interesado en ayudar a los clientes a aprovechar las tecnologías de aprendizaje automático sin servidor.
jose khan es el líder mundial en tecnología para Serverless y Arquitecto Principal de Soluciones. Dirige una comunidad global de expertos sin servidor en AWS que ayudan a clientes de todos los tamaños, desde nuevas empresas hasta las empresas más grandes del mundo, a utilizar de manera eficaz las tecnologías sin servidor de AWS.
[ad_2]