Classes de prédiction

Le SDK Vertex AI inclut les classes de prédiction suivantes. Une classe est dédiée aux prédictions par lot. Les autres sont liées aux prédictions en ligne ou aux prédictions Vector Search. Pour en savoir plus, consultez la Présentation de l'obtention de prédictions sur Vertex AI.

Classe de prédiction par lot

Une prédiction par lot est un groupe de requêtes de prédiction asynchrones. Vous demandez des prédictions par lot à partir de la ressource de modèle sans avoir à le déployer sur un point de terminaison. Les prédictions par lot sont adaptées lorsque vous n'avez pas besoin d'une réponse immédiate et souhaitez traiter des données avec une seule requête. BatchPredictionJob est la seule classe du SDK Vertex AI spécifique aux prédictions par lot.

BatchPredictionJob

La classe BatchPredictionJob représente un groupe de requêtes de prédiction asynchrones. Il existe deux façons de créer un job de prédiction par lot :

  1. La méthode privilégiée pour créer un job de prédiction par lot consiste à utiliser la méthode batch_predict sur votre Model entraîné. Cette méthode nécessite les paramètres suivants :

    • instances_format : format du fichier de requête de prédiction par lot : jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.
    • prediction_format : format du fichier de réponse de prédiction par lot : jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.
    • gcs_source: Liste d'un ou plusieurs chemins d'accès Cloud Storage vers vos requêtes de prédiction par lot.
    • gcs_destination_prefix : chemin d'accès Cloud Storage vers lequel Vertex AI écrit les prédictions.

    Le code suivant est un exemple de la façon dont vous pouvez appeler 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 seconde façon de créer un job de prédiction par lot consiste à appeler la méthode BatchPredictionJob.create. La méthode BatchPredictionJob.create nécessite quatre paramètres :

    • job_display_name : nom que vous attribuez au job de prédiction par lot. Bien que job_display_name soit requis pour BatchPredictionJob.create, il est facultatif pour Model.batch_predict.
    • model_name : nom complet ou ID du Model entraîné que vous utilisez pour le job de prédiction par lot.
    • instances_format : format du fichier de requête de prédiction par lot : jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.
    • predictions_format : format du fichier de réponse de prédiction par lot : jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.

Classes de prédiction en ligne

Les prédictions en ligne sont des requêtes synchrones adressées à un point de terminaison de modèle. Vous devez déployer votre modèle sur un point de terminaison avant de pouvoir effectuer une requête de prédiction en ligne. Utilisez les prédictions en ligne lorsque vous souhaitez obtenir des prédictions générées en fonction des entrées d'application ou lorsque vous avez besoin d'une réponse de prédiction rapide.

Endpoint

Avant de pouvoir obtenir des prédictions en ligne à partir de votre modèle, vous devez déployer votre modèle sur un point de terminaison. Lorsque vous déployez un modèle sur un point de terminaison, vous associez des ressources de machine physique au modèle afin qu'il puisse diffuser les prédictions en ligne.

Vous pouvez déployer plusieurs modèles sur un point de terminaison. Vous pouvez également déployer un modèle sur plusieurs points de terminaison. Pour en savoir plus, consultez la section Éléments à prendre en compte pour le déploiement de modèles.

Pour créer une ressource Endpoint, vous déployez votre modèle. Lorsque vous appelez la méthode Model.deploy, elle crée et renvoie un Endpoint.

L'extrait de code suivant montre comment créer un job d'entraînement personnalisé, créer et entraîner un modèle, puis déployer le modèle sur un point de terminaison.

# 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 point de terminaison privé est semblable à une ressource Endpoint, sauf que les prédictions sont envoyées via un réseau sécurisé au service de prédiction en ligne Vertex AI. Utilisez un point de terminaison privé si votre organisation souhaite que l'ensemble du trafic reste privé.

Pour utiliser un point de terminaison privé, vous devez configurer Vertex AI pour l'appairer avec un cloud privé virtuel (VPC). Un VPC est nécessaire pour que le point de terminaison de prédiction privé se connecte directement à Vertex AI. Pour en savoir plus, consultez les sections Configurer l'appairage de réseaux VPC et Utiliser des points de terminaison privés pour la prédiction en ligne.

ModelDeploymentMonitoringJob

Utilisez la ressource ModelDeploymentMonitoringJob pour surveiller votre modèle et recevoir des alertes en cas d'écart susceptible d'affecter la qualité des prédictions de votre modèle.

Lorsque les données d'entrée diffèrent des données utilisées pour entraîner votre modèle, les performances du modèle peuvent se dégrader, même si le modèle lui-même n'a pas changé. La surveillance du modèle analyse les données d'entrée pour connaître les écarts et les dérives des caractéristiques :

  • Un écart se produit lorsque la distribution des données de caractéristiques de production s'écarte des données de caractéristiques utilisées pour entraîner le modèle.
  • Une dérive se produit lorsque les données de caractéristiques de production changent de manière significative au fil du temps.

Pour en savoir plus, consultez la Présentation de la surveillance de modèle Vertex AI. Pour obtenir un exemple sur l'implémentation de la surveillance Vertex AI avec le SDK Vertex AI, consultez le notebook Surveillance de modèle Vertex AI avec attribution de caractéristiques Explainable AI sur GitHub.

Classes de prédiction Vector Search

Vector Search est un service géré qui crée des index de similarités ou des vecteurs pour effectuer une mise en correspondance de similarités. Une mise en correspondance de similarités s'effectue en deux étapes majeures :

  1. Créez une représentation vectorielle de vos données. Les données peuvent être des données textuelles, d'images, vidéo, audio ou tabulaires.

  2. Vector Search utilise les points de terminaison des vecteurs que vous créez pour effectuer une recherche à grande échelle et à faible latence de vecteurs similaires.

Pour en savoir plus, consultez les pages Présentation de Vector Search et Créer un index Vector Search sur GitHub.

MatchingEngineIndex

La classe MatchingEngineIndex représente les index, ou vecteurs, que vous créez et que Vector Search utilise pour effectuer sa recherche de similarité.

Vous pouvez utiliser deux algorithmes de recherche pour votre index :

  1. TreeAhConfig utilise un algorithme "tree-AH" superficiel (arbre superficiel utilisant le hachage asymétrique). Utilisez MatchingEngineIndex.create_tree_ah_index pour créer un index qui utilise l'algorithme "tree-AH".
  2. BruteForceConfig utilise une recherche linéaire standard. Utilisez MatchingEngineIndex.create_brute_force_index pour créer un index qui utilise une recherche linéaire standard.

Pour en savoir plus sur la configuration de vos index, consultez la section Configurer des index.

Le code suivant est un exemple de création d'index utilisant l'algorithme "tree-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" }
)

Le code suivant est un exemple de création d'index utilisant l'algorithme de force brute :

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

Utilisez la classe MatchingEngineIndexEndpoint pour créer et récupérer un point de terminaison. Après avoir déployé un modèle sur votre point de terminaison, vous obtenez une adresse IP que vous utilisez pour exécuter vos requêtes.

L'exemple de code suivant illustre la création d'un point de terminaison d'index Matching Engine, puis le déploiement d'un index Matching Engine sur ce point de terminaison :

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"
)

Étapes suivantes