使用線上端點部署和評分機器學習模型

適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)

在本文中,您會了解如何將模型部署至線上端點,以用於即時推斷。 首先,您會在本機電腦上部署模型以針對任何錯誤執行偵錯。 然後,您會在 Azure 中部署和測試模型。 您也會了解如何檢視部署記錄和監視服務等級協定 (SLA)。 在本文結束時,您會擁有可用於即時推斷的可調整 HTTPS/REST 端點。

線上端點是用於即時推斷的端點。 線上端點有兩種類型:受控線上端點Kubernetes 線上端點。 如需端點的詳細資訊,以及受控線上端點與 Kubernetes 線上端點之間的差異,請參閱什麼是 Azure Machine Learning 端點?

受控線上端點可協助您以周全方式部署 ML 模型。 受控線上端點會以可調整且完全受控的方式,在 Azure 中使用強大的 CPU 和 GPU 機器。 受控線上端點負責服務、調整、保護和監視您的模型,讓您免除設定和管理基礎結構的額外負荷。

本文件中的主要範例使用受控線上端點進行部署。 若要改為使用 Kubernetes,請參閱本文件中的附註與受控線上端點討論。

必要條件

適用於:Azure CLI ml 延伸模組 v2 (目前)

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

  • Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure Machine Learning 作業的存取權。 若要執行本文中的步驟,您必須為使用者帳戶指派 Azure Machine Learning 工作區的擁有者參與者角色,或允許 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* 的自訂角色。 如果您使用工作室來建立/管理線上端點/部署,則需要向資源群組擁有者要求額外的權限「Microsoft.Resources/deployments/write」。 如需詳細資訊,請參閱管理對 Azure Machine Learning 工作區的存取

  • (選擇性) 如要執行本機部署,您必須在本機電腦上安裝 Docker 引擎強烈建議您使用此選項,以更輕鬆地執行問題偵錯。

為部署配置的虛擬機器配額

針對受控線上端點,Azure Machine Learning 會保留 20% 的計算資源,以在某些 VM SKU 上執行升級。 如果您在部署中要求這些 VM SKU 的指定實例數目,您必須有可用的配額 ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU ,以避免收到錯誤。 例如,如果您在部署中要求 10 個 Standard_DS3_v2 VM (隨附 4 個核心) 執行個體,則應該有 48 個核心 (12 instances * 4 cores) 的配額可供使用。 此額外配額會保留給系統初始化的作業,例如操作系統升級、VM 復原等,除非執行這類作業,否則不會產生費用。 若要檢視使用量並要求增加配額,請參閱在 Azure 入口網站中檢視您的使用量和配額。 若要檢視執行受控在線端點的成本,請參閱 檢視受控在線端點的成本。 有某些 VM SKU 不必額外保留配額。 若要檢視完整清單,請參閱受控線上端點 SKU 清單

Azure Machine Learning 提供了共用配額集區供所有使用者存取配額以進行一定時間的測試。 當您使用工作室將 Llama-2、Phi、Nemotron、Mistral、Dolly 和 Deci-DeciLM 模型從模型目錄部署到受控線上端點時,Azure Machine Learning 可讓您短暫存取此共用配額。

如需如何使用共用配額來部署線上端點的詳細資訊,請參閱如何使用工作室部署基礎模型

準備您的系統

設定環境變數

如果您尚未設定 Azure CLI 的預設值,請儲存您的預設設定。 如要避免多次傳遞訂閱、工作區和資源群組的值,請執行下列程式碼:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

複製範例存放庫

如要遵循本文,請先複製範例存放庫 (azureml-examples)。 然後,執行下列程式碼以移至存放庫的 cli/ 目錄:

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

提示

使用 --depth 1 僅複製存放庫的最新認可,如此可縮短完成作業的時間。

本教學課程中的命令位於 cli 目錄的檔案 deploy-local-endpoint.shdeploy-managed-online-endpoint.sh 中,而 YAML 設定檔則位於 endpoints/online/managed/sample/ 子目錄中。

注意

Kubernetes 線上端點的 YAML 組態檔位於 endpoints/online/kubernetes/ 子目錄中。

定義端點

