如何通过Python SDK在Vertex AI中为AutoML模型创建新版本?
在Vertex AI Pipeline中为AutoML模型创建新版本的解决方案
问题背景
Vertex AI的Model Registry支持存储训练完成的模型并追踪其版本,但通过Python SDK构建Pipeline时,每次运行AutoML Tabular训练步骤都会创建同名的新模型,而非为现有模型生成新版本。
当前使用的AutoML训练组件代码如下:
automl_training_electric_op = gcc_aip.AutoMLTabularTrainingJobRunOp( project=project_bq, model_display_name="pred-model", display_name="pred-model", optimization_prediction_type="classification", optimization_objective="maximize-au-prc", budget_milli_node_hours=1000, dataset=comp5a.outputs["dataset"], target_column="fault", location=location )
每次运行Pipeline都会生成多个独立的"pred-model"模型,无法实现v1、v2、v3这类版本化管理。
实现模型版本化的方法
要让AutoML训练为现有模型生成新版本,核心是在训练作业中指定现有模型的资源名称,而非仅依赖model_display_name,具体步骤如下:
1. 查询现有模型的资源名称
先通过Vertex AI SDK获取Model Registry中已存在的"pred-model"资源名称,格式为projects/{project}/locations/{location}/models/{model_id},示例代码:
from google.cloud import aiplatform aiplatform.init(project=project_bq, location=location) models = aiplatform.Model.list(filter=f"display_name='pred-model'") existing_model_resource_name = models[0].resource_name if models else None
- 首次运行时,
existing_model_resource_name为None,会创建第一个版本的模型。 - 后续运行时,该变量会指向已存在的模型资源。
2. 修改训练组件参数
在AutoMLTabularTrainingJobRunOp中添加parent_model参数,传入获取到的现有模型资源名称,修改后的代码:
automl_training_electric_op = gcc_aip.AutoMLTabularTrainingJobRunOp( project=project_bq, model_display_name="pred-model", display_name="pred-model", optimization_prediction_type="classification", optimization_objective="maximize-au-prc", budget_milli_node_hours=1000, dataset=comp5a.outputs["dataset"], target_column="fault", location=location, parent_model=existing_model_resource_name # 指定父模型实现版本化 )
3. Pipeline参数传递注意事项
如果Pipeline是编译后运行,需确保existing_model_resource_name能正确传递到训练组件中:
- 可以将模型查询逻辑集成到Pipeline的初始化步骤
- 也可以通过Pipeline参数手动传入现有模型的资源名称
验证效果
修改后运行Pipeline,在Vertex AI控制台的Model Registry中查看"pred-model",会看到新版本(v1、v2等)被添加到该模型条目下,不再重复创建独立的同名模型。
内容的提问来源于stack exchange,提问作者Andrea Cola
相关产品推荐
相关产品推荐

