Logotipo de Zephyrnet

Cree una solución centralizada de monitoreo y generación de informes para Amazon SageMaker con Amazon CloudWatch | Servicios web de Amazon

Fecha:

Amazon SageMaker es una plataforma de aprendizaje automático (ML) completamente administrada que ofrece un conjunto integral de servicios que sirven cargas de trabajo de ML de extremo a extremo. Como recomendado por AWS como práctica recomendada, los clientes han usado cuentas separadas para simplificar la administración de políticas para los usuarios y aislar los recursos por cargas de trabajo y cuentas. Sin embargo, cuando más usuarios y equipos usan la plataforma de ML en la nube, monitorear las grandes cargas de trabajo de ML en un entorno escalable de múltiples cuentas se vuelve más desafiante. Para una mejor observabilidad, los clientes buscan soluciones para monitorear el uso de recursos entre cuentas y realizar un seguimiento de las actividades, como el inicio del trabajo y el estado de ejecución, que es esencial para sus requisitos de administración y gobierno de ML.

Los servicios de SageMaker, como Procesamiento, Capacitación y Alojamiento, recopilan métricas y registros de las instancias en ejecución y los envían a los usuarios. Reloj en la nube de Amazon cuentas Para ver los detalles de estos trabajos en diferentes cuentas, debe iniciar sesión en cada cuenta, buscar los trabajos correspondientes y ver el estado. No hay un solo panel de vidrio que pueda mostrar fácilmente esta información de múltiples cuentas y trabajos. Además, el equipo de administración de la nube debe brindar acceso a las personas a diferentes cuentas de carga de trabajo de SageMaker, lo que agrega una sobrecarga de administración adicional para el equipo de la plataforma de la nube.

En esta publicación, presentamos un tablero de observabilidad entre cuentas que proporciona una vista centralizada para monitorear las actividades y los recursos de los usuarios de SageMaker en varias cuentas. Permite a los usuarios finales y al equipo de administración de la nube monitorear de manera eficiente qué cargas de trabajo de ML se están ejecutando, ver el estado de estas cargas de trabajo y rastrear diferentes actividades de la cuenta en ciertos momentos. Con este tablero, no necesita navegar desde la consola de SageMaker y hacer clic en cada trabajo para encontrar los detalles de los registros de trabajo. En su lugar, puede ver fácilmente los trabajos en ejecución y el estado del trabajo, solucionar problemas de trabajo y configurar alertas cuando se identifiquen problemas en cuentas compartidas, como fallas de trabajo, recursos infrautilizados y más. También puede controlar el acceso a este panel de monitoreo centralizado o compartir el panel con las autoridades pertinentes para los requisitos de auditoría y gestión.

Resumen de la solución

Esta solución está diseñada para habilitar el monitoreo centralizado de trabajos y actividades de SageMaker en un entorno de múltiples cuentas. La solución está diseñada para no depender de Organizaciones de AWS, pero se puede adoptar fácilmente en una Organización o Torre de control de AWS ambiente. Esta solución puede ayudar al equipo de operaciones a tener una vista de alto nivel de todas las cargas de trabajo de SageMaker distribuidas en varias cuentas de carga de trabajo desde un único panel. También tiene una opción para habilitar Observabilidad entre cuentas de CloudWatch en las cuentas de carga de trabajo de SageMaker para proporcionar acceso a telemetrías de monitoreo, como métricas, registros y seguimientos desde la cuenta de monitoreo centralizada. En la siguiente captura de pantalla se muestra un tablero de ejemplo.

El siguiente diagrama muestra la arquitectura de esta solución de tablero centralizado.

SageMaker tiene integración nativa con el Puente de eventos de Amazon, que supervisa los eventos de cambio de estado en SageMaker. EventBridge le permite automatizar SageMaker y responder automáticamente a eventos como un cambio de estado del trabajo de capacitación o un cambio de estado de punto final. Los eventos de SageMaker se envían a EventBridge casi en tiempo real. Para obtener más información sobre los eventos de SageMaker supervisados ​​por EventBridge, consulte Automatización de Amazon SageMaker con Amazon EventBridge. Además de los eventos nativos de SageMaker, Seguimiento de la nube de AWS publica eventos cuando realiza llamadas a la API, que también transmite a EventBridge para que pueda ser utilizado por muchos casos de uso de monitoreo o automatización posteriores. En nuestra solución, usamos las reglas de EventBridge en las cuentas de carga de trabajo para transmitir eventos de servicio de SageMaker y eventos de API al bus de eventos de la cuenta de monitoreo para un monitoreo centralizado.

