预测类

Vertex AI SDK 包含以下预测类。一个类适用于批量预测。其他则与在线预测或 Vector Search 预测相关。如需了解详情,请参阅概览:在 Vertex AI 上进行预测

批量预测类

批量预测是一组异步预测请求。您可以从模型资源请求批量预测,而无需将模型部署到端点。如果您不需要获得即时响应并且希望通过单个请求处理数据,则适合采用批量预测。BatchPredictionJob 便是 Vertex AI SDK 中一个特定于批量预测的类。

BatchPredictionJob

BatchPredictionJob 类表示一组异步预测请求。您可以通过以下两种方式创建批量预测作业:

  1. 创建批量预测作业的首选方法是对经过训练的 Model 使用 batch_predict 方法。此方法需要用到以下参数:

    • instances_format:批量预测请求文件的格式:jsonlcsvbigquerytf-recordtf-record-gzipfile-list
    • prediction_format:批量预测响应文件的格式:jsonlcsvbigquerytf-recordtf-record-gzipfile-list
    • gcs_source::批量预测请求的一个或多个 Cloud Storage 路径的列表。
    • gcs_destination_prefix:Vertex AI 要将预测写入到的 Cloud Storage 路径。

    以下代码示例展示了如何调用 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. 创建批量预测作业的第二种方法是调用 BatchPredictionJob.create 方法。BatchPredictionJob.create 方法需要用到下面四个参数:

    • job_display_name:您为批量预测指定的名称。请注意,虽然 job_display_name 对于 BatchPredictionJob.create 方法而言是必需的参数,但对 Model.batch_predict 方法是可选参数。
    • model_name:要通过其来执行批量预测作业的经过训练的 Model 的完全限定名称或 ID。
    • instances_format:批量预测请求文件的格式:jsonlcsvbigquerytf-recordtf-record-gzipfile-list
    • predictions_format:批量预测响应文件的格式:jsonlcsvbigquerytf-recordtf-record-gzipfile-list

在线预测类

在线预测是向模型端点发出的同步请求。您必须先将模型部署到端点,然后才能发出在线预测请求。如果您希望根据应用输入生成预测结果或是需要快速获得预测响应,则适合采用在线预测。

Endpoint

您必须先将模型部署到端点,然后才能通过该模型进行在线预测。将模型部署到端点,即会将物理机器资源与该模型相关联,以便通过模型进行在线预测。

您可以将多个模型部署到一个端点。您也可以将一个模型部署到多个端点。如需了解详情,请参阅模型部署注意事项

如需创建 Endpoint 资源,部署模型即可。当您调用 Model.deploy 方法时,即会创建并返回一个 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

专用端点与 Endpoint 资源类似,不同之处在于预测会通过安全网络发送到 Vertex AI 在线预测服务。如果您的组织希望将所有流量保持为不公开状态,请使用专用端点。

如需使用专用端点,您必须将 Vertex AI 配置为与一个虚拟私有云 (VPC) 建立对等互连。专用预测端点必须通过 VPC 才能与 Vertex AI 建立直接连接。如需了解详情,请参阅设置 VPC 网络对等互连使用专用端点进行在线预测

ModelDeploymentMonitoringJob

使用 ModelDeploymentMonitoringJob 资源监控模型,并在模型偏离既定目标并有可能影响模型的预测质量时接收提醒。

如果输入数据与用于训练模型的数据存在差异,那么即使模型本身未发生变化,模型的表现可能也会受到影响。模型监控功能会对输入数据进行分析,以发现特征偏差和偏移情况:

  • 如果生产特征数据分布与用于训练模型的特征数据存在差异,便会发生“偏差”。
  • 如果生产特征数据会随时间明显波动,便会发生“偏移”。

如需了解详情,请参阅 Vertex AI 模型监控功能简介。如需查看如何使用 Vertex AI SDK 实现 Vertex AI 监控功能的示例,请参阅 GitHub 上的将 Vertex AI 模型监控功能与 Explainable AI 特征归因搭配使用笔记本。

Vector Search 预测类

Vector Search 是一项托管式服务,用于构建相似度索引或矢量来执行相似度匹配。执行相似度匹配大致有下面两个步骤:

  1. 创建数据的矢量表示。数据可以是文本、图片、视频、音频或表格数据。

  2. Vector Search 使用所创建向量的端点对类似向量执行大规模、低延迟的搜索。

如需了解详情,请参阅 GitHub 上的 Vector Search 概览创建 Vector Search 索引笔记本。

MatchingEngineIndex

MatchingEngineIndex 类表示您创建的索引或向量,Vector Search 使用它们来执行相似度搜索。

可以在索引中使用下面两种搜索算法:

  1. TreeAhConfig 使用浅树 AH 算法(即使用非对称哈希的浅树)。使用 MatchingEngineIndex.create_tree_ah_index 可创建使用树 AH 算法的索引。
  2. BruteForceConfig 使用标准线性搜索。使用 MatchingEngineIndex.create_brute_force_index 可创建使用标准线性搜索的索引。

如需详细了解如何配置索引,请参阅配置索引

下面的代码示例演示了如何创建使用树 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" }
)

下面的代码示例演示了如何创建使用暴力算法的索引:

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

使用 MatchingEngineIndexEndpoint 类可创建和检索端点。将模型部署到端点后,您会获得一个 IP 地址,用以运行查询。

下面的代码示例演示了如何创建一个匹配引擎索引端点,然后向该端点部署一个匹配引擎索引:

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

后续步骤