google-cloud-platform - 如何从 GCP Cloud Build 管道内提交 GCP AI Platform 训练作业?
问题描述
我有一个非常标准的CI
管道Cloud Build
用于基于容器的机器学习训练模型:
- 检查python错误使用flake8
- 使用 pylint、pydocstyle 检查语法和样式问题...
- 构建基础容器(CPU/GPU)
- 为我的模型构建一个专门的 ML 容器
- 检查已安装软件包的漏洞
- 运行测试单元
现在在机器学习中,如果不使用真实数据进行测试,就不可能验证模型。通常我们会添加 2 个额外的检查:
- 修复所有随机种子并在测试数据上运行,看看我们是否找到完全相同的结果
- 批量训练模型,看看我们是否可以过度拟合并使损失为零
这允许在模型代码中捕获问题。在我的设置中,我有Cloud Build
一个构建GCP
项目和另一个GCP
项目中的数据。
Q1:有人设法使用AI Platform training
服务Cloud Build
来训练另一个GCP
项目中的数据吗?
Q2:如何告诉 Cloud Build 等到AI Platform training
作业完成并检查状态(成功/失败)是什么?在查看要使用的文档链接时,似乎唯一的选择,--stream-logs
但似乎不是最佳选择(使用这样的选项,我看到了一些巨大的延迟)
解决方案
当您提交 AI 平台训练作业时,您可以指定要使用的服务帐户电子邮件。
确保服务帐户在其他项目中具有足够的权限以使用来自那里的数据。
对于你的第二个问题,你有 2 个解决方案
- 按照你说的使用
--stream-logs
。如果您不希望 Cloud Build 中的日志,您可以将 stdout 和/或 stderr 重定向到/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
这里我的测试很简单,但是您可以根据需要自定义状态测试
不要忘记按预期设置超时。
推荐阅读
- r - 从所述 data.frame 对象列表的列中的列表中添加 data.frame 对象的名称
- robocopy - 如果文件不存在,则将文件从源复制到目标
- android - ItemToucherHelper 不使用垂直 LinearLayoutManager 在 recyclerView 中滑动
- python - Custom CoreML output layer that sums multiArray output
- javascript - 为什么 npm install 在 Windows 10 上这么慢?
- django - 如何在视频群聊中获取远程用户的地理坐标?
- c - 如何让 readline() 在 Ctrl+C 上退出?
- javascript - Jest --findRelatedTests 标志未找到相关测试
- javascript - 重命名从服务器收到的变量名称?
- c# - 如何使用 C# ASP.Net Core 3.1 在服务器端检查 cookie 选项