进行批量预测

请求批量预测是异步请求(与之相对的是在线预测,即同步请求)。您可以直接从模型资源请求批量预测;不需要将模型部署到端点。对于同时支持批量预测和在线预测的数据类型,如果您不需要立即响应并且希望通过一个请求处理累积数据,可使用批量预测。

要进行批量预测,您需要指定输入源和 Vertex AI 存储预测结果的输出位置。输入和输出取决于使用的模型类型。例如,AutoML 图片模型类型的批量预测需要输入 JSON 行文件和存储输出的 Cloud Storage 存储桶的名称。

批量请求输入

批量请求的输入指定要发送到模型进行预测的内容。以下内容提供了每种模型类型的输入格式要求。

自定义训练

要从自定义训练的模型获取批量预测结果,请通过以下任一方式准备输入数据:

JSON 行

使用 JSON 行文件指定用于进行预测的输入实例列表。将 JSON 行文件存储在 Cloud Storage 存储桶中。

示例 1

以下示例显示了输入 JSON 行文件中的两个实例:

[1, 2, 3, 4]
[5, 6, 7, 8]

以下是 HTTP 请求正文中发送到预测容器的内容:

{"instances": [
  [1, 2, 3, 4],
  [5, 6, 7, 8]
]}

示例 2

以下示例显示了输入 JSON 行文件中的两个实例,其中预测容器需要一个对象:

{"values": [1, 2, 3, 4], "key": 1}
{"values": [5, 6, 7, 8], "key": 2}

以下是 HTTP 请求正文中发送到预测容器的内容:

{"instances": [
  {"values": [1, 2, 3, 4], "key": 1},
  {"values": [5, 6, 7, 8], "key": 2}
]}

TFRecord

TFRecord 格式保存输入实例。您可以选择使用 Gzip 压缩 TFRecord 文件。将 TFRecord 文件存储在 Cloud Storage 存储桶中。

Vertex AI 将 TFRecord 文件中的每个实例读取为二进制文件,然后使用名为 b64 的单个键对实例进行 base64 编码,使其成为 JSON 对象。

以下是 HTTP 请求正文中发送到预测容器的内容:

{"instances": [
 {"b64","b64EncodedASCIIString"},
 {"b64","b64EncodedASCIIString"}
]}

确保您的预测容器知道如何解码实例。

CSV