En la cuenta de monitoreo centralizada, los eventos son capturados por una regla de EventBridge y luego procesados ​​en diferentes objetivos:

  • Un grupo de registro de CloudWatch, para usar para lo siguiente:
    • Finalidades de auditoría y archivo. Para obtener más información, consulte el Guía del usuario de registros de Amazon CloudWatch.
    • Análisis de datos de registro con Información de registro de CloudWatch consultas CloudWatch Logs Insights le permite buscar y analizar de forma interactiva sus datos de registro en CloudWatch Logs. Puede realizar consultas para ayudarlo a responder de manera más eficiente y efectiva a los problemas operativos. Si se produce un problema, puede utilizar CloudWatch Logs Insights para identificar posibles causas y validar las correcciones implementadas.
    • Compatibilidad con el widget de consulta de CloudWatch Metrics Insights para operaciones de alto nivel en el panel de CloudWatch, agregando CloudWatch Insights Query a los paneles y exportando los resultados de la consulta.
  • An AWS Lambda para completar las siguientes tareas:
    • Realice una lógica personalizada para aumentar los eventos de servicio de SageMaker. Un ejemplo es realizar una consulta de métricas en las métricas de utilización del host de trabajo de SageMaker cuando se recibe un evento de finalización de trabajo.
    • Convierta la información de eventos en métricas en ciertos formatos de registro tan ingeridos como EMF registros Para obtener más información, consulte Incrustación de métricas dentro de los registros.

El ejemplo en esta publicación es compatible con el nativo Observabilidad entre cuentas de CloudWatch característica para lograr métricas, registros y acceso de rastreo entre cuentas. Como se muestra en la parte inferior del diagrama de la arquitectura, se integra con esta función para habilitar métricas y registros entre cuentas. Para habilitar esto, se deben crear los permisos y recursos necesarios tanto en las cuentas de supervisión como en las cuentas de carga de trabajo de origen.

Puede utilizar esta solución para cuentas de AWS administradas por Organizaciones o cuentas independientes. Las siguientes secciones explican los pasos para cada escenario. Tenga en cuenta que dentro de cada escenario, los pasos se realizan en diferentes cuentas de AWS. Para su comodidad, el tipo de cuenta para realizar el paso se destaca al principio de cada paso.

Requisitos previos

Antes de iniciar este procedimiento, clone nuestro código fuente desde el Repositorio GitHub en su entorno local o Nube de AWS9. Además, necesitas lo siguiente:

Implementar la solución en un entorno Organizaciones

Si la cuenta de supervisión y todas las cuentas de carga de trabajo de SageMaker están todas en la misma organización, la infraestructura requerida en las cuentas de carga de trabajo de origen se crea automáticamente a través de un Formación en la nube de AWS StackSet de la cuenta maestra de la organización. Por lo tanto, no se requiere una implementación de infraestructura manual en las cuentas de carga de trabajo de origen. Cuando se crea una nueva cuenta o se mueve una cuenta existente a una unidad organizativa (OU) de destino, la pila de infraestructura de carga de trabajo de origen se implementará automáticamente y se incluirá en el alcance de la supervisión centralizada.

Configurar los recursos de la cuenta de supervisión

Necesitamos recopilar la siguiente información de la cuenta de AWS para configurar los recursos de la cuenta de monitoreo, que usamos como entradas para el script de configuración más adelante.

Entrada Descripción Ejemplo
Región de origen La región donde se ejecutan las cargas de trabajo. ap-southeast-2
Nombre de perfil de la CLI de AWS de la cuenta de supervisión Puede encontrar el nombre del perfil en ~/.aws/config. Esto es opcional. Si no se proporciona, utiliza las credenciales de AWS predeterminadas de la cadena. .
Ruta de unidad organizativa de carga de trabajo de SageMaker La ruta de la unidad organizativa que tiene las cuentas de carga de trabajo de SageMaker. Mantener el / al final del camino. o-1a2b3c4d5e/r-saaa/ou-saaa-1a2b3c4d/

Para recuperar la ruta de la unidad organizativa, puede ir a la consola Organizaciones y, en Cuentas de AWS, busque la información para construir la ruta de la unidad organizativa. Para el siguiente ejemplo, la ruta de la unidad organizativa correspondiente es o-ye3wn3kyh6/r-taql/ou-taql-wu7296by/.

Después de recuperar esta información, ejecute el siguiente comando para implementar los recursos necesarios en la cuenta de supervisión:

./scripts/organization-deployment/deploy-monitoring-account.sh

Puede obtener los siguientes resultados de la implementación. Tome nota de los resultados que usará en el siguiente paso cuando implemente la pila de cuentas maestras.