若要定義端點,您必須指定:

  • 端點名稱:端點的名稱。 其在 Azure 區域中必須是唯一的。 如需命名規則的詳細資訊,請參閱端點限制
  • 驗證模式:端點的驗證方法。 在金鑰型驗證與 Azure Machine Learning 權杖型驗證之間進行選擇。 金鑰不會過期,但權杖會過期。 如需驗證的詳細資訊,請參閱向線上端點進行驗證
  • (選擇性) 您可以在端點中新增描述和標籤。

設定端點名稱

若要設定端點名稱,請執行下列命令 (唯一的名稱取代 YOUR_ENDPOINT_NAME)。

針對 Linux,請執行此命令:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

設定端點

下列程式碼片段顯示 endpoints/online/managed/sample/endpoint.yml 檔案:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

下表說明端點 YAML 格式的參考。 若要了解如何指定這些屬性,請參閱線上端點 YAML 參考。 如需有關受控端點相關限制的資訊,請參閱線上端點的限制

關鍵 描述
$schema (選擇性) YAML 結構描述。 若要查看 YAML 檔案中的所有可用選項,您可以在瀏覽器內檢視上述程式碼片段中的結構描述。
name 端點的名稱。
auth_mode 使用 key 進行金鑰式驗證。 使用 aml_token 進行 Azure Machine Learning 權杖型驗證。 若要取得最新的權杖,請使用 az ml online-endpoint get-credentials 命令。

定義部署

部署是要裝載執行實際推斷的模型所需的一組資源。 要部署模型,您必須具有:

  • 模型檔案 (或工作區中已註冊模型的名稱和版本)。 在此範例中,我們有一個可執行迴歸的 scikit-learn 模型。
  • 評分指令碼,也就是在指定的輸入要求上執行模型的程式碼。 評分指令碼會接收提交給已部署 Web 服務的資料,並將資料傳遞給模型。 然後,此指令碼會執行模型,並將其回應傳回給用戶端。 評分指令碼是模型專用的,其必須了解模型預期的輸入資料和傳回的輸出資料。 在此範例中,我們有一個「score.py」檔案。
  • 模型執行所在的環境。 環境可以是具有 Conda 相依性的 Docker 映像,或 Dockerfile。
  • 用於指定執行個體類型和調整容量的設定。

下表描述部署的主要屬性:

屬性 描述
Name 部署的名稱。
端點名稱 要在其下建立部署的端點名稱。
模型 要用於部署的模型。 此值可以是工作區中現有已建立版本模型的參考,也可以是內嵌模型規格。
程式碼路徑 本機開發環境上的目錄路徑,包含用來對模型進行評分的所有 Python 原始程式碼。 您可以使用巢狀目錄和套件。
評分指令碼 原始程式碼目錄中評分檔案的相對路徑。 此 Python 程式碼必須具有 init() 函式與 run() 函式。 建立或更新模型之後,即會呼叫 init() 函式 (例如,您可使用該函式來快取記憶體中的模型)。 每次引動端點時會呼叫 run() 函式,以執行實際評分和預測。
Environment 用來裝載模型和程式碼的環境。 此值可以是工作區中現有已建立版本環境的參考,也可以是內嵌環境規格。
執行個體類型 要用於部署的 VM 大小。 如需支援的大小清單,請參閱受控線上端點 SKU 清單
執行個體計數 要用於部署的執行個體數目。 根據您預期的工作負載做為值。 為了達到高可用性,建議您將值至少設定為 3。 我們會額外保留 20% 來執行升級。 如需詳細資訊,請參閱為部署配置的虛擬機器配額

警告

  • 當部署背後的執行個體經歷安全性修補和/或其他復原作業時,部署可以隨時再次參考模型和容器映像 (如環境中所定義)。 如果您在 Azure Container Registry 中使用已註冊的模型或容器映像進行部署,並移除該模型或容器映像,則重新安裝映像時,依賴這些資產的部署可能會失敗。 如果您已移除模型或容器映像,請務必重新建立相依的部署,或使用替代的模型或容器映像更新相依的部署。
  • 環境所參考的容器登錄可以是私人的,但前提是端點身分識別具有透過 Microsoft Entra 驗證和 Azure RBAC 存取該容器登錄的權限。 基於相同原因,不支援 Azure Container Registry 以外的私人 Docker 登錄。

設定部署

