Clases de predicción

El SDK de Vertex AI incluye las siguientes clases de predicción. Una clase es para las predicciones por lotes. Los demás se relacionan con predicciones en línea o predicciones de Vector Search. Para obtener más información, consulta Descripción general sobre cómo obtener predicciones en Vertex AI.

Clase de predicción por lotes

Una predicción por lotes es un grupo de solicitudes de predicción asíncronas. Las predicciones por lotes se solicitan desde el recurso de modelo sin necesidad de implementar el modelo en un extremo. Las predicciones por lotes son adecuadas cuando no necesitas una respuesta inmediata y deseas procesar datos con una sola solicitud. BatchPredictionJob es la clase del SDK de Vertex AI que es específica de las predicciones por lotes.

BatchPredictionJob

La clase BatchPredictionJob representa un grupo de solicitudes de predicción asíncronas. Hay dos formas de crear un trabajo de predicción por lotes:

  1. La forma preferida de crear un trabajo de predicción por lotes es usar el método batch_predict en tu Model entrenado. Este método requiere los siguientes parámetros:

    • instances_format: El formato del archivo de solicitud de predicción por lotes: jsonl, csv, bigquery, tf-record, tf-record-gzip o file-list.
    • prediction_format: El formato del archivo de respuesta de predicción por lotes: jsonl, csv, bigquery, tf-record, tf-record-gzip o file-list.
    • gcs_source:: Una lista de una o más rutas de acceso de Cloud Storage a tus solicitudes de predicción por lotes.
    • gcs_destination_prefix: La ruta de Cloud Storage en la que Vertex AI escribe las predicciones.

    El siguiente código es un ejemplo de cómo puedes llamar a Model.batch_predict:

    batch_prediction_job = model.batch_predict(
        instances_format="jsonl",
        predictions_format="jsonl",
        job_display_name="your_job_display_name_string",
        gcs_source=['gs://path/to/my/dataset.csv'],
        gcs_destination_prefix='gs://path/to/my/destination',
        model_parameters=None,
        starting_replica_count=1,
        max_replica_count=5,
        machine_type="n1-standard-4",
        sync=True
    )
    
  2. La segunda forma de crear un trabajo de predicción por lotes es llamar al método BatchPredictionJob.create. El método BatchPredictionJob.create requiere cuatro parámetros:

    • job_display_name: Un nombre que asignas al trabajo de predicción por lotes. Ten en cuenta que, si bien job_display_name es obligatorio para BatchPredictionJob.create, es opcional para Model.batch_predict.
    • model_name: El nombre o ID completamente calificado del Model entrenado que usas para el trabajo de predicción por lotes.
    • instances_format: El formato del archivo de solicitud de predicción por lotes: jsonl, csv, bigquery, tf-record, tf-record-gzip o file-list.
    • predictions_format: El formato del archivo de respuesta de predicción por lotes: jsonl, csv, bigquery, tf-record, tf-record-gzip o file-list.

Clases de predicción en línea

Las predicciones en línea son solicitudes síncronas realizadas en un extremo del modelo. Debes implementar tu modelo en un extremo antes de que puedas realizar una solicitud de predicción en línea. Usa predicciones en línea cuando quieras obtener predicciones que se generan a partir de entradas de la aplicación o cuando necesitas una respuesta de predicción rápida.

Endpoint

Antes de obtener predicciones en línea de tu modelo, debes implementar tu modelo en un extremo. Cuando implementas un modelo en un extremo, asocias los recursos de la máquina física con el modelo para que pueda entregar predicciones en línea.

Puedes implementar más de un modelo en un extremo. También puedes implementar un modelo en más de un extremo. Para obtener más información, consulta Consideraciones sobre la implementación de modelos.

Para crear un recurso Endpoint, implementa tu modelo. Cuando llamas al método Model.deploy, se crea y muestra un Endpoint.

El siguiente es un fragmento de código de muestra que indica cómo crear un trabajo de entrenamiento personalizado, crear y entrenar un modelo y, luego, implementar el modelo en un extremo.

# Create your custom training job

job = aiplatform.CustomTrainingJob(
    display_name="my_custom_training_job",
    script_path="task.py",
    container_uri="us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-8:latest",
    requirements=["google-cloud-bigquery>=2.20.0", "db-dtypes"],
    model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest"
)

# Start the training and create your model
model = job.run(
    dataset=dataset,
    model_display_name="my_model_name",
    bigquery_destination=f"bq://{project_id}"
)

# Create an endpoint and deploy your model to that endpoint
endpoint = model.deploy(deployed_model_display_name="my_deployed_model")

# Get predictions using test data in a DataFrame named 'df_my_test_data'
predictions = endpoint.predict(instances=df_my_test_data)

