在Azure Pipelines中使用Az Ml CLI部署与更新Azure ML模型方案咨询
实现方案
核心逻辑说明
你需要在现有流水线中增加版本对比校验步骤,生成判断标记变量,后续的部署、更新步骤仅在对应标记满足条件时执行,避免重复无意义的操作。
修改后的完整流水线配置
steps: - task: AzureCLI@2 displayName: 'Install AML CLI' inputs: azureSubscription: $(ml_ws_connection) scriptLocation: inlineScript scriptType: 'bash' inlineScript: 'az extension add -n azure-cli-ml' - task: AzureCLI@2 displayName: 'Attach folder to workspace' inputs: azureSubscription: $(ml_ws_connection) workingDirectory: $(ml_path) scriptLocation: inlineScript scriptType: 'bash' inlineScript: 'az ml folder attach -w $(ml_ws) -g $(ml_rg)' - task: AzureCLI@2 displayName: 'Check model and service status' name: statusCheck inputs: azureSubscription: $(ml_ws_connection) workingDirectory: $(ml_path) scriptLocation: inlineScript scriptType: 'bash' inlineScript: | # 配置目标模型名称,替换为你实际的模型名 TARGET_MODEL_NAME="model1" # 配置部署服务名称 TARGET_SERVICE_NAME="$(deploy_service_name)" # 1. 查询最新注册的模型版本,不存在则返回空 LATEST_MODEL_VERSION=$(az ml model list --name $TARGET_MODEL_NAME --top 1 --query "[0].version" -o tsv || echo "") if [ -z "$LATEST_MODEL_VERSION" ]; then echo "目标模型未注册,无需执行部署/更新操作" echo "##vso[task.setvariable variable=needOperate;isOutput=true]false" exit 0 fi # 2. 查询当前部署服务的状态,不存在则标记需要全新部署 SERVICE_EXISTS=$(az ml service show --name $TARGET_SERVICE_NAME --query "name" -o tsv 2>/dev/null || echo "") if [ -z "$SERVICE_EXISTS" ]; then echo "服务未部署,需要执行全新部署" echo "##vso[task.setvariable variable=needDeploy;isOutput=true]true" echo "##vso[task.setvariable variable=needUpdate;isOutput=true]false" echo "##vso[task.setvariable variable=needOperate;isOutput=true]true" exit 0 fi # 3. 查询当前服务使用的模型版本,和最新版本对比 DEPLOYED_MODEL_VERSION=$(az ml service show --name $TARGET_SERVICE_NAME --query "containerImage.modelVersions[0]" -o tsv) if [ "$DEPLOYED_MODEL_VERSION" == "$LATEST_MODEL_VERSION" ]; then echo "当前服务已经使用最新模型,无需更新" echo "##vso[task.setvariable variable=needOperate;isOutput=true]false" exit 0 else echo "发现新版本模型,需要执行更新" echo "##vso[task.setvariable variable=needUpdate;isOutput=true]true" echo "##vso[task.setvariable variable=needDeploy;isOutput=true]false" echo "##vso[task.setvariable variable=needOperate;isOutput=true]true" echo "##vso[task.setvariable variable=LATEST_MODEL_VERSION;isOutput=true]$LATEST_MODEL_VERSION" fi - task: AzureCLI@2 displayName: 'Create AKS cluster' condition: eq(dependencies.statusCheck.outputs['statusCheck.needOperate'], 'true') inputs: azureSubscription: $(ml_ws_connection) workingDirectory: $(ml_path) scriptLocation: inlineScript scriptType: 'bash' # 新增参数避免集群已存在时报错 inlineScript: 'az ml computetarget create aks --name $(ml_aks_name) --cluster-purpose DevTest --no-wait-if-exists' - task: AzureCLI@2 displayName: 'Deploy model to AKS ' condition: eq(dependencies.statusCheck.outputs['statusCheck.needDeploy'], 'true') inputs: azureSubscription: $(ml_ws_connection) workingDirectory: $(ml_path) scriptLocation: inlineScript scriptType: 'bash' inlineScript: 'az ml model deploy --name $(deploy_service_name) --ct $(ml_aks_name) --ic config/inferenceConfig.json -e $(ml_env_name) --ev $(ml_env_version) --dc config/aksDeploymentConfig-aks.json' - task: AzureCLI@2 displayName: 'Update model in AKS ' condition: eq(dependencies.statusCheck.outputs['statusCheck.needUpdate'], 'true') inputs: azureSubscription: $(ml_ws_connection) workingDirectory: $(ml_path) scriptLocation: inlineScript scriptType: 'bash' # 执行更新时指定最新版本模型,避免使用缓存配置 inlineScript: 'az ml service update --name $(deploy_service_name) --model-id model1:$(statusCheck.LATEST_MODEL_VERSION)'
关键调整说明
- 新增的
statusCheck步骤会自动校验模型存在状态、服务部署状态、模型版本差异,输出控制后续步骤执行的标记变量 - 所有后续步骤都增加了
condition参数,仅满足触发条件时才会运行,不会执行冗余操作 - AKS创建命令新增
--no-wait-if-exists参数,集群已存在时不会抛出错误中断流水线 - 更新步骤指定了最新的模型ID,保证升级的是当前注册的最新版本模型
内容的提问来源于stack exchange,提问作者sree
相关产品推荐
相关产品推荐

