你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
将现有管道作业部署到批处理终结点
本文内容
适用范围:Azure CLI ml 扩展 v2(最新版) Python SDK azure-ai-ml v2(最新版)
使用批处理终结点可以部署管道组件,从而提供了一种在 Azure 机器学习中操作管道的便捷方法。 批处理终结点接受用于部署的管道组件。 但如果已有成功运行的管道作业,Azure 机器学习可以接受该作业作为批处理终结点的输入,并自动创建管道组件。 在本文中,你将了解如何使用现有管道作业作为批处理部署的输入。
你将了解以下内容:
运行并创建要部署的管道作业
从现有作业创建批处理部署
测试部署
关于此示例
在此示例中,我们将部署一个管道,其中包含一个输出“hello world!”的简单命令作业。 我们会指示现有管道作业以用于部署,而不是在部署前注册管道组件。 然后,Azure 机器学习将自动创建管道组件,并将其部署为批处理终结点管道组件部署。
本文中的示例基于 azureml-examples 存储库中包含的代码示例。 要在本地运行命令而无需复制或粘贴 YAML 和其他文件,请使用以下命令克隆存储库并转到你的编码语言所对应的文件夹:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/python
此示例的文件位于以下位置:
cd endpoints/batch/deploy-pipelines/hello-batch
先决条件
Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户 。
一个 Azure 机器学习工作区。 若要创建工作区,请参阅管理 Azure 机器学习工作区 。
Azure 机器学习工作区中的以下权限:
对于创建或管理批处理终结点和部署:使用已分配有 Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
权限的“所有者”角色、“参与者”角色或自定义角色。
对于在工作区资源组中创建 Azure 资源管理器部署:使用在部署了工作区的资源组中已分配有 Microsoft.Resources/deployments/write
权限的“所有者”角色、“参与者”角色或自定义角色。
Azure 机器学习 CLI 或适用于 Python 的 Azure 机器学习 SDK:
运行以下命令,以安装 Azure CLI 和 Azure 机器学习的 ml
扩展 :
az extension add -n ml
Azure CLI 的 ml
扩展版本 2.7 中引入了批处理终结点的管道组件部署。 使用 az extension update --name ml
命令获取最新版本。
运行以下命令安装适用于 Python 的 Azure 机器学习 SDK :
pip install azure-ai-ml
该 SDK 的 1.7.0 版本中引入了 ModelBatchDeployment
和 PipelineComponentBatchDeployment
类。 使用 pip install -U azure-ai-ml
命令获取最新版本。
连接到工作区
工作区是 Azure 机器学习的顶级资源。 它提供了一个集中的位置,用于处理你在使用 Azure 机器学习时创建的所有项目。 在本部分,你将连接到要在其中执行部署任务的工作区。
在以下命令中,输入你的订阅 ID、工作区名称、资源组名称以及位置:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
导入所需的库:
from azure.ai.ml import MLClient, Input, load_component
from azure.ai.ml.entities import BatchEndpoint, ModelBatchDeployment, ModelBatchDeploymentSettings, PipelineComponentBatchDeployment, Model, AmlCompute, Data, BatchRetrySettings, CodeConfiguration, Environment, Data
from azure.ai.ml.constants import AssetTypes, BatchDeploymentOutputAction
from azure.ai.ml.dsl import pipeline
from azure.identity import DefaultAzureCredential
配置工作区详细信息并获取工作区句柄:
在以下命令中,输入订阅 ID、资源组名称和工作区名称:
subscription_id = "<subscription>"
resource_group = "<resource-group>"
workspace = "<workspace>"
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
运行要部署的管道作业
在本部分中,我们将首先运行管道作业:
以下 pipeline-job.yml
文件包含了管道作业的配置:
pipeline-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
experiment_name: hello-pipeline-batch
display_name: hello-pipeline-batch-job
description: This job demonstrates how to run the a pipeline component in a pipeline job. You can use this example to test a component in an standalone job before deploying it in an endpoint.
compute: batch-cluster
component: hello-component/hello.yml
加载管道组件并将其实例化:
hello_batch = load_component(source="hello-component/hello.yml")
pipeline_job = hello_batch()
现在,配置一些运行设置以运行测试。 本文假设你有一个名为 batch-cluster
的计算群集。 可以将该群集替换为你的群集的名称。
pipeline_job.settings.default_compute = "batch-cluster"
pipeline_job.settings.default_datastore = "workspaceblobstore"
创建管道作业:
JOB_NAME=$(az ml job create -f pipeline-job.yml --query name -o tsv)
pipeline_job_run = ml_client.jobs.create_or_update(
pipeline_job, experiment_name="hello-batch-pipeline"
)
pipeline_job_run
创建批处理终结点
在部署管道作业之前,需要部署批处理终结点来托管部署。
为终结点提供名称。 批处理终结点的名称在每个区域中必须是唯一的,因为该名称将用于构造调用 URI。 为了确保唯一性,请在以下代码中指定的名称后面追加任何尾随字符。
ENDPOINT_NAME="hello-batch"
endpoint_name="hello-batch"
配置终结点:
endpoint.yml
文件包含了终结点的配置。
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
name: hello-batch
description: A hello world endpoint for component deployments.
auth_mode: aad_token
endpoint = BatchEndpoint(
name=endpoint_name,
description="A hello world endpoint for component deployments",
)
创建终结点:
az ml batch-endpoint create --name $ENDPOINT_NAME -f endpoint.yml
ml_client.batch_endpoints.begin_create_or_update(endpoint).result()
查询终结点 URI:
az ml batch-endpoint show --name $ENDPOINT_NAME
endpoint = ml_client.batch_endpoints.get(name=endpoint_name)
print(endpoint)
部署管道作业
要部署管道组件,必须从现有作业创建批处理部署。
我们需要告知 Azure 机器学习要部署的作业的名称。 在本例中,该作业是在以下变量中指示的:
配置部署。
deployment-from-job.yml
文件包含部署的配置。 请注意,我们如何使用密钥 job_definition
(而不是 component
)来指示此部署是从管道作业创建的:
deployment-from-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
name: hello-batch-from-job
endpoint_name: hello-pipeline-batch
type: pipeline
job_definition: azureml:job_name_placeholder
settings:
continue_on_step_failure: false
default_compute: batch-cluster
现在请注意,我们如何使用属性 job_definition
而不是 component
:
deployment = PipelineComponentBatchDeployment(
name="hello-batch-from-job",
description="A hello world deployment with a single step. This deployment is created from a pipeline job.",
endpoint_name=endpoint.name,
job_definition=pipeline_job_run,
settings={
"default_compute": "batch-cluster",
"continue_on_step_failure": False
}
)
提示
此配置假定你有一个名为 batch-cluster
的计算群集。 可以将此值替换为你的群集的名称。
创建部署:
运行以下代码以在批处理终结点下创建一个批处理部署,并将其设置为默认部署。
az ml batch-deployment create --endpoint $ENDPOINT_NAME --set job_definition=azureml:$JOB_NAME -f deployment-from-job.yml
提示
请注意 --set job_definition=azureml:$JOB_NAME
的使用。 由于作业名称是唯一的,因此在工作区中运行改作业时,此处使用命令 --set
来更改作业的名称。
此命令将启动部署创建操作,并在部署创建操作继续时返回确认响应。
ml_client.batch_deployments.begin_create_or_update(deployment).result()
创建后,将此新部署配置为默认部署:
endpoint = ml_client.batch_endpoints.get(endpoint.name)
endpoint.defaults.deployment_name = deployment.name
ml_client.batch_endpoints.begin_create_or_update(endpoint).result()
部署已就绪,可供使用。
测试部署
创建部署后,即可接收作业。 可以按如下所示调用默认部署:
JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME --query name -o tsv)
job = ml_client.batch_endpoints.invoke(
endpoint_name=endpoint.name,
)
可以使用以下方法监视演示进度并流式传输日志:
az ml job stream -n $JOB_NAME
ml_client.jobs.get(name=job.name)
若要等待作业完成,请运行以下代码:
ml_client.jobs.stream(name=job.name)
清理资源
完成后,从工作区中删除关联的资源:
运行以下代码以删除批处理终结点及其基础部署。 --yes
用于确认删除。
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
删除终结点:
ml_client.batch_endpoints.begin_delete(endpoint.name).result()
后续步骤