Configura la supervisión de modelos

Antes de comenzar a supervisar un modelo, debes registrarlo en Vertex AI Model Registry y, luego, configurar los detalles de supervisión creando un supervisor de modelos. En esta página, se describe cómo registrar un modelo y se explican todas las especificaciones que puedes definir en una configuración de supervisión.

La versión 2 de Model Monitoring solo admite modelos tabulares. Estos modelos se pueden entregar en Vertex AI o en otra infraestructura de entrega.

Registra modelo

Puedes supervisar los modelos implementados en cualquier infraestructura de entrega, como en los extremos de Vertex AI, GKE o BigQuery. Para registrar un modelo que entregues en Vertex AI, consulta Importa modelos.

En el caso de los modelos que entregas fuera de Vertex AI, puedes registrar un modelo de referencia, que es un marcador de posición para los modelos que se entregan en otros recursos. Cuando registras un modelo de referencia, registras el nombre del modelo, como se muestra en el siguiente ejemplo:

Python SDK

model = aiplatform.Model.upload(
 display_name="MODEL_NAME"
)

En el caso de los modelos de referencia, Model Monitoring puede admitir conjuntos de datos de Cloud Storage o BigQuery. No puedes supervisar las atribuciones de atributos para los modelos de referencia.

Fuentes de datos

Puedes supervisar las métricas en los datos almacenados en las siguientes fuentes. No se admiten las funciones anidadas. Para analizar datos anidados, primero debes aplanarlos. Si tus datos están, por ejemplo, en BigQuery, puedes usar SQL para transformar atributos anidados.

BigQuery
Puedes proporcionar un URI de tabla de BigQuery o una consulta en SQL. Para especificar un período o configurar la supervisión continua, tu tabla debe incluir una columna de marca de tiempo, que debes especificar en tu conjunto de datos como timestamp_field.
Cloud Storage
Los datos deben almacenarse en formato CSV o JSONL. Para los archivos CSV, incluye un encabezado con los nombres de tus columnas como primera fila en tu archivo.
Trabajos de predicción por lotes de Vertex AI
Proporciona el nombre del recurso del trabajo de predicción por lotes completamente calificado para supervisar un trabajo de predicción por lotes. Puedes ejecutar un trabajo de supervisión en cuanto crees el trabajo de predicción por lotes. No tienes que esperar a que se complete el trabajo por lotes. Model Monitoring v2 ejecuta tu trabajo de supervisión poco después de que el trabajo de predicción por lotes completada.
Registro de extremos de Vertex AI

Debes habilitar el registro de solicitudes y respuestas en el extremo antes de comenzar a supervisarlo. Los extremos privados no son compatibles porque no admiten el registro de solicitudes y respuestas.

La versión 2 de Model Monitoring espera que el formato JSON de las solicitudes y respuestas del extremo de Vertex AI siga el formato que usa el método predict. Los objetos instances se insertan en la tabla de registro en la columna request_payload como un array: [INSTANCE_1, INSTANCE_2]. Del mismo modo, los objetos predictions se insertan objetos en la tabla de registro en la columna response_payload como un array: [PREDICTION_1, PREDICTION_2].

Se admiten otros métodos (como la predicción sin procesar), pero tus datos deben seguir el formato JSON de solicitud y respuesta que se documenta en la referencia de la API para el método predict.

Conjunto de datos administrado de Vertex AI

Son los conjuntos de datos que se administran en Vertex AI. Para obtener más información, consulta el formato del conjunto de datos tabular.

Supervisión continua

La supervisión continua (también conocida como ejecuciones programadas) te permite ejecutar trabajos de supervisión en un programa que establezcas. La supervisión continua del modelo con especificaciones de tiempo solo admite el registro de extremos de BigQuery y Vertex AI como fuentes de datos.

Para usar BigQuery como fuente de supervisión continua con especificaciones de tiempo, tu tabla debe tener una columna de marca de tiempo. Para tablas de BigQuery generadas por el registro de terminales de Vertex AI, las tablas ya incluyen una columna de marca de tiempo logging_time.

Como técnica general de optimización de BigQuery, te recomendamos que particiones tu tabla por marca de tiempo para mejorar el rendimiento de las consultas y controlar los costos, ya que se reduce la cantidad de bytes que lee una consulta.

Tipos de datos admitidos

Se admiten atributos numéricos y categóricos. Puedes incluir columnas con arrays, como un array de valores booleanos, categóricos, de cadena o enteros. Model Monitoring v2 aplana el array para que cada elemento sea un valor distinto.

Los atributos numéricos se asignan a los siguientes tipos de datos:

  • Número de punto flotante
  • Número entero

Las variables categóricas se asignan a los siguientes tipos de datos:

  • Booleano
  • String
  • Categórico

