如何自动启动AI平台作业?

时间:2020-06-27 15:42:30

标签: google-cloud-platform gcp-ai-platform-training

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

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

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

2 个答案:

答案 0 :(得分:2)

Cloud Scheduler是按时间表触发训练的正确工具。 我不知道你的阻拦剂是什么!

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

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

如您所见,这并不容易,并且有一些警告:

  • 部署模型时,还必须写下最新训练的日期
  • 您必须多次将请求执行到BigQuery中。正确地划分您的表以限制成本

这对您有意义吗?

编辑

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

无论如何,您可以通过调用此API来开始工作,如果需要并举例说明,请使用gcloud SDK的--http-log参数!

答案 1 :(得分:0)

对于正在寻求解决方案以按计划提交培训工作的任何人,在这里我尝试了几种方法后发布了我的解决方案。

  • 使用Airflow在云作曲家中运行
  • 使用开始脚本开始工作
  • 将cron与Cloud Scheduler,Pub / Sub和Cloud功能配合使用

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

第1步-创建发布/订阅主题(示例start-training

第2步-使用针对start-training主题的云调度程序创建cron

enter image description here

第3步-使用触发器类型为cloud pub/sub,主题为start-training和入口点为submit_job的函数创建云函数。此函数通过python客户端将训练作业提交给AI平台库。

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

计划程序->发布/订阅->云功能-> AI平台

云功能代码如下

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