通过Google Cloud Function触发GCS中打包模型的训练 ***已解决***
本帖使用的方法已过时,你可查找VertexAI相关的自动批量预测方案获取最新实现。
问题描述
我是Cloud Functions和AI Platform Pipeline的新手,现有自定义模型存储在GCS中,本地可以通过training.sh脚本提交训练,脚本内容如下:
gcloud ai-platform jobs submit training model_training_$now \ --scale-tier basic \ --packages gs://my_project_bucket/my_package_model-0.1.2.tar.gz \ --module-name model.train_pipeline \ --job-dir=gs://my_project_bucket/trained_model \ --region europe-west1 \ --runtime-version=2.5 \ --python-version=3.7 \ -- \ --user_first_arg=first_arg_value --user_second_arg=second_arg_value
我需要实现的效果是:每次input_data存储桶有新文件上传时自动触发训练,目前已经在使用Cloud Functions做触发逻辑,但不清楚怎么用Kubeflow运行这个training.sh里的逻辑。
我参考的官方教程中给出了串行流水线的示例,通过创建ContainerOp来定义流水线步骤,示例代码如下:
def sequential_pipeline(filename='gs://ml-pipeline-playground/shakespeare1.txt'): """A pipeline with two sequential steps.""" op1 = dsl.ContainerOp( name='filechange', image='library/bash:4.4.23', command=['sh', '-c'], arguments=['echo "%s" > /tmp/results.txt' % filename], file_outputs={'newfile': '/tmp/results.txt'}) op2 = dsl.ContainerOp( name='echo', image='library/bash:4.4.23', command=['sh', '-c'], arguments=['echo "%s"' % op1.outputs['newfile']] )
我现在的疑问是:怎么定义类似的函数来运行我的training.sh?是否需要把我的模型包my_package_model-0.1.2.tar.gz容器化?
方案解答
你不需要单独把模型包容器化,直接适配现有逻辑的方案有两种:
- 方案一:直接用预装gcloud SDK的官方镜像运行训练命令,不需要额外打包容器
选择google/cloud-sdk:latest作为ContainerOp的基础镜像,把你原来的shell命令直接写到参数里即可,示例代码如下:import kfp.dsl as dsl def training_pipeline( now: str, user_first_arg: str = "first_arg_value", user_second_arg: str = "second_arg_value" ): submit_train_op = dsl.ContainerOp( name="submit-ai-platform-training", image="google/cloud-sdk:latest", command=["sh", "-c"], arguments=[ f""" gcloud ai-platform jobs submit training model_training_{now} \ --scale-tier basic \ --packages gs://my_project_bucket/my_package_model-0.1.2.tar.gz \ --module-name model.train_pipeline \ --job-dir=gs://my_project_bucket/trained_model \ --region europe-west1 \ --runtime-version=2.5 \ --python-version=3.7 \ -- \ --user_first_arg={user_first_arg} --user_second_arg={user_second_arg} """ ] ) # 配置服务账号权限,确保可以提交训练作业、读写GCS资源 submit_train_op.set_gcp_iam_service_account("<你的服务账号邮箱>@<你的项目ID>.iam.gserviceaccount.com") - 方案二:把训练逻辑打包成自定义镜像
如果后续训练逻辑会频繁迭代,可以把training.sh和相关依赖打包成自定义镜像上传到容器镜像服务,后续直接引用镜像即可,维护更灵活。
配套配置注意事项
- 给Kubeflow流水线绑定的服务账号开通对应权限:AI Platform训练作业创建权限、GCS存储桶读写权限
- Cloud Functions的触发逻辑不需要改动,检测到存储桶新文件上传后,调用Kubeflow流水线的运行接口,把需要的动态参数(比如时间戳、自定义参数值)传给流水线即可
- 后续如果要迁移到Vertex AI,只需要把命令里的
gcloud ai-platform替换为对应的gcloud ai命令即可,整体架构不用大幅调整
内容的提问来源于stack exchange,提问作者Annalix
相关产品推荐
相关产品推荐