下列程式碼片段顯示 endpoints/online/managed/sample/blue-deployment.yml 檔案,以及所有要設定部署所需的輸入:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: 
  conda_file: ../../model-1/environment/conda.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

注意

在 blue-deployment.yml 檔案中,我們指定了下列部署屬性:

  • model - 在此範例中,我們使用 path 指定內嵌模型屬性。 系統會自動上傳模型檔案,並使用自動產生的名稱來註冊。
  • environment - 在此範例中,我們具有包含 path 的內嵌定義。 將針對映像使用 environment.docker.imageconda_file 相依性將安裝在映像上。

在部署期間,會從開發環境上傳本機檔案,例如評分模型的 Python 來源。

如需關於 YAML 結構描述的詳細資訊,請參閱線上端點 YAML 參考

注意

使用 Kubernetes 而非受控端點做為計算目標:

  1. 使用 Azure Machine Learning 工作室建立 Kubernetes 叢集做為計算目標,並將其連結至 Azure Machine Learning 工作區。
  2. 使用端點 YAML,將目標設為 Kubernetes 而非受控端點 YAML。 您必須編輯 YAML,以將 target 的值變更為您註冊的計算目標名稱。 您可使用此 deployment.yaml,其具有適用於 Kubernetes 部署的額外屬性。

本文中使用的所有命令 (除了選用的 SLA 監視和 Azure 記錄分析整合),皆可搭配受控端點或 Kubernetes 端點使用。

個別註冊您的模型和環境

在此範例中,我們會指定 path (檔案上傳所在位置) 內嵌。 CLI 會自動上傳檔案,並註冊模型和環境。 就生產最佳做法而言,您應註冊模型和環境,並在 YAML 中個別指定註冊的名稱和版本。 使用表單 model: azureml:my-model:1environment: azureml:my-env:1

註冊時,您可將 modelenvironment 的 YAML 定義擷取至個別的 YAML 檔案,並使用 az ml model createaz ml environment create 命令。 如要深入瞭解這些命令,請執行 az ml model create -haz ml environment create -h

如需將模型註冊為資產的詳細資訊,請參閱使用 CLI 在 Machine Learning 中將模型註冊為資產 (部分機器翻譯)。 如需建立環境的詳細資訊,請參閱使用 CLI 和 SDK (v2) 管理 Azure Machine Learning 環境

使用不同的 CPU 和 GPU 執行個體類型和映像

blue-deployment.yml 檔案中的上述定義會使用一般用途類型 Standard_DS3_v2 執行個體和非 GPU Docker 映像 mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest。 針對 GPU 計算,請選擇 GPU 計算類型 SKU 和 GPU Docker 映像。

如需支援的一般用途和 GPU 執行個體類型,請參閱支援受控線上端點的 VM SKU。 如需 Azure Machine Learning CPU 和 GPU 基礎映像的清單,請參閱Azure Machine Learning 基礎映像 (英文)。

注意

若要使用 Kubernetes 而非受控端點作為計算目標,請參閱 Kubernetes 計算目標簡介

識別與 AZUREML_MODEL_DIR 相關的模型路徑

將模型部署至 Azure Machine Learning 時,您必須指定想要部署為部署設定一部分的模型所在的位置。 在 Azure Machine Learning 中,會使用 AZUREML_MODEL_DIR 環境變數來追蹤模型的路徑。 藉由識別與 AZUREML_MODEL_DIR 相關的模型路徑,便可以部署儲存在本機電腦上的一或多個模型,或部署已在 Azure Machine Learning 工作區中註冊的模型。

為了說明,我們會在前兩個案例 (部署儲存在本機的單一模型或多個模型) 中參考下列本機資料夾結構:

顯示包含多個模型的資料夾結構的螢幕快照。

在部署中使用單一本機模型

若要在部署中使用您在本機電腦上擁有的單一模型,請在部署 YAML 中指定 modelpath。 以下是路徑為 /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl 的部署 YAML 範例:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

建立部署後,環境變數 AZUREML_MODEL_DIR 會指向 Azure 內模型儲存所在的儲存體位置。 例如,/var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 會包含模型 sample_m1.pkl

在您的評分指令碼 (score.py) 內,您可以在 init() 函式中載入模型 (在此範例中為 sample_m1.pkl):

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

在部署中使用多個本機模型

