如何从 GCP Cloud Build 管道中提交 GCP AI 平台培训作业?
How to submit a GCP AI Platform training job frominside a GCP Cloud Build pipeline?
我有一个非常标准的 CI
管道,使用 Cloud Build
作为我基于容器的机器学习训练模型:
- 检查python错误使用flake8
- 使用 pylint、pydocstyle 检查语法和样式问题...
- 构建基础容器 (CPU/GPU)
- 为我的模型构建一个专门的 ML 容器
- 检查安装包的漏洞
- 运行 测试单位
现在在机器学习中,如果不使用真实数据进行测试就无法验证模型。通常我们添加 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
这里我的测试很简单,但您可以根据需要自定义状态测试
不要忘记按预期设置超时。
我有一个非常标准的 CI
管道,使用 Cloud Build
作为我基于容器的机器学习训练模型:
- 检查python错误使用flake8
- 使用 pylint、pydocstyle 检查语法和样式问题...
- 构建基础容器 (CPU/GPU)
- 为我的模型构建一个专门的 ML 容器
- 检查安装包的漏洞
- 运行 测试单位
现在在机器学习中,如果不使用真实数据进行测试就无法验证模型。通常我们添加 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
这里我的测试很简单,但您可以根据需要自定义状态测试
不要忘记按预期设置超时。