Configurar los recursos de la cuenta maestra

Necesitamos recopilar la siguiente información de la cuenta de AWS para configurar los recursos de la cuenta de administración, que usamos como entradas para el script de configuración más adelante.

Entrada Descripción Ejemplo
Región de origen La región donde se ejecutan las cargas de trabajo. Esto debería ser lo mismo que la pila de monitoreo. ap-southeast-2
Nombre de perfil de la AWS CLI de la cuenta maestra Puede encontrar el nombre del perfil en ~/.aws/config. Esto es opcional. Si no se proporciona, utiliza las credenciales de AWS predeterminadas de la cadena. .
ID de unidad organizativa de carga de trabajo de SageMaker Aquí usamos solo el ID de la unidad organizativa, no la ruta. ou-saaa-1a2b3c4d
ID de la cuenta de supervisión El ID de la cuenta en la que se implementa la pila de supervisión. .
Nombre del rol de la cuenta de supervisión La salida para MonitoringAccountRoleName del paso anterior. .
ARN del bus de eventos de la cuenta de supervisión La salida para MonitoringAccountEventbusARN del paso anterior. .
Identificador de sumidero de cuenta de supervisión La salida de MonitoringAccountSinkIdentifier del paso anterior. .

Puede implementar los recursos de la cuenta maestra ejecutando el siguiente comando:

./scripts/organization-deployment/deploy-management-account.sh

Implementar la solución en un entorno que no sea de Organizaciones

Si su entorno no usa Organizaciones, la pila de infraestructura de la cuenta de supervisión se implementa de manera similar pero con algunos cambios. Sin embargo, la pila de infraestructura de carga de trabajo debe implementarse manualmente en cada cuenta de carga de trabajo. Por lo tanto, este método es adecuado para un entorno con un número limitado de cuentas. Para un entorno grande, se recomienda considerar el uso de Organizaciones.

Configurar los recursos de la cuenta de supervisión

Necesitamos recopilar la siguiente información de la cuenta de AWS para configurar los recursos de la cuenta de monitoreo, que usamos como entradas para el script de configuración más adelante.

Entrada Descripción Ejemplo
Región de origen La región donde se ejecutan las cargas de trabajo. ap-southeast-2
Lista de cuentas de carga de trabajo de SageMaker Una lista de cuentas que ejecutan la carga de trabajo de SageMaker y transmiten eventos a la cuenta de supervisión, separadas por comas. 111111111111,222222222222
Nombre de perfil de la CLI de AWS de la cuenta de supervisión Puede encontrar el nombre del perfil en ~/.aws/config. Esto es opcional. Si no se proporciona, utiliza las credenciales de AWS predeterminadas de la cadena. .

Podemos implementar los recursos de la cuenta de supervisión ejecutando el siguiente comando después de recopilar la información necesaria:

./scripts/individual-deployment/deploy-monitoring-account.sh

Obtenemos los siguientes resultados cuando se completa la implementación. Tome nota de los resultados que usará en el siguiente paso cuando implemente la pila de cuentas maestras.

Configurar la infraestructura de supervisión de la cuenta de carga de trabajo

Necesitamos recopilar la siguiente información de la cuenta de AWS para configurar la infraestructura de monitoreo de la cuenta de carga de trabajo, que usamos como entradas para el script de configuración más adelante.

Entrada Descripción Ejemplo
Región de origen La región donde se ejecutan las cargas de trabajo. Esto debería ser lo mismo que la pila de monitoreo. ap-southeast-2
ID de la cuenta de supervisión El ID de la cuenta en la que se implementa la pila de supervisión. .
Nombre del rol de la cuenta de supervisión La salida para MonitoringAccountRoleName del paso anterior. .
ARN del bus de eventos de la cuenta de supervisión La salida para MonitoringAccountEventbusARN del paso anterior. .
Identificador de sumidero de cuenta de supervisión La salida de MonitoringAccountSinkIdentifier del paso anterior. .
Cuenta de carga de trabajo Nombre de perfil de AWS CLI Puede encontrar el nombre del perfil en ~/.aws/config. Esto es opcional. Si no se proporciona, utiliza las credenciales de AWS predeterminadas de la cadena. .

Podemos implementar los recursos de la cuenta de monitoreo ejecutando el siguiente comando:

./scripts/individual-deployment/deploy-workload-account.sh

Visualice las tareas de ML en el panel de CloudWatch

