如何自动启动 AI-Platform 作业?

How to start AI-Platform jobs automatically?

我创建了一个训练作业,我从大查询中获取数据、执行训练和部署模型。我想在这两种情况下自动开始训练:

  1. 向数据集添加了 1000 多个新行
  2. 有时间表(例如,每周一次)

我检查了 GCP Cloud Scheduler,但它似乎不适合我的情况。

Cloud Scheduler 是按计划触发培训的正确工具。 我不知道你的拦截器是什么!!

对于你的第一点,你不能。您不能放置触发器(在 BigQuery 或其他数据库上)以在 X 新行之后发送事件。为此,我建议您这样做:

  • 使用 Cloud Scheduler 安排工作(例如每 10 分钟一次)
  • 作业在 BigQuery 中执行请求并检查自上次训练作业以来的行数(最后一次训练作业的日期必须在某个地方,我建议在另一个 BigQuery 中 table)
    • 如果行数 > 1000,触发你的 运行 作业
    • 否则,退出函数

如您所见,这并不容易,有几个注意事项:

  • 部署模型时,还必须写上最新训练的日期
  • 您必须对 BigQuery 执行多次请求。正确分区您的 table 以限制成本

你觉得有意义吗?

编辑

gcloud 命令是 API 调用的“简单”包装器。尝试将参数 --http-log 添加到您的 gcloud 命令以查看调用了哪个 API 以及调用了哪些参数。

无论如何,你可以通过调用这个 API 来开始一个工作,如果你想和例子,使用 gcloud SDK 的 --http-log 参数!

对于任何寻找解决方案以按时提交培训工作的人,我在这里发布了我尝试了几次 ways.I 之后的解决方案,

  • 运行 通过使用 Airflow 的云作曲家
  • 使用启动脚本启动作业
  • 将 cron 与 Cloud schedulerPub/Sub 和 Cloud function
  • 结合使用

最简单且最具成本效益的方法是使用云调度程序和 AI-platform 具有云功能的客户端库

第 1 步 - 创建 pub/sub 主题(示例 start-training

第 2 步 - 使用针对 start-training 主题

的云调度程序创建 cron

第 3 步 - 使用 cloud pub/sub 触发器类型和 start-training 主题以及入口点 submit_job 创建云函数 function.This 函数提交训练作业到 AI-platform 通过 python 客户端库。

现在我们有了这个漂亮的 DAG

调度程序 -> Pub/Sub -> 云函数 -> AI-platform

云函数代码如下

main.py

import datetime
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

id = '<PROJECT ID>'
bucket_name = "<BUCKET NAME>"
project_id = 'projects/{}'.format(id)
job_name = "training_" + datetime.datetime.now().strftime("%y%m%d_%H%M%S")

def submit_job(event, context):

     training_inputs = {
     'scaleTier': 'BASIC',
     'packageUris': [f"gs://{bucket_name}/package/trainer-0.1.tar.gz"],
     'pythonModule': 'trainer.task',
     'region': 'asia-northeast1',
     'jobDir': f"gs://{bucket_name}",
     'runtimeVersion': '2.2',
     'pythonVersion': '3.7',
          }

     job_spec = {"jobId":job_name, "trainingInput": training_inputs}
     cloudml = discovery.build("ml" , "v1" ,cache_discovery=False)
     request = cloudml.projects().jobs().create(body=job_spec,parent=project_id)
     response = request.execute()

requirement.txt

google-api-python-client
oauth2client

重要

  • 确保使用 Project_id 而不是 Project_name ,否则会报权限错误

  • 如果出现 ImportError:file_cache is unavailable when using oauthclient .... 错误,请在构建函数中使用 cache_discovery=False,否则出于性能原因让函数使用缓存。

  • 指向正确的 GCS 位置到您的源包,在这种情况下,我的包名称是 trainer 构建并位于存储桶中的 package 文件夹中,主模块是 task