雖然 Azure CLI、Python SDK 和其他用戶端工具只能讓您在部署定義中為每個部署指定一個模型,但您仍然可以在部署中使用多個模型,方法是將包含所有模型的模型資料夾註冊為檔案或子目錄。

在先前的範例資料夾結構中,您會注意到 models 資料夾中有多個模型。 在部署 YAML 中,您可以指定 models 資料夾的路徑,如下所示:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/ 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

建立部署後,環境變數 AZUREML_MODEL_DIR 會指向 Azure 內模型儲存所在的儲存體位置。 例如,/var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 會包含模型和檔案結構。

在此範例中,AZUREML_MODEL_DIR 資料夾的內容看起來會像這樣:

多個模型儲存位置資料夾結構的螢幕快照。

在您的評分指令碼 (score.py) 內,您可以在 init() 函式中載入模型。 下列程式碼會載入 sample_m1.pkl 模型:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ") 
    model = joblib.load(model_path) 

如需如何將多個模型部署至一個部署的範例,請參閱將多個模型部署到一個部署 (CLI 範例)將多個模型部署到一個部署 (SDK 範例)

提示

如果您有超過 1500 個檔案要註冊,請考慮在註冊模型時將檔案或子目錄壓縮為 .tar.gz。 若要取用模型,您可以在評分指令碼的 init() 函式中解壓縮檔案或子目錄。 或者,當您註冊模型時,將 azureml.unpack 屬性設定為 True,以自動解壓縮檔案或子目錄。 不論是哪一種情況,一旦進入初始化階段便會進行解壓縮。

在部署中使用已在 Azure Machine Learning 工作區中註冊的模型

若要使用已在 Azure Machine Learning 工作區中註冊的一或多個模型,請在部署 YAML 中指定已註冊模型的名稱。 例如,下列部署 YAML 設定會將已註冊的 model 名稱指定為 azureml:local-multimodel:3

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: azureml:local-multimodel:3 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

在此範例中,請考慮到 local-multimodel:3 包含下列模型成品,而您可以從 Azure Machine Learning 工作室中的 [模型] 索引標籤檢視這些成品:

資料夾結構的螢幕快照,其中顯示已註冊模型的模型成品。

建立部署後,環境變數 AZUREML_MODEL_DIR 會指向 Azure 內模型儲存所在的儲存體位置。 例如,/var/azureml-app/azureml-models/local-multimodel/3 會包含模型和檔案結構。 AZUREML_MODEL_DIR 會指向包含模型成品根目錄的資料夾。 根據此範例,AZUREML_MODEL_DIR 資料夾的內容看起來會像這樣:

顯示多個模型的資料夾結構的螢幕快照。

在您的評分指令碼 (score.py) 內,您可以在 init() 函式中載入模型。 例如,載入 diabetes.sav 模型:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

瞭解評分指令碼

提示

適用於線上端點的評分指令碼格式,與先前版本的 CLI 和 Python SDK 中使用的格式相同。

如前所述,code_configuration.scoring_script 中指定的評分指令碼必須具有 init() 函式與 run() 函式。

此範例使用 score.py filescore.py

import os
import logging
import json
import numpy
import joblib


def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Init complete")


def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

初始化或啟動容器時,會呼叫 init() 函式。 初始化作業通常會在建立或更新部署後立即執行。 init 函式可用來撰寫全域初始化作業的邏輯,例如在記憶體中快取模型 (如同我們在此範例中所做的一樣)。

每次引動端點時都會呼叫 run() 函式,由此函式執行實際的評分和預測。 在此範例中,我們會從 JSON 輸入擷取資料、呼叫 scikit-learn 學習模型的 predict() 方法,然後傳回結果。

使用本機端點在本機執行部署和偵錯

強烈建議您先在本機藉由驗證和偵錯程式碼與設定以測試執行端點,再將端點部署至 Azure。 Azure CLI 和 Python SDK 支援本機端點和部署,Azure Machine Learning 工作室和 ARM 範本則不支援。

若要在本機部署,就必須安裝和執行 Docker 引擎。 Docker 引擎通常會在電腦啟動時啟動。 若未啟動,您可針對 Docker 引擎進行疑難排解

提示

