You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:54:08