Classes de previsão

O SDK da Vertex AI inclui as classes de previsão a seguir. Uma classe é para previsões em lote. As outras estão relacionadas a previsões on-line ou do Vector Search. Para mais informações, consulte Visão geral de como receber previsões na Vertex AI.

Classe de previsão em lote

Uma previsão em lote é um grupo de solicitações de previsão assíncronas. Solicite previsões em lote diretamente do recurso do modelo sem precisar implantá-lo em um endpoint. As previsões em lote são adequadas para quando você não precisa de uma resposta imediata e quer processar dados com uma única solicitação. BatchPredictionJob é a única classe no SDK da Vertex AI que é específica para previsões em lote.

BatchPredictionJob

A classe BatchPredictionJob representa um grupo de solicitações de previsão assíncronas. Há duas maneiras de criar um job de previsão em lote:

  1. A maneira preferencial de criar um job de previsão em lote é usar o método batch_predict no Model treinado. Esse método requer os seguintes parâmetros:

    • instances_format: o formato do arquivo de solicitação de previsão em lote: jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.
    • prediction_format: o formato do arquivo de resposta da previsão em lote: jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.
    • gcs_source: Uma lista de um ou mais caminhos do Cloud Storage para suas solicitações de previsão em lote.
    • gcs_destination_prefix: o caminho do Cloud Storage em que a Vertex AI grava as previsões.

    O código abaixo é um exemplo de como chamar 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. A segunda maneira de criar um job de previsão em lote é chamar o método BatchPredictionJob.create. O método BatchPredictionJob.create requer quatro parâmetros:

    • job_display_name: um nome que você atribui ao job de previsão em lote. Embora job_display_name seja necessário para BatchPredictionJob.create, é opcional para Model.batch_predict.
    • model_name: o nome ou ID totalmente qualificado do Model treinado usado para o job de previsão em lote.
    • instances_format: o formato do arquivo de solicitação de previsão em lote: jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.
    • predictions_format: o formato do arquivo de resposta da previsão em lote: jsonl, csv, bigquery, tf-record, tf-record-gzip ou file-list.

Classes de previsão on-line

As previsões on-line são solicitações síncronas feitas em um endpoint de modelo. É preciso implantar o modelo em um endpoint antes de fazer uma solicitação de previsão on-line. Use as previsões on-line quando quiser previsões geradas com base na entrada do aplicativo ou quando precisar de uma resposta rápida.

Endpoint

Antes de receber previsões on-line do modelo, você precisa implantá-lo em um endpoint. Ao implantar um modelo em um endpoint, você associa os recursos de máquina física ao modelo para que ele possa exibir previsões on-line.

É possível implantar mais de um modelo em um endpoint. Também é possível implantar um modelo em mais de um endpoint. Para mais informações, consulte Considerações para implantar modelos.

Para criar um recurso Endpoint, implante seu modelo. Quando você chama o método Model.deploy, ele cria e retorna um Endpoint.

Veja a seguir um exemplo de snippet de código que mostra como criar um job de treinamento personalizado, criar e treinar um modelo e, em seguida, implantá-lo em um endpoint.

# 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

Um endpoint particular é como um recurso Endpoint, exceto que as previsões são enviadas por uma rede segura para o serviço de previsão on-line da Vertex AI. Use um endpoint particular se sua organização quiser manter todo o tráfego particular.

Para usar um endpoint particular, configure a Vertex AI para fazer peering com uma nuvem privada virtual (VPC). Uma VPC é necessária para que o endpoint de previsão particular se conecte diretamente à Vertex AI. Para mais informações, consulte Configurar o peering de rede VPC e Usar endpoints particulares para previsão on-line.

ModelDeploymentMonitoringJob

Use o recurso ModelDeploymentMonitoringJob para monitorar seu modelo e receber alertas se ele desviar de uma maneira que possa afetar a qualidade das previsões do seu modelo.

Quando os dados de entrada se desviam dos dados usados para treinar o modelo, o desempenho do modelo pode se deteriorar, mesmo que o próprio modelo não tenha mudado. O monitoramento de modelos analisa a data de entrada do atributo skew e drift:

  • O skew ocorre quando a distribuição de dados do recurso de produção desvia dos dados do recurso usados para treinar o modelo.
  • O drift ocorre quando os dados do recurso de produção mudam significativamente com o tempo.

Para mais informações, consulte Introdução ao Vertex AI Model Monitoring. Para um exemplo de como implementar o monitoramento da Vertex AI com o SDK da Vertex AI, consulte o notebook do modelo da Vertex AI com atribuições de recursos explicáveis de IA no GitHub.

Classes de previsão do Vector Search

O Vector Search é um serviço gerenciado que cria índices de similaridade, ou vetores, para executar a correspondência de similaridade. Há duas etapas gerais para realizar a correspondência por similaridade:

  1. Crie uma representação vetorial dos seus dados. Os dados podem ser de texto, imagens, vídeo, áudio ou tabular.

  2. O Vector Search usa os endpoints dos vetores criados para realizar uma pesquisa de vetores semelhantes em alta escala e com baixa latência.

Para mais informações, consulte a Visão geral do Vector Search e o notebook Criar um índice de pesquisa de vetor no GitHub.

MatchingEngineIndex

A classe MatchingEngineIndex representa os índices, ou vetores, criados e usados pelo Vector Search para executar a pesquisa de similaridade.

Há dois algoritmos de pesquisa que podem ser usados para o índice:

  1. TreeAhConfig usa o algoritmo tree-AH raso (árvore rasa usando hash assimétrico). Use MatchingEngineIndex.create_tree_ah_index para criar um índice que usa o algoritmo do algoritmo tree-AH.
  2. BruteForceConfig utiliza uma pesquisa linear padrão). Use MatchingEngineIndex.create_brute_force_index para criar um índice que usa uma pesquisa linear padrão.

Para mais informações sobre como configurar os índices, consulte Configurar índices.

O código a seguir é um exemplo de como criar um índice que usa o algoritmo 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" }
)

O código a seguir é um exemplo de como criar um índice que usa o algoritmo de força 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

Use a classe MatchingEngineIndexEndpoint para criar e recuperar um endpoint. Depois de implantar um modelo no endpoint, você receberá um endereço IP usado para executar as consultas.

O código abaixo é um exemplo de como criar um endpoint de índice de mecanismo correspondente e implantar um índice de mecanismo correspondente nele:

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

A seguir