我创建了一个培训工作,从大查询中获取数据,执行培训并部署模型。我想在这两种情况下自动开始训练:
我检查了GCP Cloud Scheduler,但似乎不适合我的情况。
答案 0 :(得分:2)
Cloud Scheduler是按时间表触发训练的正确工具。 我不知道你的阻拦剂是什么!
第一点,你不能。您无法放置触发器(在BigQuery或其他数据库上)以在X个新行之后发送事件。为此,我建议您这样做:
如您所见,这并不容易,并且有一些警告:
这对您有意义吗?
编辑
gcloud命令是API调用的“简单”包装器。尝试将参数--http-log
添加到您的gcloud命令中,以查看调用了哪个API以及使用了哪些参数。
无论如何,您可以通过调用此API来开始工作,如果需要并举例说明,请使用gcloud SDK的--http-log
参数!
答案 1 :(得分:0)
对于正在寻求解决方案以按计划提交培训工作的任何人,在这里我尝试了几种方法后发布了我的解决方案。
最简单,最具成本效益的方法是使用云调度程序和具有云功能的AI平台客户端库
第1步-创建发布/订阅主题(示例start-training
)
第2步-使用针对start-training
主题的云调度程序创建cron
第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