Supervisa eventos de resiliencia con un panel

Si te interesan los clústeres de entrenamiento de Gemini Enterprise Agent Platform, comunícate con tu representante de ventas para obtener acceso.

Los clústeres de entrenamiento ejecutan verificaciones de estado automáticas en tus nodos y realizan intervenciones cuando falla una verificación. Por ejemplo, cuando se identifica un error fatal de XID, puede vaciar el nodo, volver a poner en cola el trabajo de Slurm afectado y volver a crear el nodo. Cada una de estas intervenciones se escribe en los registros de tu proyecto como un evento de resiliencia.

En esta página, se muestra cómo compilar un panel personalizado de Cloud Monitoring que muestre esos eventos de resiliencia junto con el estado de Slurm de tus nodos de procesamiento, de modo que puedas ver qué acciones de recuperación tomó el servicio y cómo se correlacionan con el estado de tu clúster. El panel tiene dos gráficos:

  • Estados de nodos de Slurm: La cantidad de nodos en cada estado de Slurm a lo largo del tiempo, tomada de la métrica hypercomputecluster.googleapis.com/slurm/node_state.
  • Eventos de resiliencia: Un recuento de eventos de resiliencia, desglosado por tipo de evento, tomado de una métrica basada en registros que creas en la siguiente sección.
Un panel con dos gráficos: nodos en cada estado de Slurm a lo largo del tiempo y un gráfico de barras apiladas que cuenta los eventos de resiliencia por tipo de evento.
Figura 1. La lectura de los dos gráficos en conjunto muestra el efecto de una recuperación: la cantidad de nodos inactivos disminuye mientras el servicio reemplaza un nodo que falló en una verificación de estado de prólogo, y los eventos que lo causaron aparecen debajo.

Antes de comenzar

Instala e inicializa Google Cloud CLI y, luego, configura el proyecto que contiene tus clústeres de entrenamiento:

gcloud auth login
gcloud config set project PROJECT_ID

Reemplaza PROJECT_ID por el ID de tu proyecto.

Roles obligatorios

Para obtener los permisos que necesitas para crear la métrica basada en registros y el panel, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para crear la métrica basada en registros y el panel. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear la métrica basada en registros y el panel:

  • Crear la métrica basada en registros: logging.logMetrics.create
  • Crear el panel: monitoring.dashboards.create

También puedes obtener estos permisos con roles personalizados o otros roles predefinidos.

Crea la métrica basada en registros

Los eventos de resiliencia se registran en los registros de tu proyecto, en los que cada evento lleva una etiqueta event_type con el prefijo RESILIENCE_EVENT_TYPE_. Para ver los eventos sin procesar en el Explorador de registros, usa la siguiente consulta:

labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"

Cloud Monitoring no puede graficar entradas de registro directamente, por lo que primero debes convertir esta consulta en una métrica basada en registros.

  1. Guarda la siguiente configuración en un archivo llamado resilience_metric.yaml:

    name: training_cluster_resilience_events
    description: "Resilience events on training cluster nodes (VM instances)."
    filter: 'resource.type="gce_instance" AND labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"'
    metricDescriptor:
      metricKind: DELTA
      valueType: INT64
      unit: "1"
      labels:
        - key: cluster_id
          valueType: STRING
          description: "The ID of the training cluster."
        - key: event_type
          valueType: STRING
          description: "The type of resilience event."
        - key: slurm_job_name
          valueType: STRING
          description: "The name of the Slurm job that triggered the resilience event, if applicable."
        - key: slurm_job_id
          valueType: STRING
          description: "The ID of the Slurm job that triggered the resilience event, if applicable."
        - key: slurm_job_partition
          valueType: STRING
          description: "The partition that the resilience event acts on."
    labelExtractors:
      cluster_id: "EXTRACT(labels.cluster_id)"
      event_type: "EXTRACT(labels.event_type)"
      slurm_job_name: "EXTRACT(labels.slurm_job_name)"
      slurm_job_id: "EXTRACT(labels.slurm_job_id)"
      slurm_job_partition: "EXTRACT(labels.slurm_job_partition)"
    

    El campo labelExtractors copia las etiquetas de cada entrada de registro en la métrica, lo que te permite desglosar el gráfico por tipo de evento, por clúster o por trabajo de Slurm.

  2. Crea la métrica:

    gcloud logging metrics create training_cluster_resilience_events \
        --config-from-file=resilience_metric.yaml
    
  3. Verifica que la métrica exista:

    gcloud logging metrics describe training_cluster_resilience_events
    

    También puedes confirmar la métrica en la Google Cloud consola en la página Métricas basadas en registros.