您可以使用 Azure Machine Learning 推斷 HTTP 伺服器 Python 套件,在沒有 Docker 引擎的情況下於本機偵錯評分指令碼。 使用推斷伺服器進行偵錯可協助您先偵錯評分指令碼再部署至本機端點,以在不受部署容器設定影響的情況下進行偵錯。

注意

本機端點有下列限制:

  • 支援流量規則、驗證或探查設定。
  • 其只會為每個端點支援一個部署。
  • 其只支援本機模型檔案和具有本機 conda 檔案的環境。 如果您想要測試已註冊的模型,請先使用 CLISDK 下載這些模型,再於部署定義中使用 path 來參考父資料夾。 如果您想要測試已註冊的環境,請檢查 Azure Machine Learning 工作室中的環境內容,並準備要使用的本機 conda 檔案。 本文中的範例會示範如何使用可支援本機部署的本機模型與具有本機 conda 檔案的環境。

如需先在本機偵錯線上端點再部署至 Azure 的詳細資訊,請參閱在 Visual Studio Code 中從本機偵錯線上端點

在本機部署模型

先建立端點。 (選擇性) 針對本機端點,您可以跳過此步驟,並直接在下一個步驟中建立部署,這會接著建立必要的中繼資料。 在本機部署模型適用於開發和測試用途。

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

現在,請在端點下方建立名為 blue 的部署。

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

--local 旗標會指示 CLI 在 Docker 環境中部署端點。

提示

使用 Visual Studio Code 在本機測試和偵錯端點。 如需詳細資訊,請參閱在 Visual Studio Code 中從本機偵錯線上端點

確認本機部署成功

檢查狀態查看是否已部署模型,且未發生錯誤:

az ml online-endpoint show -n $ENDPOINT_NAME --local

輸出應如下列 JSON 所示: provisioning_stateSucceeded

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

下表包含 provisioning_state 的可能值:

State 描述
建立中 正在建立資源。
更新中 正在更新資源。
刪除中 正在刪除資源。
已成功 建立/更新作業成功。
失敗 建立/更新/刪除作業失敗。

使用您的模型叫用本機端點以評分資料

使用便利性命令 invoke 並傳遞儲存在 JSON 檔案中的查詢參數,以叫用端點為模型評分:

az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

若您想要使用 REST 用戶端 (例如 curl),您必須具有評分 URI。 如要取得評分 URI,請執行 az ml online-endpoint show --local -n $ENDPOINT_NAME。 在傳回的資料中,尋找 scoring_uri 屬性。 本文件稍後會提供以 curl 為基礎的範例命令。

檢閱記錄以取得叫用作業的輸出

在範例 score.py 檔案中,run() 方法會將某些輸出記錄至主控台。

您可以使用 get-logs 命令來檢視此輸出:

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

將線上端點部署至 Azure

接下來,將線上端點部署至 Azure。

部署至 Azure

如要在雲端中建立端點,請執行下列程式碼:

az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

若要在端點下方建立名為 blue 的部署,請執行下列程式碼:

az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic

此部署可能需要最多約 15 分鐘的時間,視基礎環境或映像是否為第一次建置而定。 後續使用相同環境的部署將會更快完成。

提示

  • 若您不想封鎖 CLI 主控台,可將旗標 --no-wait 新增至命令。 不過,這將停止部署狀態的互動式顯示。

重要

上述 az ml online-deployment create 中的 --all-traffic 旗標會將 100% 的端點流量配置到新建立的藍色部署。 雖然這對開發和測試用途很實用,但在生產環境中,您可能會想要透過明確的命令開啟新部署的流量。 例如: az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"

提示

檢查端點的狀態

show 命令包含端點與部署的 provisioning_state 資訊:

az ml online-endpoint show -n $ENDPOINT_NAME

您可使用 list 命令,以資料表格式列出工作區中的所有端點:

az ml online-endpoint list --output table

檢查線上部署的狀態

檢查記錄查看是否已部署模型,且未發生錯誤。

若要查看容器的記錄輸出,請使用下列 CLI 命令:

az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME

根據預設,系統會從推斷伺服器容器中提取記錄。 若要查看儲存體初始設定式容器中的記錄,請新增 --container storage-initializer 旗標。 如需部署記錄的詳細資訊,請參閱取得容器記錄

使用模型叫用端點以評分資料

