将模型包部署到联机终结点(预览版)

模型包是 Azure 机器学习中的一项功能,可用于收集将机器学习模型部署到服务平台所需的所有依赖项。 在部署模型之前创建包可提供稳健可靠的部署以及更高效的 MLOps 工作流。 包可以跨工作区移动,甚至可以移动到 Azure 机器学习之外。 详细了解模型包(预览版)

重要

此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。

有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

在本文中,你将了解如何打包模型并将其部署到 Azure 机器学习中的联机终结点。

先决条件

在按照本文中的步骤操作之前,请确保满足以下先决条件:

  • Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 试用 Azure 机器学习

  • Azure 机器学习工作区。 如果没有,请使用如何管理工作区一文中的步骤创建一个。

  • Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure 机器学习中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 机器学习工作区的所有者或参与者角色,或者分配一个自定义角色。 有关详细信息,请参阅管理对 Azure 机器学习工作区的访问

关于此示例

在此示例中,你将打包一个自定义类型的模型并将其部署到联机终结点以进行联机推理。

本文中的示例基于 azureml-examples 存储库中包含的代码示例。 要在无需复制/粘贴 YAML 和其他文件的情况下在本地运行命令,请先克隆存储库,然后将目录更改为以下文件夹:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

本部分使用文件夹 endpoints/online/deploy-packages/custom-model 中的示例。

连接到工作区

连接到将在其中完成工作的 Azure 机器学习工作区。

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

打包模型

可以显式创建模型包,以允许控制打包操作的完成方式。 可以通过指定以下内容来创建模型包:

  • 要打包的模型:每个模型包只能包含一个模型。 Azure 机器学习不支持在同一模型包下打包多个模型。
  • 基础环境:环境用于指示基础映像以及模型所需的 Python 包依赖项。 对于 MLflow 模型,Azure 机器学习会自动生成基础环境。 对于自定义模型,需要指定它。
  • 服务技术:用于运行模型的推理堆栈。

提示

如果模型是 MLflow,则无需手动创建模型包。 我们可以在部署之前自动打包。 请参阅将 MLflow 模型部署到联机终结点

  1. 模型包要求在工作区或 Azure 机器学习注册表中注册模型。 在本例中,你已在存储库中拥有模型的本地副本,因此只需要将模型发布到工作区中的注册表。 如果打算部署的模型已注册,则可以跳过此部分。

     MODEL_NAME='sklearn-regression'
     MODEL_PATH='model'
     az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model
    
  2. 我们的模型需要以下包才能运行,并且我们在 conda 文件中指定了它们:

    conda.yaml

     name: model-env
     channels:
      - conda-forge
     dependencies:
      - python=3.9
      - numpy=1.23.5
      - pip=23.0.1
      - scikit-learn=1.2.2
      - scipy=1.10.1
      - xgboost==1.3.3
    

    注意

    请注意 conda YAML 中如何仅指示模型的要求。 包操作将包含推理服务器所需的任何包。

    提示

    如果模型需要托管在专用源中的包,则可以将包配置为包含它们。 阅读将在专用 Python 源中具有依赖项的模型打包

  3. 创建包含模型要求和基础映像的基础环境。 基础环境中仅指示模型所需的依赖项。 对于 MLflow 模型,基础环境是可选的,在这种情况下,Azure 机器学习会自动为你生成它。

    创建基础环境定义:

    sklearn-regression-env.yml

     $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
     name: sklearn-regression-env
     image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
     conda_file: conda.yaml
     description: An environment for models built with XGBoost and Scikit-learn.
    

    然后,按如下所示创建环境:

     az ml environment create -f environment/sklearn-regression-env.yml
    
  4. 创建包规格:

    package-moe.yml

     $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
     base_environment_source:
    	type: environment_asset
    	resource_id: azureml:sklearn-regression-env@latest
     target_environment_name: sklearn-regression-online-pkg
     inferencing_server: 
    	type: azureml_online
    	code_configuration:
      	  code: src
      	  entry_script: score.py
    
  5. 启动模型包操作:

     az ml model package -n $MODEL_NAME -l latest --file package-moe.yml
    
  6. 包操作的结果是环境。

部署模型包

可以将模型包直接部署到 Azure 机器学习中的联机终结点。 按照以下步骤将包部署到联机终结点:

  1. 为托管包部署的终结点选择一个名称并创建它:

     ENDPOINT_NAME = "sklearn-regression-online"
    
     az ml online-endpoint create -n $ENDPOINT_NAME
    
  2. 使用该包创建部署。 请注意如何使用创建的包配置 environment

    deployment.yml

     $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
     name: with-package
     endpoint_name: hello-packages
     environment: azureml:sklearn-regression-online-pkg@latest
     instance_type: Standard_DS3_v2
     instance_count: 1
    

    提示

    请注意,在此示例中未指定模型或评分脚本;它们都是包的一部分。

  3. 开始部署:

     az ml online-deployment create -f deployment.yml
    
    
  4. 此时,部署已准备就绪,可供使用。 可以通过创建示例请求文件来测试它的工作原理:

    sample-request.json

     {
    	"data": [
        	[1,2,3,4,5,6,7,8,9,10], 
        	[10,9,8,7,6,5,4,3,2,1]
    	]
     }
    
  5. 将请求发送到终结点

     az ml online-endpoint invoke -n $ENDPOINT_NAME -d with-package -f sample-request.json
    

下一步