適用於:
Azure CLI ml 延伸模組 v2 (目前)
Python SDK azure-ai-ml v2 (目前)
在本文中,您將瞭解如何在生產環境中部署新版本的機器學習模型,而不會造成任何中斷。 您可以使用藍綠部署策略,也稱為安全推出策略,將新版本的Web服務引入生產環境。 當您使用此策略時,您可以將新版本的 Web 服務推出到一小部分的使用者或要求,然後再完全推出。
本文假設您使用在線端點,或用於在線(即時)推斷的端點。 線上端點有兩種類型:受控線上端點和 Kubernetes 線上端點。 如需端點類型與端點類型差異的詳細資訊,請參閱 受控在線端點與 Kubernetes 在線端點。
本文使用受控在線端點進行部署。 但也包含說明如何使用 Kubernetes 端點而非受控在線端點的附註。
在本文中,您將瞭解如何:
- 使用名為
blue 的部署定義在線端點,以提供模型的第一個版本。
-
blue調整部署規模,使其可以處理更多要求。
- 將稱為
green 部署的第二個模型版本部署到端點,但不會傳送即時流量給部署。
- 以隔離的方式測試
green部署。
- 鏡像
green 部署的即時流量百分比以驗證它。
- 將少量即時流量百分比傳送至
green 部署。
- 將所有即時流量傳送至
green 部署。
- 刪除未使用的
blue 部署。
先決條件
至少具有下列其中一個 Azure 角色型存取控制 (Azure RBAC) 角色的用戶帳戶:
- Azure Machine Learning 工作區的擁有者角色
- Azure Machine Learning 工作區的參與者角色
- 具有
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* 許可權的自定義角色
如需詳細資訊,請參閱 管理 Azure Machine Learning 工作區。
Docker 引擎選擇性地安裝並在本機執行。 強烈建議使用此必要條件。 您需要它才能在本機部署模型,而且有助於偵錯。
適用於:
Python SDK azure-ai-ml v2 (目前)
Azure Machine Learning 工作區。 如需建立工作區的步驟,請參閱 建立工作區。
適用於 Python v2 的 Azure Machine Learning SDK。 若要安裝 SDK,請使用下列命令:
pip install azure-ai-ml azure-identity
若要將現有的 SDK 安裝更新為最新版本,請使用下列命令:
pip install --upgrade azure-ai-ml azure-identity
如需詳細資訊,請參閱 適用於 Python 的 Azure Machine Learning 套件用戶端連結庫。
至少具有下列其中一個 Azure 角色型存取控制 (Azure RBAC) 角色的用戶帳戶:
- Azure Machine Learning 工作區的擁有者角色
- Azure Machine Learning 工作區的參與者角色
- 具有
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* 許可權的自定義角色
如需詳細資訊,請參閱 管理 Azure Machine Learning 工作區。
Docker 引擎選擇性地安裝並在本機執行。 強烈建議使用此必要條件。 您需要它才能在本機部署模型,而且有助於偵錯。
Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
Azure Machine Learning 工作區。 如需建立工作區的指示,請參閱 建立工作區。
至少具有下列其中一個 Azure 角色型存取控制 (Azure RBAC) 角色的用戶帳戶:
- Azure Machine Learning 工作區的擁有者角色
- Azure Machine Learning 工作區的參與者角色
- 具有
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* 許可權的自定義角色
如需詳細資訊,請參閱 管理 Azure Machine Learning 工作區。
準備您的系統
設定環境變數
您可以設定預設值以搭配 Azure CLI 使用。 若要避免多次傳入訂用帳戶、工作區和資源群組的值,請執行下列程序代碼:
az account set --subscription <subscription-ID>
az configure --defaults workspace=<Azure-Machine-Learning-workspace-name> group=<resource-group-name>
複製範例存放庫
如要遵循本文,請先複製範例存放庫 (azureml-examples)。 然後移至存放庫的 cli/ 目錄:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
秘訣
使用 --depth 1 僅將最新的提交複製至存放庫,以減少完成作業所需的時間。
本教學課程中的命令位於 cli 目錄中的 deploy-safe-rollout-online-endpoints.sh 檔案中,而 YAML 組態檔位於 endpoints/online/managed/sample/ 子目錄中。
附註
Kubernetes 在線端點的 YAML 組態檔位於 endpoints/online/kubernetes/ 子目錄中。
複製範例存放庫
若要執行定型範例,請先複製範例存放庫 (azureml-examples)。 然後移至 azureml-examples/sdk/python/endpoints/online/managed 目錄:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
秘訣
使用 --depth 1 僅將最新的提交複製至存放庫,以減少完成作業所需的時間。
本文中的資訊是以 online-endpoints-safe-rollout.ipynb 筆記本為基礎。 本文包含與筆記本相同的內容,但兩份檔之間的程式代碼區塊順序稍有不同。
連線至 Azure Machine Learning 工作區
工作區是 Azure Machine Learning 的最上層資源。 工作區提供一個集中位置,可用於管理和操作您在使用 Azure Machine Learning 時所創建的所有開發產出。 在本節中,您會連線到執行部署工作的工作區。 若要跟著做,請打開您的 online-endpoints-safe-rollout.ipynb 筆記本。
匯入必要的程式庫:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
from azure.identity import DefaultAzureCredential
附註
如果您使用 Kubernetes 線上端點,請從KubernetesOnlineEndpoint程式庫匯入 KubernetesOnlineDeployment 和 azure.ai.ml.entities 類別。
設定工作區設定並取得工作區的控制代碼:
若要連線到工作區,您需要標識符參數:訂用帳戶、資源群組和工作區名稱。 您會在 MLClient 模組中的 azure.ai.ml 類別使用這項資訊,以取得所需的 Azure Machine Learning 工作區的控制代碼。 此範例會使用預設的 Azure 驗證。
# enter details of your AML workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
如果您已在本機電腦上安裝 Git,便可遵循指示複製範例存放庫。 否則,請遵循指示從範例存放庫中下載檔案。
複製範例存放庫
若要遵循本文,請複製 azureml-examples 存放庫,然後移至 azureml-examples/cli/endpoints/online/model-1 資料夾。
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
秘訣
使用 --depth 1 僅將最新的提交複製至存放庫,以減少完成作業所需的時間。
從範例存放庫下載檔案
您可以將存放庫下載到本機電腦,而不是複製範例存放庫:
- 移至 https://github.com/Azure/azureml-examples/。
- 選取 [ <> 代碼],然後移至 [ 本地 ] 索引標籤,然後選取 [ 下載 ZIP]。
定義端點和部署
線上端點用於線上 (即時) 推斷。 線上端點包含準備從用戶端接收資料的部署,且會即時傳送回應。
定義端點
下表列出定義端點時應指定的索引鍵屬性。
| 屬性 |
必要或選用 |
描述 |
| 名稱 |
為必填項目 |
端點的名稱。 它在其 Azure 區域中必須是唯一的。 如需命名規則的詳細資訊,請參閱 Azure Machine Learning 在線端點和批次端點。 |
| 驗證模式 |
可選 |
端點的驗證方法。 您可以選擇金鑰型驗證、 key和 Azure Machine Learning 令牌型驗證。 aml_token 金鑰不會過期,但權杖會過期。 如需關於身分驗證的詳細資訊,請參閱 為在線端點進行用戶端驗證。 |
| 描述 |
可選 |
端點的描述。 |
| Tags |
可選 |
端點的標籤字典。 |
| 交通流量 |
可選 |
跨部署對流量進行路由之方式的規則。 您可以將流量表示為索引鍵/值組的字典,其中索引鍵代表部署名稱,而值則代表該部署的流量百分比。 您只能在建立端點下的部署之後設定流量。 您也可以在建立部署之後更新線上端點的流量。 如需如何使用鏡像流量的詳細資訊,請參閱 將少量即時流量配置給新的部署。 |
| 鏡像流量 |
可選 |
要鏡像至部署的即時流量百分比。 如需如何使用鏡像流量的詳細資訊,請參閱 使用鏡像流量測試部署。 |
若要查看您可以在建立端點時指定之屬性的完整清單,請參閱 CLI (v2) 在線端點 YAML 架構。 如需適用於 Python 的 Azure Machine Learning SDK 第 2 版,請參閱 ManagedOnlineEndpoint 類別。
定義部署
部署是裝載執行實際推斷之模型所需的一組資源。 下表說明定義部署時應指定的索引鍵屬性。
| 屬性 |
必要或選用 |
描述 |
| 名稱 |
為必填項目 |
部署的名稱。 |
| 端點名稱 |
為必填項目 |
要在其下建立部署的端點名稱。 |
| 模型 |
可選 |
要用於部署的模型。 此值可以是工作區中現有已建立版本模型的參考,也可以是內嵌模型規格。 在本文中的範例中,模型 scikit-learn 會進行回歸。 |
| 程式碼路徑 |
可選 |
本機開發環境上資料夾的路徑,其中包含用於評分模型的所有 Python 原始程式碼。 您可以使用巢狀目錄和套件。 |
| 評分指令碼 |
可選 |
會在指定的輸入要求上執行模型的 Python 程式碼。 此值可以是原始碼資料夾中評分檔案的相對路徑。 評分指令碼會接收提交給已部署 Web 服務的資料,並將資料傳遞給模型。 然後,此指令碼會執行模型,並將其回應傳回給用戶端。 評分指令碼是模型專用的,其必須了解模型預期的輸入資料和傳回的輸出資料。 本文的範例使用 score.py 檔案。 此 Python 程式碼必須具有 init 函式與 run 函式。 建立或更新模型之後會呼叫 函 init 式。 例如,您可以使用它來快取記憶體中的模型。 每次引動端點時會呼叫 run 函式,以執行實際評分和預測。 |
| 環境 |
為必填項目 |
用來裝載模型和程式碼的環境。 此值可以是工作區中現有已建立版本環境的參考,也可以是內嵌環境規格。 環境可以是具有 Conda 相依性的 Docker 映像、Dockerfile,或是已註冊的環境。 |
| 執行個體類型 |
為必填項目 |
要用於部署的虛擬機大小。 如需支援的大小清單,請參閱 受控在線端點 SKU 清單。 |
| 執行個體計數 |
為必填項目 |
要用於部署的執行個體數目。 您會根據預期的工作負載來設定值。 為了達到高可用性,我們建議您使用至少三個實例。 Azure Machine Learning 會保留額外的 20% 來執行升級。 如需詳細資訊,請參閱 Azure Machine Learning 在線端點和批次端點。 |
若要查看您可以在建立部署時指定之屬性的完整清單,請參閱 CLI (v2) 受控在線部署 YAML 架構。 如需 Python SDK 第 2 版,請參閱 ManagedOnlineDeployment 類別。
建立線上端點
您必須先設定端點名稱,然後加以設定。 在本文中,您會使用 endpoints/online/managed/sample/endpoint.yml 檔案來設定端點。 該檔案包含下列幾行:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
下表描述端點 YAML 格式所使用的金鑰。 若要查看如何指定這些屬性,請參閱 CLI (v2) 在線端點 YAML 架構。 如需與受控在線端點相關的限制資訊,請參閱 Azure Machine Learning 在線端點和批次端點。
| Key |
描述 |
$schema |
(選擇性) YAML 結構描述。 若要查看 YAML 檔案中的所有可用選項,您可以在瀏覽器中檢視上述程式代碼區塊中的架構。 |
name |
端點的名稱。 |
auth_mode |
驗證模式。 使用 key 進行金鑰式驗證。 使用 aml_token 進行 Azure Machine Learning 權杖型驗證。 若要取得最新的權杖,請使用 az ml online-endpoint get-credentials 命令。 |
若要建立線上端點:
執行下列 Unix 命令來設定端點名稱。 以唯一名稱取代 YOUR_ENDPOINT_NAME。
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
重要事項
端點名稱在 Azure 區域內必須是唯一的。 例如,在 Azure westus2 區域中,只能有一個名稱為 my-endpoint 的端點。
執行下列程序代碼,在雲端中建立端點。 此程式代碼會使用endpoint.yml檔案來設定端點:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
建立藍色部署
您可以使用 endpoints/online/managed/sample/blue-deployment.yml 檔案來設定名為 blue部署的主要層面。 該檔案包含下列幾行:
$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-ubuntu22.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
若要使用 blue-deployment.yml 檔案來建立端點的 blue 部署,請執行下列命令:
az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
重要事項
--all-traffic命令中的az ml online-deployment create標誌會將 100% 的端點流量分配給新建立的blue部署。
在blue-deployment.yaml 檔案中,行 path 會指定要上傳檔案的位置。 Azure Machine Learning CLI 會使用此資訊來上傳檔案並註冊模型和環境。 作為生產環境的最佳做法,您應該註冊模型和環境,並在 YAML 程式代碼中個別指定已註冊的名稱和版本。 使用模型格式 model: azureml:<model-name>:<model-version> ,例如 model: azureml:my-model:1。 在環境中,請使用格式environment: azureml:<environment-name>:<environment-version>,例如environment: azureml:my-env:1。
註冊時,您可將 model 和 environment 的 YAML 定義擷取至個別的 YAML 檔案,並使用 az ml model create 與 az ml environment create 命令。 若要深入瞭解這些指令,請執行 az ml model create -h 和 az ml environment create -h。
如需將模型註冊為資產的詳細資訊,請參閱 使用 Azure CLI 或 Python SDK 註冊模型。 如需建立環境的詳細資訊,請參閱 建立自定義環境。
建立線上端點
若要建立受控線上端點,請使用 ManagedOnlineEndpoint 類別。 這個類別可讓您設定端點的主要層面。
設定端點:
# Creating a unique endpoint name with current datetime to avoid conflicts
import random
online_endpoint_name = "endpt-moe-" + str(random.randint(0, 10000))
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="this is a sample online endpoint",
auth_mode="key",
tags={"foo": "bar"},
)
附註
若要建立 Kubernetes 線上端點,請使用 KubernetesOnlineEndpoint 類別。
建立端點:
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
建立藍色部署
若要建立受控線上端點的部署,請使用 ManagedOnlineDeployment 類別。 這個類別可讓您設定部署的主要層面。
設定 blue 部署:
# create blue deployment
model = Model(path="../model-1/model/sklearn_regression_model.pkl")
env = Environment(
conda_file="../model-1/environment/conda.yaml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
)
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=online_endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
在此範例中 path ,參數會指定要從何處上傳檔案。 Python SDK 會使用此資訊來上傳檔案,並註冊模型和環境。 最佳生產實務是您應該註冊模型和環境,並在程式碼中分別指定已註冊的名稱和版本。
如需將模型註冊為資產的詳細資訊,請參閱 使用 Azure CLI 或 Python SDK 註冊模型。
如需建立環境的詳細資訊,請參閱 建立自定義環境。
附註
若要建立 Kubernetes 線上端點的部署,請使用 KubernetesOnlineDeployment 類別。
建立部署:
ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
當您在 Azure Machine Learning Studio 中建立受控在線端點時,您必須定義端點的初始部署。 在您可以定義部署之前,您必須在工作區中註冊模型。 下一節說明如何註冊要用於部署的模型。
註冊您的模型
模型註冊是工作區中的邏輯實體。 此實體可能包含單一模型檔案,或是多個檔案的目錄。 作為生產中的最佳實踐,您應該註冊模型與環境。
若要註冊範例模型,請執行下列各節中的步驟。
上傳模型檔案
移至 [Azure Machine Learning 工作室]。
選取 [模型]。
選取 [註冊],然後選取 [從本機檔案]。
在 [模型類型] 底下,選取 [未指定的類型]。
選取瀏覽,然後選取瀏覽資料夾。
移至您稍早複製或下載之存放庫的本機複本,然後選取 \azureml-examples\cli\endpoints\online\model-1\model。 出現提示時,選取 [上傳 ],並等候上傳完成。
選取 下一步。
在 [ 模型設定 ] 頁面上的 [ 名稱] 底下,輸入模型的易記名稱。 本文中的步驟假設模型名為 model-1。
選取 [下一步],然後選取 [ 註冊 ] 以完成註冊。
如需本文稍後的範例,您也需要在存放庫的本機複本中,從 \azureml-examples\cli\endpoints\online\model-2\model 資料夾註冊模型。 若要註冊該模型,請重複前兩節中的步驟,但將模型 model-2命名為 。
如需使用已註冊模型的詳細資訊,請參閱 在 Azure Machine Learning 中使用已註冊的模型。
如需在 Studio 中建立環境的相關信息,請參閱 建立環境。
建立受控線上端點和藍色部署
您可以使用 Azure Machine Learning Studio 直接在瀏覽器中建立受控在線端點。 在工作室建立受控線上端點時,您必須定義初始部署。 您無法建立空的受控線上端點。
在工作室中建立受控線上端點的其中一種方式是從 [模型] 頁面。 此方法也提供將模型新增至現有受控線上部署的簡單方法。 若要部署您先前在 model-1] 區段中註冊的模型,請執行下列各節中的步驟。
選取模型
移至 Azure Machine Learning Studio,然後選取 [模型]。
在清單中,選取 model-1 模型。
選取 [部署]>[即時端點]。
隨即開啟一個視窗,可讓您用來指定端點的詳細資訊。
在 [端點名稱] 底下,輸入端點的名稱。
在 [計算類型] 底下,保留 [受控] 的預設值。
在 [驗證類型] 底下,保留 金鑰型驗證的預設值。
選取 [下一步],然後在 [ 模型] 頁面上,選取 [ 下一步]。
設定其餘設定並建立部署
在 [ 部署] 頁面上,採取下列步驟:
- 在 [部署名稱] 底下,輸入 藍色。
- 如果您要稍後在 Studio 中檢視端點活動的圖表:
- 在 [推斷數據收集] 底下,開啟切換開關。
- 在 [Application Insights 診斷] 下,啟用切換開關。
- 選取 下一步。
在 [用於推斷的程式代碼和環境 ] 頁面上,採取下列步驟:
- 在 [選取用於推斷的評分腳本] 下,選取 [ 流覽],然後從您稍早複製或下載的存放庫選取 \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py 檔案。
- 在環境清單上方的搜尋方塊中,開始輸入 sklearn,然後選取 sklearn-1.5:19 策劃的環境。
- 選取 下一步。
在 [ 計算 ] 頁面上,採取下列步驟:
- 在 [虛擬機] 底下,保留預設值。
- 在 [實例計數] 底下,將預設值取代為 1。
- 選取 下一步。
在 [即時流量] 頁面上,選取 [下一步] 以接受將 100% 的預設流量配置至 blue 部署。
在 [ 檢閱] 頁面上,檢閱您的部署設定,然後選取 [ 建立]。
從 [端點] 頁面建立端點
或者,您也可以從工作室中的 [端點] 頁面建立受控線上端點。
移至 [Azure Machine Learning 工作室]。
選取端點。
選取 ,創建。
隨即開啟一個視窗,您可以用來指定端點和部署的詳細資訊。
選取模型,然後選擇 [選擇]。
輸入端點和部署的設定,如前兩節所述。 在每個步驟中,使用預設值,然後在最後一個步驟中,選取 [建立 ] 以建立部署。
確認您現有的部署
確認現有部署的其中一個方法是叫用您的端點,使其可以針對指定的輸入要求為您的模型評分。 當您透過 Azure CLI 或 Python SDK 叫用端點時,您可以選擇指定要接收連入流量的部署名稱。
附註
不同於 Azure CLI 或 Python SDK,Azure Machine Learning Studio 會要求您在叫用端點時指定部署。
使用部署名稱叫用端點
當您叫用端點時,您可以指定您要接收流量的部署名稱。 在此情況下,Azure Machine Learning 會將端點流量直接路由傳送至指定的部署,並傳回其輸出。 您可以使用 --deployment-nameAzure Machine Learning CLI v2 的選項,或 deployment_namePython SDK v2 的選項來指定部署。
叫用端點而不指定部署
如果您在未指定要接收流量的部署的情況下叫用端點,Azure Machine Learning 會依據流量控制設定,將該端點的流量傳送至端點中的各個部署。
流量控制設定會將指定百分比的傳入流量配置到端點中的每個部署。 例如,如果您的流量規則指定端點中的特定部署應該收到 40% 的時間傳入流量,Azure Machine Learning 會將 40% 的端點流量路由傳送至該部署。
若要檢視現有端點和部署的狀態,請執行下列命令:
az ml online-endpoint show --name $ENDPOINT_NAME
az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME
輸出會列出$ENDPOINT_NAME端點和blue部署的相關資訊。
使用範例數據測試端點
您可以使用 invoke 命令叫用端點。 下列命令會使用 sample-request.json JSON 檔案來傳送範例要求:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
使用下列程式代碼來檢查模型部署的狀態:
ml_client.online_endpoints.get(name=online_endpoint_name)
使用範例數據測試端點
您可以使用先前建立的 MLClient 執行個體來取得端點的控制代碼。 若要叫用端點,您可以使用 invoke 命令搭配下列參數:
-
endpoint_name:端點的名稱
-
request_file:包含要求數據的檔案
-
deployment_name:在端點中測試的部署名稱
下列程式代碼會使用 sample-request.json JSON 檔案來傳送範例要求。
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
檢視受控線上端點
您可以在 Studio 端點頁面中檢視所有受控在線端點。 每個端點頁面的 [ 詳細 數據] 索引標籤會顯示重要資訊,例如端點 URI、狀態、測試工具、活動監視器、部署記錄和範例取用程式代碼。 若要查看這項資訊,請執行下列步驟:
在 Studio 中,選取 端點。 會顯示工作區中所有端點的清單。
或者,在計算實例類型上建立篩選,只顯示受控類型。
選取端點名稱以檢視端點的 [詳細資料] 頁面。
使用範例數據測試端點
在端點頁面上,您可以使用 [ 測試 ] 索引標籤來測試受控在線部署。 若要輸入範例輸入並檢視結果,請執行下列步驟:
在端點頁面上,移至 測試 索引標籤。在 部署 清單中,blue 的部署已經選取。
移至 sample-request.json 檔案 ,並複製其範例輸入。
在 Studio 中,將範例輸入貼到 [ 輸入 ] 方塊中。
選取 [測試]。
縮放現有部署以處理更多流量
在使用 線上端點部署和評分機器學習模型中所述的部署中,您會在部署 YAML 檔案中將 值設定 instance_count 為 1 。 您可以使用 update 命令來擴展。
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
附註
在上一個命令中,選項 --set 會覆蓋部署配置。 或者,您可以更新 YAML 檔案,並使用 update 選項將其作為輸入傳遞給 --file 命令。
您可以使用稍早建立的 MLClient 實例來取得部署的控制權。 若要調整部署規模,您可以增加或減少 instance_count 的數值。
# scale the deployment
blue_deployment = ml_client.online_deployments.get(
name="blue", endpoint_name=online_endpoint_name
)
blue_deployment.instance_count = 2
ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
# Get the details for online endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)
# existing traffic details
print(endpoint.traffic)
# Get the scoring URI
print(endpoint.scoring_uri)
若要藉由調整實例數目來相應增加或減少部署,請執行下列步驟:
在端點頁面上,移至 [詳細資料] 索引標籤,然後尋找 blue 部署的卡片。
在 blue 部署卡片的標題上,選取編輯圖示。
在 [實例計數] 底下,輸入 2。
選取 [更新]。
部署新的模型,但不傳送流量
建立名為 green 的新部署:
az ml online-deployment create --name green --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/green-deployment.yml
因為您未明確分配任何流量至 green 部署,因此分配到它的流量為零。 您可以使用下列命令來確認事實:
az ml online-endpoint show -n $ENDPOINT_NAME --query traffic
測試新的部署
即使 green 部署流量已設定為 0%,您仍然可以直接使用 --deployment 選項叫用。
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name green --request-file endpoints/online/model-2/sample-request.json
如果您想要使用 REST 用戶端直接叫用部署,而不透過流量規則,請設定下列 HTTP 標頭:azureml-model-deployment: <deployment-name>。 下列程式代碼使用 Client for URL (cURL) 直接叫用部署。 您可以在 Unix 或 Windows 子系統 Linux 版 (WSL) 環境中執行程式代碼。 如需擷取 $ENDPOINT_KEY 值的指示,請參閱 取得數據平面作業的密鑰或令牌。
# get the scoring uri
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
# use curl to invoke the endpoint
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --header "azureml-model-deployment: green" --data @endpoints/online/model-2/sample-request.json
為您的受控在線端點建立新的部署,並將部署 green命名為 :
# create green deployment
model2 = Model(path="../model-2/model/sklearn_regression_model.pkl")
env2 = Environment(
conda_file="../model-2/environment/conda.yaml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
)
green_deployment = ManagedOnlineDeployment(
name="green",
endpoint_name=online_endpoint_name,
model=model2,
environment=env2,
code_configuration=CodeConfiguration(
code="../model-2/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
# use MLClient to create green deployment
ml_client.online_deployments.begin_create_or_update(green_deployment).result()
測試新的部署
即使 green 部署的流量分配為 0%,您仍然可以叫用該端點和部署。 下列程式代碼會使用 sample-request.json JSON 檔案來傳送範例要求。
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="green",
request_file="../model-2/sample-request.json",
)
您可以建立新的部署,以新增至受管控的線上端點。 若要建立名為 green的部署,請執行下列各節中的步驟。
在端點頁面上,移至 [ 詳細數據] 索引標籤,然後選取 [新增部署]。
在 [ 選取模型] 頁面上,選取 model-2,然後選取 [ 選取]。
在 [ 端點] 頁面和 [ 模型] 頁面上,選取 [ 下一步]。
在 [ 部署] 頁面上,採取下列步驟:
- 在 [部署名稱] 底下,輸入 綠色。
- 在 [推斷數據收集] 底下,開啟切換開關。
- 在 [Application Insights 診斷] 下,啟用切換開關。
- 選取 下一步。
在 [用於推斷的程式代碼和環境 ] 頁面上,採取下列步驟:
- 在 [ 選取用於推斷的評分腳本] 下,選取 [ 流覽],然後從您稍早複製或下載的存放庫選取 \azureml-examples\cli\endpoints\online\model-2\onlinescoring\score.py 檔案。
- 在環境清單上方的搜尋方塊中,開始輸入 sklearn,然後選取 sklearn-1.5:19 策劃的環境。
- 選取 下一步。
在 [ 計算 ] 頁面上,採取下列步驟:
- 在 [虛擬機] 底下,保留預設值。
- 在 [實例計數] 底下,將預設值取代為 1。
- 選取 下一步。
設定其餘設定並建立部署
在 [ 即時流量 ] 頁面上,選取 [ 下一步 ],以接受將 100% 的預設流量分配給 blue 部署,並將 0% 分配給 green。
在 [ 檢閱] 頁面上,檢閱您的部署設定,然後選取 [ 建立]。
從『模型』頁面新增部署
或者,您可以使用 [模型] 頁面來新增部署:
在 Studio 中,選取 [模型]。
選取清單中的模型。
選取 [部署]>[即時端點]。
在 [端點] 底下,選取 [現有]。
在端點清單中,選取您要部署模型的受控在線端點,然後選取 [ 下一步]。
在 [ 模型] 頁面上,選取 [ 下一步]。
若要完成部署的 green 建立,請遵循設定 初始設定 一節中的步驟 4 到 6,以及設定 其餘設定和建立部署 一節中的所有步驟。
附註
當您將新的部署新增至端點時,您可以使用 [ 更新流量配置 ] 頁面來調整部署之間的流量平衡。 但是,為了遵循本文的其他步驟,暫時請將流量的預設分配保留為 100% 到 blue 部署,並且保持 0% 給 green 部署。
測試新的部署
雖然 0% 的流量會移至 green 部署,但您仍然可以叫用端點和該部署。 在端點頁面上,您可以使用 [ 測試 ] 索引標籤來測試受控在線部署。 若要輸入範例輸入並檢視結果,請執行下列步驟:
在端點頁面上,移至測試索引標籤。
在 [ 部署] 列表中,選取 綠色。
移至 sample-request.json 檔案 ,並複製其範例輸入。
在 Studio 中,將範例輸入貼到 [ 輸入 ] 方塊中。
選取 [測試]。
使用鏡像流量測試部署
測試 green 部署後,您可以將即時流量百分比鏡像到端點,方法是複製該流量百分比並將它發送至 green 部署。 流量鏡像也稱為鏡像處理,不會影響傳回給客戶端的結果,100% 的請求仍會流向 blue 部署。 流量的鏡像百分比會複製並提交至 green 部署,讓您可以收集計量和記錄,而不會影響您的用戶端。
當您想在不影響用戶端的情況下驗證新的部署時,鏡像非常有用。 例如,您可以使用鏡像來檢查延遲是否在可接受的範圍內,或檢查是否有 HTTP 錯誤。 使用流量鏡像或陰影來測試新的部署也稱為陰影測試。 接收鏡像流量的部署,在此案例中,green 部署也可以稱為影子部署。
鏡像有下列限制:
- Azure Machine Learning CLI 2.4.0 版及更新後的版本,以及 Python SDK 1.0.0 版及更新後的版本皆支援「鏡像」功能。 如果您使用舊版的 Azure Machine Learning CLI 或 Python SDK 來更新端點,您會遺失鏡像流量設定。
- 鏡像目前不支援 Kubernetes 線上端點。
- 您只能針對端點中的單一部署進行流量鏡像。
- 您最多可以鏡像的流量百分比是 50%。 此上限會限制 端點頻寬配額的影響,其預設值為 5 MBps。 如果您超過配置的配額,您的端點帶寬會受到節流。 如需監視頻寬節流的相關信息,請參閱 頻寬節流。
另請注意下列行為:
- 您可以設定部署只接收即時流量或鏡像流量,而不是兩者。
- 當您叫用端點時,可以指定其任何部署的名稱,甚至是陰影部署,以傳回預測。
- 當您叫用端點並指定要接收連入流量的部署名稱時,Azure Machine Learning 不會將流量複製到影子部署。 Azure Machine Learning 只會在您未指定部署的情況下,將傳送至端點的流量對鏡像部署進行流量鏡像。
如果您將 green 部署設定為接收 10% 的鏡像流量,用戶端仍會收到僅來自部署的 blue 預測。
使用下列命令來鏡像 10% 的流量,並將其傳送至 green 部署:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=10"
您可以多次呼叫端點來測試鏡像流量,而不需要指定部署來接收傳入流量。
for i in {1..20} ; do
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
done
您可以藉由檢查部署中的記錄,確認指定百分比的流量已傳送至 green 部署。
az ml online-deployment get-logs --name green --endpoint $ENDPOINT_NAME
測試之後,您可以將鏡像流量設定為零,以停用鏡像:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=0"
使用下列程式碼來鏡像 10% 的流量,並將其傳送至 green 部署:
endpoint.mirror_traffic = {"green": 10}
ml_client.begin_create_or_update(endpoint).result()
您可以多次呼叫端點來測試鏡像流量,而不需要指定部署來接收傳入流量。
# You can test mirror traffic by invoking the endpoint several times
for i in range(20):
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
request_file="../model-1/sample-request.json",
)
您可以藉由檢查部署中的記錄,確認指定百分比的流量已傳送至 green 部署。
ml_client.online_deployments.get_logs(
name="green", endpoint_name=online_endpoint_name, lines=50
)
測試之後,您可以將鏡像流量設定為零,以停用鏡像:
endpoint.mirror_traffic = {"green": 0}
ml_client.begin_create_or_update(endpoint).result()
若要鏡像 10% 的流量,並將其傳送至 green 部署,請執行下列步驟:
在端點頁面上,移至 [ 詳細數據] 索引標籤,然後選取 [ 更新流量]。
開啟 [啟用鏡像流量] 切換。
在 [ 部署名稱] 清單中,選取 綠色。
在 [流量配置] %下,保留預設值 10%。
選取 [更新]。
端點詳細資料頁面現在會顯示對 green 部署分配的 10% 鏡像流量。
若要測試鏡像流量,請參閱 [Azure CLI] 或 [Python] 索引標籤以叫用端點數次。 藉由檢查部署中的記錄,確認指定的流量百分比會傳送至 green 部署。 您可以在端點頁面的 記錄 索引標籤中存取部署記錄。
您也可以使用計量和記錄來監視鏡像流量的效能。 如需詳細資訊,請參閱監視線上端點。
測試之後,您可以採取下列步驟來停用鏡像:
在端點頁面上,移至 [ 詳細數據] 索引標籤,然後選取 [ 更新流量]。
關閉 [啟用鏡像流量] 切換按鈕。
選取 [更新]。
將較低百分比的即時流量配置到新的部署
測試 green 部署之後,請分配少量流量給它。
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"
endpoint.traffic = {"blue": 90, "green": 10}
ml_client.begin_create_or_update(endpoint).result()
在端點頁面上,移至 [ 詳細數據] 索引標籤,然後選取 [ 更新流量]。
將 10% 配置給 green 部署,並將 90% 配置給 blue 部署,以調整部署流量。
選取 [更新]。
秘訣
總流量百分比必須是 0%,才能停用流量,或 100% 來啟用流量。
您的 green 部署現在會收到 10% 的所有即時流量。 客戶會收到來自 blue 和 green 部署的預測。
將所有流量傳送給新的部署
當您對 green 部署完全滿意時,請將所有流量轉移至該部署。
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"
endpoint.traffic = {"blue": 0, "green": 100}
ml_client.begin_create_or_update(endpoint).result()
在端點頁面上,移至 [ 詳細數據] 索引標籤,然後選取 [ 更新流量]。
將 100% 流量配置給 green 部署,並將 0% 配置給 blue 部署,以調整部署流量。
選取 [更新]。
移除舊的部署
使用下列步驟,從受控線上端點刪除個別部署。 刪除個別部署不會影響受控在線端點中的其他部署:
az ml online-deployment delete --name blue --endpoint $ENDPOINT_NAME --yes --no-wait
ml_client.online_deployments.begin_delete(
name="blue", endpoint_name=online_endpoint_name
).wait()
附註
您無法刪除已分配即時流量的部署。 刪除部署之前,您必須將部署的 流量配置設定 為 0%。
在端點頁面上,前往 詳細資訊 索引標籤,然後前往 blue 部署卡片。
在部署名稱旁邊,選取刪除圖示。
刪除端點和部署
若您不打算使用端點和部署,則應將其刪除。 當您刪除端點時,也會刪除其所有基礎部署。
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
ml_client.online_endpoints.begin_delete(name=online_endpoint_name)
相關內容