您可使用 invoke 命令或您選擇的 REST 用戶端,來叫用端點並為某些資料評分:

az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

下列範例顯示如何取得用來驗證端點的金鑰:

提示

您可以將 Microsoft Entra 安全性主體指派給允許 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/actionMicrosoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action 的自訂角色,藉以控制哪些主體可取得驗證金鑰。 如需詳細資訊,請參閱管理對 Azure Machine Learning 工作區的存取

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

接下來,使用 curl 來為資料評分。

SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)

curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json

請注意,我們會使用 showget-credentials 命令來取得驗證認證。 另請注意,我們會使用 --query 旗標,將屬性篩選至我們只需要的內容。 如要深入瞭解 --query,請參閱查詢 Azure CLI 命令輸出

如要查看叫用記錄,請再次執行 get-logs

如需使用權杖進行驗證的資訊,請參閱對線上端點進行驗證

(選擇性) 更新部署

若您想要更新程式碼、模型或環境,請更新 YAML 檔案,然後執行 az ml online-endpoint update 命令。

注意

若您在單一 update 命令中更新執行個體計數 (以縮放部署) 以及其他模型設定 (例如程式碼、模型或環境),系統會先執行縮放作業,然後再套用其他更新。 在生產環境中,最好是個別執行這些作業。

瞭解 update 如何運作:

  1. 開啟 online/model-1/onlinescoring/score.py 檔案。

  2. 變更 init() 函式的最後一行:在 logging.info("Init complete") 後方新增 logging.info("Updated successfully")

  3. 儲存檔案。

  4. 執行此命令:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    注意

    使用 YAML 進行更新為宣告式。 也就是說,YAML 中的變更會反映在基礎 Azure Resource Manager 資源 (端點和部署)。 宣告式方法可輔助 GitOps:所有的端點與部署變更 (甚至是 instance_count)皆會經過 YAML。

    提示

    • 您可以搭配使用泛型更新參數 (例如 --set 參數) 與 CLI update 命令,來覆寫 YAML 中的屬性,或設定特定屬性,而不需要在 YAML 檔案中傳遞這些屬性。 在開發和測試案例中,針對單一屬性使用 --set 特別有用。 例如,若要擴大第一個部署的 instance_count 值,您可以使用 --set instance_count=2 旗標。 不過,由於 YAML 並未更新,此技巧無法輔助 GitOps
    • 不一定要指定 YAML 檔案。 例如,如果您要針對指定的部署測試不同的並行設定,則可以嘗試使用 az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4 之類的命令。 這麼做會保留所有現有設定,只更新指定的參數。
  5. 由於您已修改 init() 函式 (會在建立或更新端點時執行),因此訊息 Updated successfully 會出現在記錄中。 藉由執行下列動作來擷取記錄:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

update 命令亦適用於本機部署。 使用相同的 az ml online-deployment update 命令搭配 --local 旗標。

注意

先前的部署更新是就地輪流更新的範例。

  • 針對受控線上端點,部署一次會將 20% 的節點更新為新的設定。 也就是說,若部署有 10 個節點,則一次只會更新 2 個節點。
  • 針對 Kubernetes 線上端點,系統會使用新的設定逐一建立新的部署執行個體,並刪除舊的部署執行個體。
  • 針對生產環境的使用方式,您應考慮藍綠部署,其為更新 Web 服務提供了更安全的替代方案。

(選擇性) 設定自動調整

自動調整會自動執行正確的資源量,以處理應用程式的負載。 受控線上端點透過與 Azure 監視器自動調整功能的整合,支援自動調整。 如要設定自動調整,請參閱如何自動調整線上端點

(選擇性) 使用 Azure 監視器監視 SLA

如要根據您的 SLA 來檢視計量和設定警示,請完成監視線上端點中所述的步驟。

(選擇性) 與記錄分析整合

CLI 的 get-logs 命令或 SDK 的 get_logs 方法只會從自動選取的執行個體提供過去數百行的記錄。 不過,記錄分析會提供一種方式來永久儲存和分析記錄。 如需使用記錄功能的詳細資訊,請參閱監視線上端點

刪除端點和部署

若您不打算使用部署,則應執行下列程式碼將其刪除 (其會刪除端點和所有基礎部署):

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait