如何使用AutoMLImageTrainingJobRunOp实现模型版本控制?
在Vertex AI流水线中实现AutoML模型版本控制的代码方案
针对你提到的AutoMLImageTrainingJobRunOp没有parent_model参数的问题,有两种可行的代码实现方式:
方法一:用原生SDK封装训练逻辑到流水线
原生的AutoMLImageTrainingJob类支持指定parent_model参数,你可以通过PythonFunctionOp将该训练逻辑封装进流水线,实现模型版本迭代:
from kfp.v2 import dsl from kfp.v2.dsl import component from google.cloud import aiplatform @component(base_image="google-cloud-aiplatform:latest") def train_automl_image_version(parent_model_resource_name: str, project: str, location: str, dataset_resource_name: str): aiplatform.init(project=project, location=location) # 初始化AutoML图像训练任务,指定父模型 training_job = aiplatform.AutoMLImageTrainingJob( display_name="automl-image-versioned-training", prediction_type="classification", # 根据你的任务类型调整 multi_label=False, # 根据你的任务类型调整 parent_model=parent_model_resource_name ) # 启动训练,关联数据集 model = training_job.run( dataset=dataset_resource_name, model_display_name="automl-image-model-v2", training_fraction_split=0.8, validation_fraction_split=0.1, test_fraction_split=0.1, sync=False ) return model.resource_name # 定义流水线 @dsl.pipeline(name="automl-image-versioning-pipeline") def pipeline( project: str = "your-project-id", location: str = "us-central1", parent_model_resource_name: str = "projects/your-project-id/locations/us-central1/models/your-parent-model-id", dataset_resource_name: str = "projects/your-project-id/locations/us-central1/datasets/your-dataset-id" ): train_task = train_automl_image_version( parent_model_resource_name=parent_model_resource_name, project=project, location=location, dataset_resource_name=dataset_resource_name )
方法二:训练后上传为父模型的新版本
如果必须使用AutoMLImageTrainingJobRunOp,可以在训练完成后,将生成的模型通过Model.upload关联到父模型,创建新版本:
from kfp.v2 import dsl from kfp.v2.dsl import component from google_cloud_pipeline_components.v1.automl import AutoMLImageTrainingJobRunOp from google.cloud import aiplatform @component(base_image="google-cloud-aiplatform:latest") def create_model_version(parent_model_resource_name: str, trained_model_resource_name: str, project: str, location: str): aiplatform.init(project=project, location=location) # 获取训练生成的模型信息 trained_model = aiplatform.Model(trained_model_resource_name) # 上传为父模型的新版本 model_version = aiplatform.Model.upload( display_name="automl-image-model-v2", parent_model=parent_model_resource_name, artifact_uri=trained_model.uri, serving_container_image_uri=trained_model.serving_container_image_uri ) return model_version.resource_name # 定义流水线 @dsl.pipeline(name="automl-image-versioning-pipeline") def pipeline( project: str = "your-project-id", location: str = "us-central1", parent_model_resource_name: str = "projects/your-project-id/locations/us-central1/models/your-parent-model-id", dataset_resource_name: str = "projects/your-project-id/locations/us-central1/datasets/your-dataset-id" ): # 用AutoMLImageTrainingJobRunOp完成训练 train_task = AutoMLImageTrainingJobRunOp( project=project, location=location, display_name="automl-image-training", prediction_type="classification", multi_label=False, dataset=dataset_resource_name, model_display_name="temp-automl-model" ) # 将训练后的模型转为父模型的新版本 create_version_task = create_model_version( parent_model_resource_name=parent_model_resource_name, trained_model_resource_name=train_task.outputs["model"], project=project, location=location )
注意事项
- 确保使用的服务账号拥有
aiplatform.models.createVersion等相关权限 parent_model_resource_name需要替换为你现有AutoML模型的完整资源名称,可通过Vertex AI控制台或aiplatform.Model.list()获取
内容的提问来源于stack exchange,提问作者schoon
相关产品推荐
相关产品推荐