PrivateEndpoint

Un extremo privado es como un recurso Endpoint, excepto que las predicciones se envían a través de una red segura al servicio de predicción en línea de Vertex AI. Usa un extremo privado si tu organización desea mantener privado todo el tráfico.

Para usar un extremo privado, debes configurar Vertex AI para intercambiar tráfico con una nube privada virtual (VPC). Se requiere una VPC para que el extremo de predicción privado se conecte directamente con Vertex AI. Si deseas obtener más información, consulta Configura el intercambio de tráfico entre redes de VPC y Usa extremos privados para la predicción en línea.

ModelDeploymentMonitoringJob

Usa el recurso ModelDeploymentMonitoringJob para supervisar tu modelo y recibir alertas si se desvía de una manera que podría afectar la calidad de las predicciones de tu modelo.

Cuando los datos de entrada difieren de los datos que se usan para entrenar el modelo, el rendimiento del modelo puede disminuir, incluso si el modelo en sí no cambió. La supervisión de modelos analiza la fecha de entrada para el sesgo y el desvío de atributos:

  • El sesgo ocurre cuando la distribución de datos de atributos de producción se desvía de los datos de atributos que se usaron para entrenar el modelo.
  • El desvío ocurre cuando los datos de los atributos de producción cambian de forma significativa con el tiempo.

Para obtener más información, consulta Introducción a la supervisión de modelos de Vertex AI. Para ver un ejemplo de cómo implementar la supervisión de Vertex AI con el SDK de Vertex AI, consulta el notebook Supervisión de modelos de Vertex AI con atribuciones de funciones de IA explicables en GitHub.

Clases de predicción de Vector Search

Vector Search es un servicio administrado que compila índices o vectores de similitud para realizar una coincidencia de similitud. Hay dos pasos de alto nivel para realizar la coincidencia de similitud:

  1. Crear una representación vectorial de tus datos. Los datos pueden ser de texto, imagen, video, audio o tabulares.

  2. Vector Search usa los extremos de los vectores que creas a fin de realizar una búsqueda a gran escala y de baja latencia para vectores similares.

Para obtener más información, consulta Descripción general de Vector Search y el notebook Crea un índice de Vector Search en GitHub.

MatchingEngineIndex

La clase MatchingEngineIndex representa los índices o vectores que creas y que Vector Search usa para realizar la búsqueda de similitud.

Existen dos algoritmos de búsqueda que puedes usar para tu índice:

  1. TreeAhConfig usa un algoritmo de árbol superficial-AH (árbol superficial con hash asimétrico). Usa MatchingEngineIndex.create_tree_ah_index para crear un índice que use el algoritmo de árbol-AH.
  2. BruteForceConfig usa una búsqueda lineal estándar. Usa MatchingEngineIndex.create_brute_force_index para crear un índice que use una búsqueda lineal estándar.

Para obtener más información sobre cómo configurar tus índices, consulta Configura índices.

El siguiente código es un ejemplo de cómo crear un índice que use el algoritmo de árbol-AH:

my_tree_ah_index = aiplatform.Index.create_tree_ah_index(
    display_name="my_display_name",
    contents_delta_uri="gs://my_bucket/embeddings",
    dimensions=1,
    approximate_neighbors_count=150,
    distance_measure_type="SQUARED_L2_DISTANCE",
    leaf_node_embedding_count=100,
    leaf_nodes_to_search_percent=50,
    description="my description",
    labels={ "label_name": "label_value" }
)

El siguiente código es un ejemplo de cómo crear un índice que usa el algoritmo de fuerza bruta:

my_brute_force_index = aiplatform.Index.create_brute_force_index(
    display_name="my_display_name",
    contents_delta_uri="gs://my_bucket/embeddings",
    dimensions=1,
    approximate_neighbors_count=150,
    distance_measure_type="SQUARED_L2_DISTANCE",
    description="my description",
    labels={ "label_name": "label_value" }
)

MatchingEngineIndexEndpoint

Usa la clase MatchingEngineIndexEndpoint para crear y recuperar un extremo. Después de implementar un modelo en tu extremo, obtienes una dirección IP que usas para ejecutar tus consultas.

El siguiente código es un ejemplo de cómo crear un extremo de índice de Matching Engine y, luego, implementar un índice de Matching Engine:

my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
    display_name="sample_index_endpoint",
    description="index endpoint description",
    network="projects/123456789123/global/networks/my_vpc"
)

my_index_endpoint = my_index_endpoint.deploy_index(
    index=my_tree_ah_index, deployed_index_id="my_matching_engine_index_id"
)

¿Qué sigue?