Para verificar si la solución funciona, debemos ejecutar varios trabajos de procesamiento de SageMaker y trabajos de capacitación de SageMaker en las cuentas de carga de trabajo que usamos en las secciones anteriores. El panel de CloudWatch se puede personalizar en función de sus propios escenarios. Nuestro panel de muestra consta de widgets para visualizar los trabajos de procesamiento de SageMaker y los trabajos de capacitación de SageMaker. Todos los trabajos para monitorear cuentas de carga de trabajo se muestran en este tablero. En cada tipo de trabajo, mostramos tres widgets, que son el número total de trabajos, el número de trabajos fallidos y los detalles de cada trabajo. En nuestro ejemplo, tenemos dos cuentas de carga de trabajo. A través de este tablero, podemos encontrar fácilmente que una cuenta de carga de trabajo tiene trabajos de procesamiento y trabajos de capacitación, y otra cuenta de carga de trabajo solo tiene trabajos de capacitación. Al igual que con las funciones que usamos en CloudWatch, podemos establecer el intervalo de actualización, especificar el tipo de gráfico y acercar o alejar, o podemos ejecutar acciones como descargar registros en un archivo CSV.

Personaliza tu panel

La solución provista en el repositorio de GitHub incluye tanto el trabajo de SageMaker Training como el monitoreo del trabajo de SageMaker Processing. Si desea agregar más paneles para supervisar otros trabajos de SageMaker, como trabajos de transformación por lotes, puede seguir las instrucciones de esta sección para personalizar su panel. Al modificar el archivo index.py, puede personalizar los campos que desea mostrar en el tablero. Puede acceder a todos los detalles capturados por CloudWatch a través de EventBridge. En la función Lambda, puede elegir los campos necesarios que desea mostrar en el tablero. Ver el siguiente código:

@metric_scope
def lambda_handler(event, context, metrics): try: event_type = None try: event_type = SAGEMAKER_STAGE_CHANGE_EVENT(event["detail-type"]) except ValueError as e: print("Unexpected event received") if event_type: account = event["account"] detail = event["detail"] job_detail = { "DashboardQuery": "True" } job_detail["Account"] = account job_detail["JobType"] = event_type.name metrics.set_dimensions({"account": account, "jobType": event_type.name}, use_default=False) metrics.set_property("JobType", event_type.value) if event_type == SAGEMAKER_STAGE_CHANGE_EVENT.PROCESSING_JOB: job_status = detail.get("ProcessingJobStatus") metrics.set_property("JobName", detail.get("ProcessingJobName")) metrics.set_property("ProcessingJobArn", detail.get("ProcessingJobArn")) job_detail["JobName"] = detail.get("ProcessingJobName") job_detail["ProcessingJobArn"] = detail.get("ProcessingJobArn") job_detail["Status"] = job_status job_detail["StartTime"] = detail.get("ProcessingStartTime") job_detail["InstanceType"] = detail.get("ProcessingResources").get("ClusterConfig").get("InstanceType") job_detail["InstanceCount"] = detail.get("ProcessingResources").get("ClusterConfig").get("InstanceCount") if detail.get("FailureReason"):

Para personalizar el tablero o los widgets, puede modificar el código fuente en el archivo de monitorización-cuenta-infra-stack.ts. Tenga en cuenta que los nombres de campo que utilice en este archivo deben ser los mismos (las claves de  job_detail) definido en el archivo Lambda:

 // CloudWatch Dashboard const sagemakerMonitoringDashboard = new cloudwatch.Dashboard( this, 'sagemakerMonitoringDashboard', { dashboardName: Parameters.DASHBOARD_NAME, widgets: [] } ) // Processing Job const processingJobCountWidget = new cloudwatch.GraphWidget({ title: "Total Processing Job Count", stacked: false, width: 12, height: 6, left:[ new cloudwatch.MathExpression({ expression: `SEARCH('{${AWS_EMF_NAMESPACE},account,jobType} jobType="PROCESSING_JOB" MetricName="ProcessingJobCount_Total"', 'Sum', 300)`, searchRegion: this.region, label: "${PROP('Dim.account')}", }) ] }); processingJobCountWidget.position(0,0) const processingJobFailedWidget = new cloudwatch.GraphWidget({ title: "Failed Processing Job Count", stacked: false, width: 12, height:6, right:[ new cloudwatch.MathExpression({ expression: `SEARCH('{${AWS_EMF_NAMESPACE},account,jobType} jobType="PROCESSING_JOB" MetricName="ProcessingJobCount_Failed"', 'Sum', 300)`, searchRegion: this.region, label: "${PROP('Dim.account')}", }) ] }) processingJobFailedWidget.position(12,0) const processingJobInsightsQueryWidget = new cloudwatch.LogQueryWidget( { title: 'SageMaker Processing Job History', logGroupNames: [ingesterLambda.logGroup.logGroupName], view: cloudwatch.LogQueryVisualizationType.TABLE, queryLines: [ 'sort @timestamp desc', 'filter DashboardQuery == "True"', 'filter JobType == "PROCESSING_JOB"', 'fields Account, JobName, Status, Duration, InstanceCount, InstanceType, Host, fromMillis(StartTime) as StartTime, FailureReason', 'fields Metrics.CPUUtilization as CPUUtil, Metrics.DiskUtilization as DiskUtil, Metrics.MemoryUtilization as MemoryUtil', 'fields Metrics.GPUMemoryUtilization as GPUMemoeyUtil, Metrics.GPUUtilization as GPUUtil', ], width:24, height: 6, } ); processingJobInsightsQueryWidget.position(0, 6) sagemakerMonitoringDashboard.addWidgets(processingJobCountWidget); sagemakerMonitoringDashboard.addWidgets(processingJobFailedWidget); sagemakerMonitoringDashboard.addWidgets(processingJobInsightsQueryWidget);

