如何用Azure DevOps部署Azure ML Studio Pipeline训练的最优模型
用Azure ML Pipeline训练后通过Azure DevOps部署最优模型的方案
1. 调整Azure ML Pipeline,确保模型注册时携带关键元数据
在你的Azure ML Pipeline训练步骤中,完成模型训练后注册模型时,要把用于筛选最优模型的核心指标(如准确率、AUC、损失值等)作为模型标签或属性一并注册,让所有训练产出的模型都带着可用于筛选的标识存入Azure ML工作区的模型注册表。示例代码:
from azureml.core import Model # model为训练好的模型对象,metrics为包含评估指标的字典 Model.register( workspace=ws, model_path="./trained_model.pkl", model_name="customer-churn-model", tags={"experiment_id": "exp-20240520", "training_batch": "batch-003"}, properties={"test_accuracy": str(0.93), "validation_auc": str(0.96)} )
2. 在Azure DevOps CI流水线中对接Azure ML Pipeline运行结果
在DevOps的CI流水线里添加任务,触发Azure ML Pipeline并捕获其产出的模型信息:
- 用
Azure CLI任务触发Pipeline并获取运行元数据:az ml pipeline create --experiment-name churn-pred-exp --pipeline-id <你的Pipeline ID> --output-metadata-file pipeline-run-info.json - 等待Pipeline运行完成后,查询该实验下注册的所有模型并导出为JSON文件:
az ml model list --workspace-name <你的工作区名> --resource-group <资源组名> --query "[?tags.experiment_id=='exp-20240520']" --output json > registered-models.json
将registered-models.json作为CI工件发布,供后续CD流水线使用。
3. 在Azure DevOps CD流水线中筛选最优模型
CD流水线启动后,加载CI阶段传递的模型列表文件,编写脚本(Python/PowerShell均可)按预定义规则筛选最优模型:
- 示例Python脚本逻辑:
import json with open("registered-models.json", "r") as f: models = json.load(f) # 按测试准确率降序排序,取第一个作为最优模型 sorted_models = sorted(models, key=lambda x: float(x["properties"]["test_accuracy"]), reverse=True) best_model = sorted_models[0] # 将最优模型的名称和版本写入DevOps流水线变量,供后续部署任务调用 print(f"##vso[task.setvariable variable=BestModelName]{best_model['name']}") print(f"##vso[task.setvariable variable=BestModelVersion]{best_model['version']}")
4. 在CD流水线中部署最优模型到目标环境
使用Azure CLI任务,基于上一步得到的模型名称和版本,部署到目标环境(ACI/AKS等):
- 示例部署到ACI的命令:
az ml model deploy --name churn-pred-endpoint --model-name $(BestModelName) --model-version $(BestModelVersion) --resource-group <资源组名> --workspace-name <工作区名> --compute-target aci --instance-count 1 --sku Standard_DS2_v2
若部署到AKS,只需调整--compute-target为你的AKS集群名称,并按需配置副本数、资源限制等参数。
替代原元数据传递的核心逻辑
之前手动传递训练元数据工件的方式,现在替换为:
- 模型及其元数据直接存储在Azure ML工作区的模型注册表中
- DevOps流水线通过查询Azure ML工作区获取模型元数据,无需手动传递文件
- 基于注册表中的元数据筛选最优模型,再触发部署流程
内容的提问来源于stack exchange,提问作者Imperial_J
相关产品推荐
相关产品推荐