在 CSV 文件中每行指定一个输入实例。第一行必须是标题行。您必须将所有字符串用英文双引号 (") 括起来。我们不接受包含换行符的单元值。不带英文引号的值会被读取为浮点数。

以下示例展示了包含两个输入实例的 CSV 文件:

"input1","input2","input3"
0.1,1.2,"cat1"
4.0,5.0,"cat2"

以下是 HTTP 请求正文中发送到预测容器的内容:

{"instances": [
 [0.1,1.2,"cat1"],
 [4.0,5.0,"cat2"]
]}

文件列表

创建一个文本文件,其中每一行是一个文件的 Cloud Storage URI。Vertex AI 将每个文件的内容读取为二进制文件,然后使用名为 b64 的单个键对实例进行 base64 编码,使其成为 JSON 对象。

如果您计划使用 Google Cloud 控制台获取批量预测结果,请将文件列表直接粘贴到 Google Cloud 控制台中。否则,请将文件列表保存在 Cloud Storage 存储桶中。

以下示例展示了包含两个输入实例的文件列表:

gs://path/to/image/image1.jpg
gs://path/to/image/image2.jpg

以下是 HTTP 请求正文中发送到预测容器的内容:

{"instances": [
 {"b64","b64EncodedASCIIString"},
 {"b64","b64EncodedASCIIString"}
]}

确保您的预测容器知道如何解码实例。

BigQuery

将 BigQuery 表指定为 projectId.datasetId.tableId。Vertex AI 将表中的每一行转换为 JSON 实例。

例如,如果您的表包含以下内容:

第 1 列 第 2 列 第 3 列
1.0 3.0 "Cat1"
2.0 4.0 "Cat2"

以下是 HTTP 请求正文中发送到预测容器的内容:

{"instances": [
 [1.0,3.0,"cat1"],
 [2.0,4.0,"cat2"]
]}

以下是将 BigQuery 数据类型转换为 JSON 的方式:

BigQuery 类型 JSON 类型 示例值
字符串 字符串 "abc"
整数 整数 1
浮点数 浮点数 1.2
数字 浮点数 4925.000000000
布尔值 布尔值
TimeStamp 字符串 "2019-01-01 23:59:59.999999+00:00"
日期 字符串 "2018-12-31"
时间 字符串 "23:59:59.999999"
DateTime 字符串 "2019-01-01T00:00:00"
Record 对象 { "A": 1,"B": 2}
重复类型 数组类型 [1, 2]
嵌套记录 对象 {"A": {"a": 0}, "B": 1}

图片

使用 JSON 行文件指定用于进行预测的图片列表,然后将 JSON 行文件存储在 Cloud Storage 存储桶中。以下示例显示了输入 JSON 行文件中的一行。

{"content": "gs://sourcebucket/datasets/images/source_image.jpg", "mimeType": "image/jpeg"}

表格

对于表格数据,您可以使用 Cloud Storage 存储桶中的 CSV 文件或 BigQuery 中的表。您可以在 Cloud Storage 中以 CSV 格式或 BigQuery 表的形式提供预测数据。 我们建议您对训练和预测数据使用相同的输入格式。由于 Vertex AI 将所有 CSV 输入字段都视为字符串,因此在训练和预测中使用不同的输入格式可能会导致错误。例如,如果您使用 BigQuery 中的数据训练模型,最好使用 BigQuery 表作为批量预测的源。

您的数据源中的表格数据必须包含用于训练模型的所有列(可以是任意顺序)。您可以添加不属于训练数据的列,或者属于训练数据但不用于训练的列。这些额外的列包含在预测输出中,但不用于生成预测。

您无需为预测数据使用相同的目的地。例如,如果您对预测数据源使用了 BigQuery,则可以将结果发送到 Cloud Storage 中的 CSV 文件。

BigQuery 表要求

  • BigQuery 数据源表不得大于 100 GB。
  • 必须使用 USEU 位置的多区域 BigQuery 数据集。
  • 如果该表属于其他项目,您必须向该项目中的 Vertex AI 服务帐号提供 BigQuery Data Editor 角色。

CSV 文件要求

  • 数据源必须以包含列名称的标题行开头。
  • 每个数据源文件不得大于 10 GB。 可以包含多个文件,但总大小不得超过 100 GB。
  • 如果 Cloud Storage 存储桶所在项目与您使用 Vertex AI 的项目不同,则必须为该项目中的 Vertex AI 服务帐号提供 Storage Object Creator 角色。
  • 所有字符串必须用英文双引号 (") 括起来。

预测要求

除了 BigQuery 表格或 CSV 文件要求之外,预测模型的输入也必须满足以下要求:

  • 时间列中的所有值都必须存在且有效。
  • 批量预测表中的数据频率必须与训练数据的频率相同。时间序列中不能有缺失的行。根据适当的领域知识手动插入缺失的行。
  • 系统会将存在重复时间戳的时间序列从预测中移除。如需包含这些时间戳,请移除任何重复的时间戳。
  • 为要预测的每个时间序列提供历史数据。为了获得最准确的预测,数据量应该与训练中设置的上下文时段相等。如果您提供较少的数据,Vertex AI 会填充包含空值的数据。例如,如果上下文时段为 14 天,请提供至少 14 天的历史数据。
  • 预测从时间序列(第一行按时间排序)的第一行开始,目标列中具有 null 值。null 值在时间序列中必须是连续的。例如,如果目标列按时间排序,您不能将“1”、“2”、“null”、“3”、“4”、“null”、“null”之类的用于单个时间序列。对于 CSV 文件,Vertex AI 将空字符串视为 null;对于 BigQuery,原生支持 null 值。

文本

分类和情感分析

使用 JSON 行文件指定用于进行预测的文档列表,然后将 JSON 行文件存储在 Cloud Storage 存储桶中。以下示例显示了输入 JSON 行文件中的一行。

{"content": "gs://sourcebucket/datasets/texts/source_text.txt", "mimeType": "text/plain"}

实体提取

对于实体提取,您可以包含内嵌文本或对 Cloud Storage 存储桶中的文档的引用。对于每个文档,您还可以向输入添加 key 字段。

通常,批量预测结果使用 instance 字段(包含 contentmimeType 字段)来映射输入和输出。如果您在输入中使用 key 字段,批量预测输出会将 instance 字段替换为 key 字段。例如,如果输入包含大型文本片段,这有助于简化批量预测输出。

以下示例显示了一个 JSON 行文件,包含带有和不带 key 字段的文档引用和内嵌文本片段。

{"content": "gs://sourcebucket/datasets/texts/source_text.txt", "mimeType": "text/plain"}
{"content": "gs://bucket/sample.txt", "mimeType": "text/plain", "key": "sample-file"}
{"content": "Text snippet", "mimeType": "text/plain"}
{"content": "Sample text snippet", "mimeType": "text/plain", "key": "sample-snippet"}

视频

使用 JSON 行文件指定要进行预测的视频列表,然后将 JSON 行文件存储在 Cloud Storage 存储桶中。您可以为 timeSegmentEnd 字段指定 Infinity,以指定视频结尾。以下示例显示了输入 JSON 行文件中的一行。

{'content': 'gs://sourcebucket/datasets/videos/source_video.mp4', 'mimeType': 'video/mp4', 'timeSegmentStart': '0.0s', 'timeSegmentEnd': '2.366667s'}

请求批量预测

对于批量预测请求,您可以使用 Google Cloud Console 或 Vertex AI API。批量预测任务可能需要一些时间才能完成,具体取决于提交的输入数据项数量。

Google Cloud 控制台

使用 Google Cloud 控制台请求批量预测。

  1. 在 Google Cloud 控制台的 Vertex AI 部分中,前往批量预测页面。

    前往“批量预测”页面

  2. 点击创建以打开新建批量预测窗口。

  3. 定义批量预测部分,完成以下步骤:

    自定义训练

    1. 输入批量预测的名称。
    2. 对于模型名称,选择要用于此批量预测的模型的名称。
    3. 版本部分,选择要用于此批量预测的模型版本。
    4. 对于选择来源
      • 如果您已将输入设置为 JSON 行、CSV 或 TFRecord 格式,请选择 Cloud Storage 上的文件(JSON 行、CSV、TFRecord、TFRecord、Gzip)。然后在源路径字段中指定输入文件。
      • 如果您使用文件列表作为输入,请选择 Cloud Storage 上的文件(其他),然后将文件列表粘贴到下面的文本框中。
      • 对于 BigQuery 输入,选择 BigQuery 路径。如果您选择 BigQuery 作为输入,则还必须选择 BigQuery 作为输出。
    5. 目标路径字段中,指定您希望 Vertex AI 存储批量预测输出的 Cloud Storage 目录。
    6. (可选)您可以选中为此模型启用特征归因,以便在批量预测响应中获取特征归因。然后点击修改配置说明设置。(如果您之前为模型配置了说明设置,则修改说明设置是可选的,否则需要这样做。)
    7. 为批量预测作业指定计算选项:计算节点数量机器类型,以及(可选)加速器类型加速器数量

    图片、文本或视频

    1. 输入批量预测的名称。
    2. 对于模型名称,选择要用于此批量预测的模型的名称。
    3. 对于来源路径,指定 JSON 行输入文件所在的 Cloud Storage 位置。
    4. 对于目标路径,指定存储批量预测结果的 Cloud Storage 位置。输出格式取决于模型的目标。例如,用于文本目标的 AutoML 模型输出 JSON 行文件。

    表格

    1. 输入批量预测的名称。
    2. 对于模型名称,选择要用于此批量预测的模型的名称。
    3. 对于选择来源,选择源输入数据是 Cloud Storage 上的 CSV 文件还是 BigQuery 中的表。
      • 对于 CSV 文件,请指定 CSV 输入文件所在的 Cloud Storage 位置。
      • 对于 BigQuery 表,请指定表所在的项目 ID、BigQuery 数据集 ID 以及 BigQuery 表或视图 ID。
    4. 对于输出,选择 CSVBigQuery
      • 对于 CSV,请指定 Vertex AI 存储输出的 Cloud Storage 存储桶。
      • 对于 BigQuery,您可以指定项目 ID 或现有数据集:
        • 如需指定项目 ID,请在 Google Cloud 项目 ID 字段中输入项目 ID。Vertex AI 会为您创建新的输出数据集。
        • 如需指定现有数据集,请在 Google Cloud 项目 ID 字段中输入其 BigQuery 路径,例如 bq://projectid.datasetid
      • 如果您将 BigQuery 指定为输出的目标位置,并且希望返回预测结果的特征重要性值,请选中生成特征重要性复选框。

        如果 Cloud Storage 中返回预测数据或预测模型,则不支持特征重要性。

  4. 可选:模型监控分析适用于表格自定义训练模型和表格 AutoML 模型。请参照前提条件,向批量预测作业添加偏差检测配置。

    1. 点击以为此批量预测启用模型监控

    2. 选择训练数据源

    3. 为您选择的训练数据源输入训练数据路径

  5. 点击创建

API

使用 Vertex AI API 发送批量预测请求。

自定义训练

根据您用于获取批量预测结果的工具选择相应的标签页:

REST 和命令行

如需查看 REST API 参考文档,请参阅 BatchPredictionJob

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:存储模型和执行批量预测作业的区域。例如 us-central1

  • PROJECT:您的项目 ID。

  • BATCH_JOB_NAME:批量预测作业的显示名。

  • MODEL_ID:用于执行预测的模型的 ID。

  • INPUT_FORMAT输入数据格式jsonlcsvtf-recordtf-record-gzipfile-list

  • INPUT_URI:输入数据的 Cloud Storage URI。可能包含通配符。

  • OUTPUT_DIRECTORY:您希望 Vertex AI 用于保存输出的目录的 Cloud Storage URI。

  • MACHINE_TYPE:要用于此批量预测作业的机器资源

    您可以选择配置 machineSpec 字段使用加速器,但以下示例未展示这一设置。

  • BATCH_SIZE:每个预测请求中发送的实例数;默认值为 64。增加批次大小可以产生更高的吞吐量,但也可能会导致请求超时。

  • STARTING_REPLICA_COUNT:此批量预测作业的节点数。

HTTP 方法和网址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs

请求 JSON 正文:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT/locations/LOCATION/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "INPUT_FORMAT",
    "gcsSource": {
      "uris": ["INPUT_URI"],
    },
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY",
    },
  },
  "dedicatedResources" : {
    "machineSpec" : {
      "machineType": MACHINE_TYPE
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT
  },
  "manualBatchTuningParameters": {
    "batch_size": BATCH_SIZE,
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID",
  "displayName": "BATCH_JOB_NAME 202005291958",
  "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "jsonl",
    "gcsSource": {
      "uris": [
        "INPUT_URI"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
}

Java

如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Java API 参考文档

在以下示例中,将 PREDICTIONS_FORMAT 替换为 jsonl。如需了解如何替换其他占位符,请参阅本部分的 REST & CMD LINE 标签页。

import com.google.cloud.aiplatform.util.ValueConverter;
import com.google.cloud.aiplatform.v1.AcceleratorType;
import com.google.cloud.aiplatform.v1.BatchDedicatedResources;
import com.google.cloud.aiplatform.v1.BatchPredictionJob;
import com.google.cloud.aiplatform.v1.GcsDestination;
import com.google.cloud.aiplatform.v1.GcsSource;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.MachineSpec;
import com.google.cloud.aiplatform.v1.ModelName;
import com.google.protobuf.Value;
import java.io.IOException;

public class CreateBatchPredictionJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String modelName = "MODEL_NAME";
    String instancesFormat = "INSTANCES_FORMAT";
    String gcsSourceUri = "GCS_SOURCE_URI";
    String predictionsFormat = "PREDICTIONS_FORMAT";
    String gcsDestinationOutputUriPrefix = "GCS_DESTINATION_OUTPUT_URI_PREFIX";
    createBatchPredictionJobSample(
        project,
        displayName,
        modelName,
        instancesFormat,
        gcsSourceUri,
        predictionsFormat,
        gcsDestinationOutputUriPrefix);
  }

  static void createBatchPredictionJobSample(
      String project,
      String displayName,
      String model,
      String instancesFormat,
      String gcsSourceUri,
      String predictionsFormat,
      String gcsDestinationOutputUriPrefix)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient client = JobServiceClient.create(settings)) {

      // Passing in an empty Value object for model parameters
      Value modelParameters = ValueConverter.EMPTY_VALUE;

      GcsSource gcsSource = GcsSource.newBuilder().addUris(gcsSourceUri).build();
      BatchPredictionJob.InputConfig inputConfig =
          BatchPredictionJob.InputConfig.newBuilder()
              .setInstancesFormat(instancesFormat)
              .setGcsSource(gcsSource)
              .build();
      GcsDestination gcsDestination =
          GcsDestination.newBuilder().setOutputUriPrefix(gcsDestinationOutputUriPrefix).build();
      BatchPredictionJob.OutputConfig outputConfig =
          BatchPredictionJob.OutputConfig.newBuilder()
              .setPredictionsFormat(predictionsFormat)
              .setGcsDestination(gcsDestination)
              .build();
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-2")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_K80)
              .setAcceleratorCount(1)
              .build();
      BatchDedicatedResources dedicatedResources =
          BatchDedicatedResources.newBuilder()
              .setMachineSpec(machineSpec)
              .setStartingReplicaCount(1)
              .setMaxReplicaCount(1)
              .build();
      String modelName = ModelName.of(project, location, model).toString();
      BatchPredictionJob batchPredictionJob =
          BatchPredictionJob.newBuilder()
              .setDisplayName(displayName)
              .setModel(modelName)
              .setModelParameters(modelParameters)
              .setInputConfig(inputConfig)
              .setOutputConfig(outputConfig)
              .setDedicatedResources(dedicatedResources)
              .build();
      LocationName parent = LocationName.of(project, location);
      BatchPredictionJob response = client.createBatchPredictionJob(parent, batchPredictionJob);
      System.out.format("response: %s\n", response);
      System.out.format("\tName: %s\n", response.getName());
    }
  }
}

