如何从 GCP Cloud Build 管道中提交 GCP AI 平台培训作业?

How to submit a GCP AI Platform training job frominside a GCP Cloud Build pipeline?

我有一个非常标准的 CI 管道,使用 Cloud Build 作为我基于容器的机器学习训练模型:

现在在机器学习中,如果不使用真实数据进行测试就无法验证模型。通常我们添加 2 个额外的检查:

这允许捕获模型代码中的问题。在我的设置中,我的 Cloud Build 在构建 GCP 项目中,数据在另一个 GCP 项目中。

Q1:有人设法使用 Cloud Build 中的 AI Platform training 服务来训练另一个 GCP 项目中的数据吗?

Q2:如何让 Cloud Build 等待 AI Platform training 作业完成并检查状态 (successful/failed)?在查看文档 link 时,似乎唯一的选择是使用 --stream-logs,但它似乎不是最佳选择(使用这样的选项,我看到了一些巨大的延迟)

提交AI平台训练作业时,可以指定service account email to use.

确保服务帐户在其他项目中有足够的权限使用那里的数据。

对于你的第二个问题,你有2个答案

  • 如您所述使用--stream-logs。如果您不希望 Cloud Build 中的日志,您可以将标准输出 and/or 和标准错误重定向到 /dev/null
- name: name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
    - -c
    - |
         gcloud ai-platform jobs submit training <your params> --stream-logs >/dev/null 2>/dev/null

或者您可以创建一个检查状态的无限循环

- name: name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
    - -c
    - |
        JOB_NAME=<UNIQUE Job NAME>
        gcloud ai-platform jobs submit training $${JOB_NAME} <your params> 
        # test the job status every 60 seconds
        while [ -z "$$(gcloud ai-platform jobs describe $${JOB_NAME} | grep SUCCEEDED)" ]; do sleep 60; done

这里我的测试很简单,但您可以根据需要自定义状态测试

不要忘记按预期设置超时。