Configura la supervisión de modelos

Antes de comenzar a supervisar un modelo, debes registrarlo con Vertex AI Model Registry y, luego, configurar los detalles de supervisión mediante la creación de un monitor 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.

Model Monitoring v2 solo admite modelos tabulares. Estos modelos se pueden entregar en Vertex AI o en otra infraestructura de entrega.

Registra modelo

Puedes supervisar los modelos que se implementan 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.

Para los modelos que entregas fuera de Vertex AI, puedes registrar un modelo de referencia, que es un marcador de posición para 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"
)

Para 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. Las funciones anidadas no son compatibles. Para analizar datos anidados, primero debes compactarlos. 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 de 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 poder comenzar a supervisarlo. Los extremos privados no son compatibles porque no admiten el registro de solicitudes y respuestas.

Model Monitoring v2 espera que el formato JSON de las solicitudes y respuestas de extremos 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 como se documenta en la referencia de la API para el método predict.

Conjunto de datos administrado de Vertex AI

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 de modelos con especificaciones de tiempo solo es compatible con el registro de extremos de BigQuery y Vertex AI como fuentes de datos.

Si deseas usar BigQuery como fuente para la supervisión continua con especificaciones de tiempo, la 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 de optimización general de BigQuery, te recomendamos particionar tu tabla por marca de tiempo para mejorar el rendimiento de las consultas y controlar los costos mediante la reducción de 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 del array sea un valor distinto.

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

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

Los atributos categóricos se asignan a los siguientes tipos de datos:

  • Booleano
  • String
  • Categórica

Esquema del modelo

Model Monitoring v2 usa el esquema del modelo para analizar tus datos. Este esquema es obligatorio cuando creas un monitor de modelos. 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.

Para AutoML Tables, cuando Model Monitoring v2 recupera el esquema del modelo, usa los atributos que están en el conjunto de datos de entrenamiento como los atributos de entrada, sin incluir la columna objetivo. 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. Para los modelos de clasificación de AutoML Tables, Vertex AI Model Monitoring supervisa la distribución de etiquetas argmax. Para 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 métricas a lo largo del tiempo. El conjunto de datos de destino incluye datos más recientes que usas para comparar con el conjunto de datos de referencia. Model Monitoring 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 de destino pueden ser de cualquier fuente de datos compatible.

Como ejemplos de destinos 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 compara solo los datos de las últimas 24 horas con el conjunto de datos de referencia.

Para el análisis de desvío de datos, la desvío puede ser volátil si se procesan datos de volumen inadecuados. Un período mayor puede ayudar a evitar las alertas que se activaron como resultado de recuentos de muestras bajos.

Conjunto de datos de referencia

Puedes configurar 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 las especificaciones del tiempo de supervisión a través de dos métodos:

  • Período, que incluye un par de horas de inicio y finalización.
  • Período y compensación, que especifica la cantidad de datos que se incluirán y el período entre los conjuntos de datos de comparación.

Por ejemplo, en los casos en los que deseas comparar datos recientes con los datos recopilados antes, puedes establecer un desplazamiento. La compensación especifica el período entre los conjuntos de datos de destino y de referencia. Como ejemplo, imagina que configuras tu conjunto de datos de destino con una ventana de un día, y tu modelo de referencia se establece con una compensación de una semana también con 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 modelo

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 modelos por versión del modelo.

Cuando crees un monitor de modelos, 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 supervisión y una configuración de notificaciones en el monitor del modelo. Cuando ejecutas un trabajo de supervisión, Model Monitoring v2 usa esta configuración como la configuración predeterminada.

Console

  1. En la consola de Google Cloud, ve a la página Supervisión.

    Ir a Monitoring

  2. Haz clic en Configurar supervisión.

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

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

  5. Opcional: Para supervisar el desvío de tu conjunto de datos de entrenamiento, especifica la ubicación de tu conjunto de datos.

  6. Opcional: Si deseas especificar un bucket de Cloud Storage existente para exportar resultados de supervisión, 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 la configuración predeterminada cuando se ejecuta un trabajo.

  8. Selecciona los objetivos que deseas supervisar. Para cada objetivo, puedes configurar la métrica que se debe supervisar y un umbral de las alertas.

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

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_condition=0.0003,
  feature_alert_conditions={"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_config=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  output_spec=DEFAULT_OUTPUT_SPEC,
  notification_spec=DEFAULT_NOTIFICATION_SPEC
)