Python

如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Python API 参考文档

def create_batch_prediction_job_dedicated_resources_sample(
    project: str,
    location: str,
    model_resource_name: str,
    job_display_name: str,
    gcs_source: Union[str, Sequence[str]],
    gcs_destination: str,
    machine_type: str = "n1-standard-2",
    accelerator_count: int = 1,
    accelerator_type: Union[str, aiplatform_v1.AcceleratorType] = "NVIDIA_TESLA_K80",
    starting_replica_count: int = 1,
    max_replica_count: int = 1,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    my_model = aiplatform.Model(model_resource_name)

    batch_prediction_job = my_model.batch_predict(
        job_display_name=job_display_name,
        gcs_source=gcs_source,
        gcs_destination_prefix=gcs_destination,
        machine_type=machine_type,
        accelerator_count=accelerator_count,
        accelerator_type=accelerator_type,
        starting_replica_count=starting_replica_count,
        max_replica_count=max_replica_count,
        sync=sync,
    )

    batch_prediction_job.wait()

    print(batch_prediction_job.display_name)
    print(batch_prediction_job.resource_name)
    print(batch_prediction_job.state)
    return batch_prediction_job

特征重要性

如果您希望返回预测结果的特征重要性值,请将 generateExplanation 属性设置为 true。请注意,预测模型不支持特征重要性,因此您无法在批量预测请求中包含该模型。

特征重要性(有时称为特征归因)是 Vertex Explainable AI 的一部分。

只有在为说明配置了 Model 或指定 BatchPredictionJobexplanationSpec 字段时,才能将 generateExplanation 设置为 true

图片

以下批量预测示例适用于分类和对象检测目标。

REST 和命令行

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:存储模型和执行批量预测作业的区域。例如 us-central1
  • PROJECT:您的项目 ID
  • BATCH_JOB_NAME:批处理作业的显示名
  • MODEL_ID:用于执行预测的模型的 ID
  • THRESHOLD_VALUE(可选):Vertex AI 仅返回置信度分数至少为此值的预测。默认值为 0.0
  • MAX_PREDICTIONS(可选):从具有最高置信度分数的预测开始,Vertex AI 返回的预测的数量上限。默认值为 10
  • URI:输入 JSON 行文件所在的 Cloud Storage URI。
  • BUCKET:您的 Cloud Storage 存储桶
  • PROJECT_NUMBER:您的项目编号

HTTP 方法和网址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs

请求 JSON 正文:

{
    "displayName": "BATCH_JOB_NAME",
    "model": "projects/PROJECT/locations/LOCATION/models/MODEL_ID",
    "modelParameters": {
      "confidenceThreshold": THRESHOLD_VALUE,
      "maxPredictions": MAX_PREDICTIONS
    },
    "inputConfig": {
        "instancesFormat": "jsonl",
        "gcsSource": {
            "uris": ["URI"],
        },
    },
    "outputConfig": {
        "predictionsFormat": "jsonl",
        "gcsDestination": {
            "outputUriPrefix": "OUTPUT_BUCKET",
        },
    },
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID",
  "displayName": "BATCH_JOB_NAME 202005291958",
  "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "jsonl",
    "gcsSource": {
      "uris": [
        "CONTENT"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "BUCKET"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
  "modelDisplayName": "MODEL_NAME",
  "modelObjective": "MODEL_OBJECTIVE"
}

您可以使用 BATCH_JOB_ID 轮询批量作业的状态,直到作业 stateJOB_STATE_SUCCEEDED

Python

如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Python API 参考文档

def create_batch_prediction_job_sample(
    project: str,
    location: str,
    model_resource_name: str,
    job_display_name: str,
    gcs_source: Union[str, Sequence[str]],
    gcs_destination: str,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    my_model = aiplatform.Model(model_resource_name)

    batch_prediction_job = my_model.batch_predict(
        job_display_name=job_display_name,
        gcs_source=gcs_source,
        gcs_destination_prefix=gcs_destination,
        sync=sync,
    )

    batch_prediction_job.wait()

    print(batch_prediction_job.display_name)
    print(batch_prediction_job.resource_name)
    print(batch_prediction_job.state)
    return batch_prediction_job

表格

请求批量预测所需的代码取决于预测数据是 Cloud Storage 中的 CSV 文件还是 BigQuery 表。您可以为预测数据和输出目标使用不同的格式(Cloud Storage 或 BigQuery)。如果预测数据所在项目与运行 Vertex AI 的项目不同,请确保设置所需的权限

使用 CSV 文件请求批量预测

REST 和命令行

可以使用 batchPredictionJobs.create 方法请求批量预测。

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:存储模型和执行批量预测作业的区域。例如 us-central1
  • PROJECT:您的项目 ID
  • BATCH_JOB_NAME:批处理作业的显示名
  • MODEL_ID:用于执行预测的模型的 ID
  • URI:包含训练数据的 Cloud Storage 存储桶的路径 (URI)。可以有多个路径。每个 URI 的格式如下:
    gs://bucketName/pathToFileName
    
  • OUTPUT_URI_PREFIX:将写入预测的 Cloud Storage 目标路径。Vertex AI 会将批量预测写入此路径上带时间戳的子目录中。将此值设置为采用以下格式的字符串:
    gs://bucketName/pathToOutputDirectory
    
  • MACHINE_TYPE:要用于此批量预测作业的机器资源。了解详情
  • STARTING_REPLICA_COUNT:此批量预测作业的起始节点数。节点数可根据负载增加或减少,不得超过节点数上限,但始终不会低于此数量。
  • MAX_REPLICA_COUNT:此批量预测作业的节点数上限。节点数可根据负载增加或减少,但始终不会超出此上限。(可选)默认值为 10。

HTTP 方法和网址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs

请求 JSON 正文:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "MODEL_ID",
  "inputConfig": {
    "instancesFormat": "csv",
    "gcsSource": {
      "uris": [
        URI1,...
      ]
    },
  },
  "outputConfig": {
    "predictionsFormat": "csv",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    }
  },
  "dedicatedResources": {
    "machineSpec": {
      "machineType": "MACHINE_TYPE",
      "acceleratorCount": "0"
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT,
    "maxReplicaCount": MAX_REPLICA_COUNT
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/12345/locations/us-central1/batchPredictionJobs/67890",
  "displayName": "batch_job_1 202005291958",
  "model": "projects/12345/locations/us-central1/models/5678",
  "state": "JOB_STATE_PENDING",
  "inputConfig": {
    "instancesFormat": "csv",
    "gcsSource": {
      "uris": [
        "gs://bp_bucket/reg_mode_test"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "csv",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    }
  },
  "dedicatedResources": {
    "machineSpec": {
      "machineType": "n1-standard-32",
      "acceleratorCount": "0"
    },
    "startingReplicaCount": 2,
    "maxReplicaCount": 6
  },
  "manualBatchTuningParameters": {
    "batchSize": 4
  }
  "outputInfo": {
    "gcsOutputDataset": "OUTPUT_URI_PREFIX/prediction-batch_job_1 202005291958-2020-09-30T02:58:44.341643Z"
  }
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-09-30T02:58:44.341643Z",
  "updateTime": "2020-09-30T02:58:44.341643Z",
}

在 Cloud Storage 中返回预测数据时,不支持特征重要性。

使用 BigQuery 请求批量预测

REST 和命令行

可以使用 batchPredictionJobs.create 方法请求批量预测。

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:存储模型和执行批量预测作业的区域。例如 us-central1
  • PROJECT:您的项目 ID
  • BATCH_JOB_NAME:批处理作业的显示名
  • MODEL_ID:用于执行预测的模型的 ID
  • INPUT_URI:对 BigQuery 数据源的引用。在此表单中执行以下操作:
    bq://bqprojectId.bqDatasetId.bqTableId
    
  • OUTPUT_URI:对 BigQuery 目标位置(将写入预测结果的位置)的引用。指定项目 ID,并选择性地指定数据集 ID。如果您仅指定了项目 ID,Vertex AI 会为您创建一个新的输出数据集。请使用以下格式:
    bq://bqprojectId.bqDatasetId
    
  • MACHINE_TYPE:要用于此批量预测作业的机器资源。了解详情
  • STARTING_REPLICA_COUNT:此批量预测作业的起始节点数。节点数可根据负载增加或减少,不得超过节点数上限,但始终不会低于此数量。
  • MAX_REPLICA_COUNT:此批量预测作业的节点数上限。节点数可根据负载增加或减少,但始终不会超出此上限。(可选)默认值为 10。

HTTP 方法和网址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs

请求 JSON 正文:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "MODEL_ID",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "INPUT_URI"
    }
  },
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
      "outputUri": "OUTPUT_URI"
    }
  },
  "dedicatedResources": {
    "machineSpec": {
      "machineType": "MACHINE_TYPE",
      "acceleratorCount": "0"
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT,
    "maxReplicaCount": MAX_REPLICA_COUNT
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/12345/locations/us-central1/batchPredictionJobs/67890",
  "displayName": "batch_job_1 202005291958",
  "model": "projects/12345/locations/us-central1/models/5678",
  "state": "JOB_STATE_PENDING",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "INPUT_URI"
    }
  },
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
        "outputUri": bq://12345
    }
  },
  "dedicatedResources": {
    "machineSpec": {
      "machineType": "n1-standard-32",
      "acceleratorCount": "0"
    },
    "startingReplicaCount": 2,
    "maxReplicaCount": 6
  },
  "manualBatchTuningParameters": {
    "batchSize": 4
  },
  "generateExplanation": false,
  "outputInfo": {
    "bigqueryOutputDataset": "bq://12345.reg_model_2020_10_02_06_04
  }
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-09-30T02:58:44.341643Z",
  "updateTime": "2020-09-30T02:58:44.341643Z",
}