Esquema del modelo

La versión 2 de Model Monitoring usa el esquema del modelo para analizar tus datos. Este esquema es obligatorio cuando creas un monitor del modelo. Para AutoML Tables, no necesitas especificar el esquema del modelo; Vertex AI Model Monitoring lo recupera de forma automática.

En el siguiente ejemplo, se muestra la estructura general del esquema esperado:

Python SDK

ml_monitoring.spec.ModelMonitoringSchema(
  feature_fields=[
      ml_monitoring.spec.FieldSchema(
          name="FEATURE_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ],
    prediction_fields = [
      model_monitor.spec.FieldSchema(
          name="PREDICTION_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ],
  ground_truth_fields = [
      model_monitor.spec.FieldSchema(
          feature="GROUND_TRUTH_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ]
)

Si una columna incluye un array de valores, establece repeated en true.

En el caso de AutoML Tables, cuando Model Monitoring v2 recupera el esquema del modelo, usa los atributos que se encuentran en el conjunto de datos de entrenamiento como atributos de entrada, sin incluir la columna de destino. El resultado de la predicción se establece en la columna predicted_{target_column}. Además, el método de extracción de Model Monitoring v2 para el valor de salida de la predicción depende del tipo de modelo. En el caso de los modelos de clasificación de AutoML Tables, Vertex AI Model Monitoring supervisa la distribución de etiquetas argmax. En el caso de los modelos de regresión de AutoML Tables, Vertex AI Model Monitoring supervisa la distribución de valores.

Conjuntos de datos de referencia y de destino

El conjunto de datos de referencia representa un punto de referencia que usas para medir las métricas a lo largo del tiempo. El conjunto de datos objetivo incluye datos más recientes que usas para comparar con el conjunto de datos de referencia. La Supervisión de modelos v2 calcula las métricas entre los dos conjuntos de datos para ayudarte a hacer un seguimiento de la calidad de tus modelos. Los conjuntos de datos de referencia y objetivo pueden provenir de cualquier fuente de datos admitida.

Como ejemplos de objetivos y modelos de referencia, puedes comparar tu conjunto de datos de entrega (objetivo) con el conjunto de datos de entrenamiento de tu modelo (modelo de referencia) o puedes comparar tu conjunto de datos de entrega (objetivo) con un conjunto de datos de entrega de un período anterior (modelo de referencia).

Conjunto de datos de destino

Cuando seleccionas tu conjunto de datos de destino, Model Monitoring v2 puede procesar todo el conjunto de datos o puedes configurar una ventana, que especifica la cantidad de datos para que examine Model Monitoring v2. Por ejemplo, si especificas un período de 24 horas, Model Monitoring v2 solo compara los datos de las últimas 24 horas con el conjunto de datos de referencia.

En el caso del análisis de la desviación de los datos, la desviación puede ser volátil si se procesa un volumen de datos inadecuado. Un período más largo puede ayudar a evitar las alertas que se activaron como resultado de recuentos de muestras bajos.

Conjunto de datos de referencia

Puedes establecer tu conjunto de datos de referencia en cualquier fuente de datos compatible, como un conjunto de datos administrado de Vertex AI que contenga los datos de entrenamiento de tu modelo. Al igual que con los conjuntos de datos de destino, puedes elegir que Model Monitoring v2 procese todo el conjunto de datos o una ventana en particular.

Especificación de tiempo

Puedes establecer especificaciones de tiempo de supervisión a través de dos métodos:

  • Es el período que incluye un par de hora de inicio y hora de finalización.
  • Ventana temporal y desfase, que especifican la cantidad de datos que se deben incluir y el período entre los conjuntos de datos de comparación

Por ejemplo, en los casos en los que desees comparar datos recientes con datos recopilados anteriormente, puedes establecer un desplazamiento. El desplazamiento especifica el período entre los conjuntos de datos de destino y de referencia. Por ejemplo, imagina que estableces tu conjunto de datos objetivo con una ventana de un día y tu modelo de referencia se establece con un desplazamiento de una semana y una ventana de un día.

En este caso, el conjunto de datos de destino incluye datos de las 24 horas anteriores a la hora de inicio del trabajo de supervisión. El conjunto de datos de referencia incluye datos del mismo período de 24 horas, pero exactamente una semana antes.

Crea un monitor de modelos

Crea un supervisor de modelos para asociar los detalles de supervisión con una versión del modelo que está registrado en Vertex AI Model Registry. El recurso resultante se denomina monitor de modelo. Solo puedes crear un monitor de modelo por versión del modelo.

Cuando crees un monitor del modelo, especifica el nombre del modelo, su versión y su esquema. Para algunos modelos, como los de AutoML, el esquema se te proporciona.

De manera opcional, puedes establecer objetivos de supervisión, un conjunto de datos de entrenamiento, una ubicación de salida de la supervisión y la configuración de notificaciones en el supervisor del modelo. Cuando ejecutas un trabajo de supervisión, Model Monitoring v2 usa estos parámetros de configuración como valores predeterminados.

Console

  1. En la consola de Google Cloud , ve a la página Monitoring.

    Ir a Monitoring

  2. Haz clic en Configurar la supervisión.

  3. Selecciona un modelo y su versión para supervisarlos.

  4. Si corresponde, define el esquema de tus atributos de entrada, los resultados de predicción y, si está disponible, la verdad fundamental.

  5. Opcional: Para supervisar la desviación de tu conjunto de datos de entrenamiento, especifica la ubicación de tu conjunto de datos.

  6. Opcional: Para especificar un bucket de Cloud Storage existente para exportar los resultados del monitoreo, expande Opciones avanzadas y, luego, selecciona un bucket.

  7. Para configurar los objetivos de supervisión, haz clic en Continuar o en Configurar para crear el supervisor de modelos.

    Esta configuración se usa como los valores predeterminados cuando se ejecuta un trabajo.

  8. Selecciona los objetivos que deseas supervisar. Para cada objetivo, puedes establecer la métrica que se supervisará y un umbral para las alertas.

  9. Especifica las direcciones de correo electrónico y, de manera opcional, los canales de notificaciones en Cloud Monitoring para las alertas y notificaciones de supervisión.

Python SDK

from vertexai.resources.preview import ml_monitoring
from google.cloud.aiplatform_v1beta1.types import ExplanationSpec, ExplanationParameters, ExplanationMetadata

# Define Monitoring Schema. For AutoML models, this is optional if the schema information is available.
MONITORING_SCHEMA=ml_monitoring.spec.ModelMonitoringSchema(
  feature_fields=[
      ml_monitoring.spec.FieldSchema(
          name="sepal_length_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="sepal_width_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="petal_length_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="petal_width_cm",
          data_type="float"
      )
  ],
  prediction_fields = [
      ml_monitoring.spec.FieldSchema(
          name="predicted_species",
          data_type="categorical"
      )
  ]
)

TRAINING_DATASET = ml_monitoring.spec.MonitoringInput(
  gcs_uri=GCS_INPUT_URI,
  data_format=DATA_FORMAT,
)

DEFAULT_FEATURE_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec(
  categorical_metric_type="l_infinity",
  numeric_metric_type="jensen_shannon_divergence",
  default_categorical_alert_threshold=0.1,
  default_numeric_alert_threshold=0.1,
)

DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec(
  categorical_metric_type="l_infinity",
  numeric_metric_type="jensen_shannon_divergence",
  default_categorical_alert_threshold=0.1,
  default_numeric_alert_threshold=0.1,
)

DEFAULT_FEATURE_ATTRIBUTION_SPEC=ml_monitoring.spec.FeatureAttributionSpec(
  default_alert_threshold=0.0003,
  feature_alert_thresholds={"sepal_length_cm":0.0001},
)

EXPLANATION_SPEC=ExplanationSpec(
  parameters=ExplanationParameters(
      {"sampled_shapley_attribution": {"path_count": 2}}
  ),
  metadata=ExplanationMetadata(
      inputs={
          "sepal_length_cm": ExplanationMetadata.InputMetadata({
              "input_tensor_name": "sepal_length_cm",
              "encoding": "IDENTITY",
              "modality": "numeric",
          }),
          ...
      },
      ...
  )
)

DEFAULT_OUTPUT_SPEC = ml_monitoring.spec.output.OutputSpec(
  gcs_base_dir=GCS_OUTPUT_BASE_DIR
)

DEFAULT_NOTIFICATION_SPEC = ml_monitoring.spec.NotificationSpec(
  user_emails=['email@example.com']
)

my_model_monitor = ml_monitoring.ModelMonitor.create(
  display_name=MONITORING_JOB_DISPLAY_NAME,
  model_name=MODEL_RESOURCE_NAME,
  model_version_id=MODEL_VERSION_ID,
  model_monitoring_schema=MONITORING_SCHEMA,
  # The following fields are optional for creating the model monitor.
  training_dataset=TRAINING_DATASET,
  tabular_objective_spec=ml_monitoring.spec.TabularObjective(
      feature_drift_spec=DEFAULT_FEATURE_DRIFT_SPEC,
      prediction_output_drift_spec=DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC,
      feature_attribution_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  ),
  explanation_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  output_spec=DEFAULT_OUTPUT_SPEC,
  notification_spec=DEFAULT_NOTIFICATION_SPEC
)