2

我正在做一个应用程序,它接收一些数据,对其进行处理,然后创建一个预测 AI 批处理作业。预测完成后,我应该把它们全部拿走并将它们与以前的文件合并。批量预测写入存储桶,我们称之为 is gs://predictions

目前,我有一个云功能,只要gs://predictions写入就会触发。但是,批量预测作业将数据流式传输到文件中,当需要进行大量预测时,会多次更新此类文件。这意味着当我只想在作业完成时调用它时,我的云函数会被触发很多次。

为了克服这个问题,现在调用云函数,然后检查作业是否完成。如果是,则处理文件;如果没有,让它滑动。当然,这会带来很多不必要的处理(和不必要的代码!):-(

在这里真正对我有什么帮助:批处理作业完成后能否以某种方式写入 Pub/Sub?或者更好的是,它可以使用 webhook 以便在完成后自己调用我的云函数吗?我试图查看文档,但找不到任何东西。

有没有其他建议的解决方案?

4

2 回答 2

3

您可以在 PubSub 中创建一个日志接收器并在此自定义过滤器上过滤日志:

resource.type="ml_job"
textPayload="Job completed successfully."

然后,当批处理作业完成时,会打印日志跟踪并将消息发布到 PubSub 主题中。

于 2020-06-04T18:40:19.157 回答
0

参考文档Google Cloud Training job docs 为了获取 AI Platform 的作业状态,你可以使用 GCP 提供的 REST API,参考 jobs AI Platform jobs docs

GET 请求正文:

{
  "jobId": string,
  "createTime": string,
  "startTime": string,
  "endTime": string,
  "state": enum (State),  # This Field is what will tell you status of job
  "errorMessage": string,
  "labels": {
    string: string,
    ...
  },
  "etag": string,

  // Union field input can be only one of the following:
  "trainingInput": {
    object (TrainingInput)
  },
  "predictionInput": {
    object (PredictionInput)
  }
  // End of list of possible types for union field input.

  // Union field output can be only one of the following:
  "trainingOutput": {
    object (TrainingOutput)
  },
  "predictionOutput": {
    object (PredictionOutput)
  }
  // End of list of possible types for union field output.
}

状态字段是枚举

Enums
STATE_UNSPECIFIED   The job state is unspecified.
QUEUED              The job has been just created and processing has not yet begun.
PREPARING           The service is preparing to run the job.
RUNNING             The job is in progress.
SUCCEEDED           The job completed successfully.
FAILED              The job failed. errorMessage should contain the details of the failure.
CANCELLING          The job is being cancelled. errorMessage should describe the reason for the cancellation.
CANCELLED           The job has been cancelled. errorMessage should describe the reason for the cancellation.

注意:所有这些都可以通过 python 或任何其他选择的语言来完成。 使用 Python GCP 客户端库

于 2020-06-07T15:15:02.750 回答