Crea el panel

  1. Guarda la siguiente configuración en un archivo llamado resilience_dashboard.json:

    {
      "displayName": "Training Clusters Resilience Dashboard",
      "mosaicLayout": {
        "columns": 48,
        "tiles": [
          {
            "height": 16,
            "width": 24,
            "widget": {
              "title": "Slurm node states",
              "xyChart": {
                "chartOptions": {
                  "mode": "COLOR"
                },
                "dataSets": [
                  {
                    "minAlignmentPeriod": "60s",
                    "plotType": "LINE",
                    "targetAxis": "Y1",
                    "timeSeriesQuery": {
                      "timeSeriesFilter": {
                        "aggregation": {
                          "alignmentPeriod": "60s",
                          "crossSeriesReducer": "REDUCE_SUM",
                          "groupByFields": [
                            "metric.label.\"state\""
                          ],
                          "perSeriesAligner": "ALIGN_MEAN"
                        },
                        "filter": "metric.type=\"hypercomputecluster.googleapis.com/slurm/node_state\" resource.type=\"gce_instance\""
                      }
                    }
                  }
                ],
                "yAxis": {
                  "scale": "LINEAR"
                }
              }
            }
          },
          {
            "yPos": 16,
            "height": 16,
            "width": 24,
            "widget": {
              "title": "Resilience events",
              "xyChart": {
                "chartOptions": {
                  "mode": "COLOR"
                },
                "dataSets": [
                  {
                    "minAlignmentPeriod": "60s",
                    "plotType": "STACKED_BAR",
                    "targetAxis": "Y1",
                    "timeSeriesQuery": {
                      "timeSeriesFilter": {
                        "aggregation": {
                          "alignmentPeriod": "60s",
                          "crossSeriesReducer": "REDUCE_COUNT",
                          "groupByFields": [
                            "metric.label.\"event_type\""
                          ],
                          "perSeriesAligner": "ALIGN_COUNT"
                        },
                        "filter": "metric.type=\"logging.googleapis.com/user/training_cluster_resilience_events\" resource.type=\"gce_instance\""
                      }
                    }
                  }
                ],
                "yAxis": {
                  "scale": "LINEAR"
                }
              }
            }
          }
        ]
      }
    }
    

    Si le diste un nombre diferente a la métrica basada en registros en la sección anterior, cambia el filtro logging.googleapis.com/user/ para que coincida.

  2. Crea el panel:

    gcloud monitoring dashboards create \
        --config-from-file=resilience_dashboard.json
    
  3. En la Google Cloud consola, ve a la página Paneles y, luego, en Mis paneles, abre Panel de resiliencia de clústeres de entrenamiento. El panel puede tardar aproximadamente un minuto en aparecer.

Soluciona problemas

En las siguientes secciones, se describen los problemas que es más probable que encuentres después de crear la métrica y el panel.

El gráfico "Eventos de resiliencia" está vacío

Una métrica basada en registros no se propaga de forma retroactiva. Solo cuenta las entradas de registro que llegan después de que creas la métrica. Como se explica en la descripción general de las métricas basadas en registros, una métrica no se propaga de forma retroactiva con datos de entradas de registro que ya están en Cloud Logging.

Si se produjeron eventos de resiliencia desde que creaste la métrica y el gráfico está aún vacío, confirma que los eventos estén presentes en el Explorador de registros ejecutando la consulta en Crea la métrica basada en registros.

Al gráfico "Estados de nodos de Slurm" le faltan algunos clústeres

La métrica hypercomputecluster.googleapis.com/slurm/node_state solo la informan los clústeres que ejecutan una versión lo suficientemente reciente del software del clúster. Si falta un clúster en el gráfico, actualiza el clúster y, luego, vuelve a consultar el gráfico.

El gráfico "Estados de nodos de Slurm" no muestra nodos de acceso

Esta situación es esperable. Los nodos de acceso no tienen un estado de Slurm, como idle o mixed, por lo que no informan la métrica slurm/node_state.

El gráfico "Eventos de resiliencia" cuenta eventos en exceso

Cloud Logging procesa cada entrada de registro al menos una vez, por lo que un error interno transitorio puede hacer que una entrada se cuente más de una vez. Para obtener más información, consulta Soluciona problemas de métricas basadas en registros.

Las entradas de registro en sí son la fuente de información. Para obtener un recuento exacto de un período, consulta los eventos en el Explorador de registros en lugar de leerlos en el gráfico.

¿Qué sigue?