如何将Azure ML实验多流水线步骤的多个模型合并注册为一个?
解决方案
完全可以将多个流水线步骤产出的模型合并注册为同一个Azure ML模型实体,以下是两种可直接落地的实现方案:
方案1:新增流水线聚合步骤(推荐,适配CI/CD流程)
在现有两个训练步骤后新增一个无计算依赖的模型聚合步骤,统一归集两个模型文件后再注册:
- 配置该步骤的输入为两个训练步骤的输出路径
- 步骤内执行文件归集操作,参考代码:
import os import shutil # 定义输入路径(对应两个训练步骤的输出) non_eow_model_path = "<非EOW训练步骤输出路径>" eow_model_path = "<EOW训练步骤输出路径>" # 定义聚合输出路径 aggregate_output_path = "./merged_models" os.makedirs(aggregate_output_path, exist_ok=True) # 分别复制两个模型到不同子目录避免重名冲突 shutil.copytree(non_eow_model_path, os.path.join(aggregate_output_path, "non_eow_tfidf")) shutil.copytree(eow_model_path, os.path.join(aggregate_output_path, "eow_tfidf"))
- 注册时将
aggregate_output_path作为model_path参数传入即可,整个目录会被打包为同一个模型,部署时可直接按子目录读取两个模型。
方案2:使用child_paths参数直接注册(无需修改现有流水线)
Azure ML的Model.register()方法原生支持通过child_paths参数从公共父路径下选取多个文件/目录打包为同一个模型,无需额外新增步骤:
- 首先确认两个训练步骤输出的公共父路径,将其设置为
model_path - 把两个模型相对于父路径的相对路径填入
child_paths列表即可,参考注册代码:
from azureml.core import Model model = Model.register( workspace=ws, model_path="<两个训练步骤输出的公共父路径>", # 例如流水线运行的根输出目录 model_name="tfidf_dual_model", child_paths=[ "Train_Data_Non_EOW_TFIDF/outputs/model.pkl", # 第一个模型的相对路径 "Train_Data_EOW_TFIDF/outputs/model.pkl" # 第二个模型的相对路径 ], tags={ "non_eow_model_path": "non_eow_tfidf/model.pkl", "eow_model_path": "eow_tfidf/model.pkl" } )
注意事项
注册后两个模型会被打包为同一个模型版本,部署时推理脚本可直接从模型挂载的根目录下,按子路径读取对应模型即可,无需修改原有推理逻辑。
内容的提问来源于stack exchange,提问作者Hillygoose
相关产品推荐
相关产品推荐

