如何自动启动 AI-Platform 作业?
How to start AI-Platform jobs automatically?
我创建了一个训练作业,我从大查询中获取数据、执行训练和部署模型。我想在这两种情况下自动开始训练:
- 向数据集添加了 1000 多个新行
- 有时间表(例如,每周一次)
我检查了 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
我创建了一个训练作业,我从大查询中获取数据、执行训练和部署模型。我想在这两种情况下自动开始训练:
- 向数据集添加了 1000 多个新行
- 有时间表(例如,每周一次)
我检查了 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
主题
第 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