【问题标题】:How to start AI-Platform jobs automatically?如何自动启动 AI 平台作业?
【发布时间】:2020-06-27 15:42:30
【问题描述】:

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

  1. 超过 1000 个新行添加到数据集中
  2. 有时间表(例如,每周一次)

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    这对你有意义吗?

    编辑

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

    无论如何,您可以通过调用此API 来开始工作,如果您愿意,可以使用 gcloud SDK 的 --http-log 参数!

    【讨论】:

    • Cloud Scheduler 目标是 HTTP、Pub/Sub 和 App Engine HTTP,但为了创建 AI 平台作业,我需要 gcloud 命令。
    • 不,你不需要。我用更多细节编辑了我的答案。
    • 我不知道那部分,我想这就是答案,非常感谢
    • 你成功运行这个了吗?我们正在尝试部署一些非常相似的东西,但遇到了一个障碍:我们将 Google Scheduler 配置为通过 REST API 运行训练作业……但是,作业训练需要一个唯一的作业名称。有没有办法从调度程序中提供这样的唯一名称?
    【解决方案2】:

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

    • 使用 Airflow 运行 Cloud Composer
    • 使用启动脚本启动作业
    • 将 cron 与 Cloud scheduler、Pub/Sub 和 Cloud 功能结合使用

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

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

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

    第三步——创建云函数,触发器类型为cloud pub/sub,主题为start-training,入口点为submit_job函数。该函数通过python客户端库向AI平台提交训练作业。

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

    调度器 -> 发布/订阅 -> 云功能 -> 人工智能平台

    云功能代码是这样的

    ma​​in.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

    【讨论】:

    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 2010-11-16
    • 2012-03-29
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多