Después de modificar el tablero, debe volver a implementar esta solución desde cero. Puede ejecutar el cuaderno de Jupyter proporcionado en el repositorio de GitHub para volver a ejecutar la canalización de SageMaker, que iniciará los trabajos de procesamiento de SageMaker nuevamente. Cuando finalicen los trabajos, puede ir a la consola de CloudWatch y, en Cuadros de mando en el panel de navegación, elija Tableros personalizados. Puede encontrar el tablero llamado SageMaker-Monitoring-Dashboard.

Limpiar

Si ya no necesita este tablero personalizado, puede limpiar los recursos. Para eliminar todos los recursos creados, utilice el código de esta sección. La limpieza es ligeramente diferente para un entorno de Organizaciones frente a un entorno que no es de Organizaciones.

Para un entorno Organizaciones, use el siguiente código:

make destroy-management-stackset # Execute against the management account
make destroy-monitoring-account-infra # Execute against the monitoring account

Para un entorno que no sea Organizaciones, use el siguiente código:

make destroy-workload-account-infra # Execute against each workload account
make destroy-monitoring-account-infra # Execute against the monitoring account

Como alternativa, puede iniciar sesión en la cuenta de supervisión, la cuenta de carga de trabajo y la cuenta de administración para elimine las pilas de la consola de CloudFormation.

Conclusión

En esta publicación, discutimos la implementación de una solución centralizada de monitoreo y generación de informes para SageMaker mediante CloudWatch. Siguiendo las instrucciones paso a paso descritas en esta publicación, puede crear un panel de control de múltiples cuentas que muestre métricas clave y consolide registros relacionados con sus diversos trabajos de SageMaker de diferentes cuentas en tiempo real. Con este panel de monitoreo centralizado, puede tener una mejor visibilidad de las actividades de los trabajos de SageMaker en varias cuentas, solucionar problemas más rápidamente y tomar decisiones informadas basadas en datos en tiempo real. En general, la implementación de una solución centralizada de monitoreo y generación de informes mediante CloudWatch ofrece una manera eficiente para que las organizaciones administren su infraestructura de ML basada en la nube y la utilización de recursos.

Pruebe la solución y envíenos sus comentarios, ya sea en el foro de AWS para Amazon SageMaker, o a través de sus contactos habituales de AWS.

Para obtener más información sobre la función de observabilidad entre cuentas, consulte el blog Observabilidad entre cuentas de Amazon CloudWatch


Acerca de los autores

jie dong es un arquitecto de la nube de AWS con sede en Sídney, Australia. A Jie le apasiona la automatización y le encanta desarrollar soluciones para ayudar a los clientes a mejorar la productividad. El sistema basado en eventos y el marco sin servidor son su experiencia. En su tiempo libre, a Jie le encanta trabajar en la construcción de hogares inteligentes y explorar nuevos dispositivos para el hogar inteligente.

melanie li, PhD, es especialista sénior en AI/ML TAM en AWS con sede en Sídney, Australia. Ayuda a los clientes empresariales a crear soluciones utilizando herramientas de IA/ML de última generación en AWS y brinda orientación sobre la arquitectura y la implementación de soluciones de ML con las mejores prácticas. En su tiempo libre, le encanta explorar la naturaleza y pasar tiempo con su familia y amigos.

gordon wang, es TAM especialista sénior en IA/ML en AWS. Apoya a los clientes estratégicos con las mejores prácticas de AI/ML en muchas industrias. Es un apasionado de la visión artificial, la PNL, la IA generativa y los MLOps. En su tiempo libre, le encanta correr y caminar.

punto_img

Información más reciente

café vc

café vc

punto_img