Share via


將模型封裝部署到連線端點(預覽版)

模型封裝是 Azure Machine Learning 中的一項功能,讓你收集所有必要的相依性,將機器學習模型部署到服務平台。 在部署模型之前先建立封裝,可提供穩健可靠的部署,以及更有效率的 MLOps 工作流程。 封裝可以跨工作區移動,甚至可以移動到 Azure Machine Learning 以外的地方。 深入瞭解 模型封裝(預覽版)

重要

此功能目前處於公開預覽。 此預覽版本沒有服務等級協定,不建議用於處理生產工作負載。 可能不支援特定功能,或可能已經限制功能。

如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

本文將告訴您如何將模型封裝,並部署到 Azure Machine Learning 的連線端點。

必要條件

遵循本文中的步驟之前,請確定您已滿足下列必要條件:

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。 試用免費或付費版本的 Azure Machine Learning

  • Azure Machine Learning 工作區。 如果您沒有工作區,請依照如何管理工作區一文的步驟建立。

  • Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure Machine Learning 作業的存取權。 為了執行本文步驟,您必須為使用者帳戶指派 Azure Machine Learning 工作區的擁有者或參與者角色,或自訂角色。 如需詳細資訊,請參閱管理對 Azure Machine Learning 工作區的存取

關於此範例

在這個範例中,您將自訂型別的模型封裝,並部署到連線端點以進行連線推斷。

本文以 azureml-examples 存放庫內含的程式碼範例為例。 若要在本機執行命令,而不複製/貼上 YAML 和其他檔案,請先複製存放庫,然後將目錄變更為資料夾:

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

本節使用 endpoints/online/deploy-packages/custom-model 資料夾中的範例。

連線到您的工作區

請與您要使用的 Azure Machine Learning 工作區連線。

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

封裝模型

您可以明確建立模型封裝,以控制封裝作業的方式。 您可以藉由指定以下內容,建立模型封裝:

  • 封裝模型:每個模型封裝只能包含單一模型。 Azure Machine Learning 不支援將多個模型封裝在同一個模型封裝。
  • 基礎環境:環境用於指示基礎映像,以及模型所需的 Python 封裝相依性。 若使用 MLflow 模型,Azure Machine Learning 會自動產生基礎環境。 若使用自訂模型,您必須自行指定。
  • 服務技術:用來執行模型的推斷堆疊。

提示

如果您的模型是 MLflow,不需要手動建立模型封裝。 我們會在部署之前自動封裝。 請參閱將 MLflow 模型部署到連線端點

  1. 您需要在工作區或 Azure Machine Learning 登錄中註冊模型,才能進行模型封裝。 在這個範例中,您的存放庫已有模型的本機複本,所以你只要在工作區的登錄中發佈模型即可。 如果您已註冊嘗試部署的模型,可以跳過這個步驟。

    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 Machine Learning 會自動產生基礎環境。

    建立基礎環境定義:

    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:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  5. 啟動模型封裝作業:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  6. 封裝作業的結果是環境。

部署模型封裝

可將模型封裝直接部署到 Azure Machine Learning 的連線端點。 請依照以下步驟,將封裝部署到連線端點:

  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 --name $ENDPOINT_NAME --deployment with-package -r sample-request.json
    

後續步驟