Java

如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Java API 参考文档

在以下示例中,将 INSTANCES_FORMATPREDICTIONS_FORMAT 替换为 bigquery。如需了解如何替换其他占位符,请参阅本部分的 REST & CMD LINE 标签页。

import com.google.cloud.aiplatform.v1.BatchPredictionJob;
import com.google.cloud.aiplatform.v1.BigQueryDestination;
import com.google.cloud.aiplatform.v1.BigQuerySource;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.ModelName;
import com.google.gson.JsonObject;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.io.IOException;

public class CreateBatchPredictionJobBigquerySample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String modelName = "MODEL_NAME";
    String instancesFormat = "INSTANCES_FORMAT";
    String bigquerySourceInputUri = "BIGQUERY_SOURCE_INPUT_URI";
    String predictionsFormat = "PREDICTIONS_FORMAT";
    String bigqueryDestinationOutputUri = "BIGQUERY_DESTINATION_OUTPUT_URI";
    createBatchPredictionJobBigquerySample(
        project,
        displayName,
        modelName,
        instancesFormat,
        bigquerySourceInputUri,
        predictionsFormat,
        bigqueryDestinationOutputUri);
  }

  static void createBatchPredictionJobBigquerySample(
      String project,
      String displayName,
      String model,
      String instancesFormat,
      String bigquerySourceInputUri,
      String predictionsFormat,
      String bigqueryDestinationOutputUri)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      JsonObject jsonModelParameters = new JsonObject();
      Value.Builder modelParametersBuilder = Value.newBuilder();
      JsonFormat.parser().merge(jsonModelParameters.toString(), modelParametersBuilder);
      Value modelParameters = modelParametersBuilder.build();
      BigQuerySource bigquerySource =
          BigQuerySource.newBuilder().setInputUri(bigquerySourceInputUri).build();
      BatchPredictionJob.InputConfig inputConfig =
          BatchPredictionJob.InputConfig.newBuilder()
              .setInstancesFormat(instancesFormat)
              .setBigquerySource(bigquerySource)
              .build();
      BigQueryDestination bigqueryDestination =
          BigQueryDestination.newBuilder().setOutputUri(bigqueryDestinationOutputUri).build();
      BatchPredictionJob.OutputConfig outputConfig =
          BatchPredictionJob.OutputConfig.newBuilder()
              .setPredictionsFormat(predictionsFormat)
              .setBigqueryDestination(bigqueryDestination)
              .build();
      String modelName = ModelName.of(project, location, model).toString();
      BatchPredictionJob batchPredictionJob =
          BatchPredictionJob.newBuilder()
              .setDisplayName(displayName)
              .setModel(modelName)
              .setModelParameters(modelParameters)
              .setInputConfig(inputConfig)
              .setOutputConfig(outputConfig)
              .build();
      LocationName parent = LocationName.of(project, location);
      BatchPredictionJob response = client.createBatchPredictionJob(parent, batchPredictionJob);
      System.out.format("response: %s\n", response);
      System.out.format("\tName: %s\n", response.getName());
    }
  }
}

Python

如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Python API 参考文档

在以下示例中,将 instances_formatpredictions_format 参数设置为 "bigquery"。如需了解如何设置其他参数,请参阅本部分的 REST & CMD LINE 标签页。