本文內容
適用於: Azure CLI ml 延伸模組 v2 (目前) Python SDK azure-ai-ml v2 (目前)
在本文中,您將了解如何在生產環境中部署新版的機器學習模型,而不造成任何中斷。 您將使用藍綠部署策略 (也稱為安全推出策略),將新版的 Web 服務引進到實際執行環境。 此策略可讓您在完全推出 Web 服務之前,將新版的 Web 服務推出至一小部分的使用者或要求。
本文假設您使用的是線上端點,也就是用於線上 (即時) 推斷的端點。 線上端點有兩種類型:受控線上端點 和 Kubernetes 線上端點 。 如需端點的詳細資訊,以及受控線上端點與 Kubernetes 線上端點之間的差異,請參閱什麼是 Azure Machine Learning 端點? 。
本文中的主要範例使用受控線上端點進行部署。 若要改為使用 Kubernetes 端點,請參閱本文件中的附註與受控線上端點討論。
在本文中,您將了解如何:
定義具有稱為「藍色」之部署的線上端點,以提供第 1 版的模型
調整藍色部署,使其能夠處理更多要求
將第 2 版的模型 (稱為「綠色」部署) 部署至端點,但不會傳送即時流量給部署
隔離測試綠色部署
將即時流量百分比鏡像到綠色部署加以驗證
將少部分的即時流量傳送至綠色部署
將所有即時流量傳送至綠色部署
刪除現在未使用的第一版藍色部署
必要條件
遵循本文中的步驟之前,請確定您已滿足下列必要條件:
Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure Machine Learning 作業的存取權。 若要執行本文中的步驟,您必須為使用者帳戶指派 Azure Machine Learning 工作區的擁有者 或參與者 角色,或允許 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
的自訂角色。 如需詳細資訊,請參閱管理對 Azure Machine Learning 工作區的存取 。
(選擇性) 如要執行本機部署,您必須在本機電腦上安裝 Docker 引擎 。 強烈建議您使用 此選項,以更輕鬆地執行問題偵錯。
遵循本文中的步驟之前,請確定您已滿足下列必要條件:
Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。 試用免費或付費版本的 Azure Machine Learning 。
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>
複製範例存放庫
如要遵循本文,請先複製範例存放庫 (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 線上端點,請從 azure.ai.ml.entities
程式庫匯入 KubernetesOnlineEndpoint
和 KubernetesOnlineDeployment
類別。
設定工作區詳細資料,並取得工作區的控制代碼:
若要連線到工作區,我們需要識別碼參數:訂用帳戶、資源群組和工作區名稱。 我們將使用來自 azure.ai.ml
的 MLClient
中的詳細資料,以掌握所需的 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] 。
找到第一個模型 model-1
的模型資料夾 /cli/endpoints/online/model-1/model
和評分指令碼 /cli/endpoints/online/model-1/onlinescoring/score.py
。
找到第二個模型 model-2
的模型資料夾 /cli/endpoints/online/model-2/model
和評分指令碼 /cli/endpoints/online/model-2/onlinescoring/score.py
。
定義端點和部署
線上端點用於線上 (即時) 推斷。 線上端點包含準備從用戶端接收資料的部署,且會即時傳送回應。
定義端點
下表列出定義端點時應指定的索引鍵屬性。
屬性
描述
Name
必要。 端點的名稱。 其在 Azure 區域中必須是唯一的。 如需命名規則的詳細資訊,請參閱端點限制 。
驗證模式
端點的驗證方法。 在金鑰型驗證 key
與 Azure Machine Learning 權杖型驗證 aml_token
之間進行選擇。 金鑰不會過期,但權杖會過期。 如需驗證的詳細資訊,請參閱向線上端點進行驗證 。
描述
端點的描述。
標籤
端點的標記字典。
交通流量
跨部署對流量進行路由之方式的規則。 以機碼值組的字典來表示流量,其中機碼代表部署名稱,而值代表該部署的流量百分比。 您只能在於端點下建立部署時設定流量。 您也可以在已建立部署之後更新線上端點的流量。 如需如何使用鏡像流量的詳細資訊,請參閱將少量的即時流量配置到新的部署 。
鏡像流量
要鏡像至部署的即時流量百分比。 如需如何使用鏡像流量的詳細資訊,請參閱使用鏡像流量測試部署 。
若要查看在建立端點時所能指定之屬性的完整清單,請參閱 CLI (v2) 線上端點 YAML 結構描述 (部分機器翻譯) 或 SDK (v2) ManagedOnlineEndpoint 類別 (部分機器翻譯)。
定義部署
部署 是託管執行實際推斷模型所需的一組資源。 下表說明定義部署時應指定的索引鍵屬性。
屬性
描述
Name
必要。 部署的名稱。
端點名稱
必要。 要在其下建立部署的端點名稱。
模型
要用於部署的模型。 此值可以是工作區中現有已建立版本模型的參考,也可以是內嵌模型規格。 在此範例中,我們有一個可執行迴歸的 scikit-learn 模型。
程式碼路徑
本機開發環境上的目錄路徑,包含用來對模型進行評分的所有 Python 原始程式碼。 您可以使用巢狀目錄和套件。
評分指令碼
會在指定的輸入要求上執行模型的 Python 程式碼。 此值可以是原始程式碼目錄中評分檔案的相對路徑。 評分指令碼會接收提交給已部署 Web 服務的資料,並將資料傳遞給模型。 然後,此指令碼會執行模型,並將其回應傳回給用戶端。 評分指令碼是模型專用的,其必須了解模型預期的輸入資料和傳回的輸出資料。 在此範例中,我們有一個 score.py 檔案。 此 Python 程式碼必須具有 init()
函式與 run()
函式。 建立或更新模型之後,即會呼叫 init()
函式 (例如,您可使用該函式來快取記憶體中的模型)。 每次引動端點時會呼叫 run()
函式,以執行實際評分和預測。
Environment
必要。 用來裝載模型和程式碼的環境。 此值可以是工作區中現有已建立版本環境的參考,也可以是內嵌環境規格。 環境可以是具有 Conda 相依性的 Docker 映像、Dockerfile,或是已註冊的環境。
執行個體類型
必要。 要用於部署的 VM 大小。 如需支援的大小清單,請參閱受控線上端點 SKU 清單 。
執行個體計數
必要。 要用於部署的執行個體數目。 根據您預期的工作負載做為值。 為了達到高可用性,建議您將值至少設定為 3
。 我們會額外保留 20% 來執行升級。 如需詳細資訊,請參閱線上端點的限制 。
若要查看在建立部署時所能指定之屬性的完整清單,請參閱 CLI (v2) 受控線上部署 YAML 結構描述 (部分機器翻譯) 或 SDK (v2) ManagedOnlineDeployment 類別 (部分機器翻譯)。
建立線上端點
先設定端點的名稱,然後再加以設定。 在本文中,您將使用 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
命令。
若要建立線上端點:
設定您的端點名稱:
針對 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 檔案來設定部署的重要層面。 下列程式碼片段會顯示檔案的內容:
$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
的部署,請執行下列命令以使用 blue-deployment.yml
檔案來設定
az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
重要
az ml online-deployment create
中的 --all-traffic
旗標會將 100% 的端點流量配置到新建立的藍色部署。
在 blue-deployment.yaml
檔案中,我們會指定 path
(檔案上傳所在位置) 內嵌。 CLI 會自動上傳檔案,並註冊模型和環境。 就生產最佳做法而言,您應註冊模型和環境,並在 YAML 中個別指定註冊的名稱和版本。 使用表單 model: azureml:my-model:1
或 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
。
如需將模型註冊為資產的詳細資訊,請參閱使用 CLI 在 Machine Learning 中將模型註冊為資產 (部分機器翻譯)。 如需建立環境的詳細資訊,請參閱使用 CLI & SDK 管理 Azure Machine Learning 環境 (v2) (部分機器翻譯)。
建立線上端點
若要建立受控線上端點,請使用 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
類別。 此類別可讓使用者設定部署的重要層面。
下表說明 deployment
的屬性:
設定藍色部署:
# 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
(檔案上傳所在位置) 內嵌。 SDK 會自動上傳檔案,並註冊模型和環境。 就生產最佳做法而言,您應註冊模型和環境,並在程式碼中個別指定註冊的名稱和版本。
如需將模型註冊為資產的詳細資訊,請參閱使用 SDK 在 Machine Learning 中將模型註冊為資產 (部分機器翻譯)。
如需建立環境的詳細資訊,請參閱使用 CLI & SDK 管理 Azure Machine Learning 環境 (v2) (部分機器翻譯)。
注意
若要建立 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 工作室建立受控線上端點時,您必須為端點定義初始部署。 在您可以定義部署之前,您必須在工作區中註冊模型。 讓我們從註冊要用於部署的模型開始。
註冊您的模型
模型註冊是工作區中的邏輯實體。 此實體可能包含單一模型檔案,或是多個檔案的目錄。 就生產最佳做法而言,您應註冊模型和環境。 在本文中建立端點和部署時,我們會假設您已註冊包含模型的模型資料夾 (英文)。
若要註冊範例模型,請遵循下列步驟:
移至 Azure Machine Learning Studio 。
在左側導覽列,選取 [模型] 頁面。
選取 [註冊] ,然後選擇 [從本機檔案] 。
針對 [模型類型] 選取 [未指定類型] 。
選取 [瀏覽] ,然後選擇 [瀏覽資料夾] 。
從您稍早所複製或所下載存放庫的本機複本中選取 \azureml-examples\cli\endpoints\online\model-1\model
資料夾。 出現提示時,選取 [上傳] ,然後等候上傳完成。
資料夾上傳完成後,選取 [下一步] 。
為模型輸入易記名稱 。 本文中的步驟假設模型名為 model-1
。
選取 [下一步] ,然後選取 [註冊] 以完成註冊。
重複先前的步驟以從您稍早所複製或所下載存放庫的本機複本中的 \azureml-examples\cli\endpoints\online\model-2\model
資料夾註冊 model-2
。
如需使用已註冊模型的詳細資訊,請參閱註冊和使用模型 。
如需有關在工作室中建立環境的資訊,請參閱建立環境 (部分機器翻譯)。
建立受控線上端點和「藍色」部署
使用 Azure Machine Learning 工作室直接在瀏覽器中建立受控線上端點。 在工作室建立受控線上端點時,您必須定義初始部署。 您無法建立空的受控線上端點。
在工作室中建立受控線上端點的其中一種方式是從 [模型] 頁面。 此方法也提供將模型新增至現有受控線上部署的簡單方法。 部署您先前在註冊您的模型 一節中所註冊、名為 model-1
的模型:
移至 Azure Machine Learning Studio 。
在左側導覽列,選取 [模型] 頁面。
選取名為 model-1
的模型,方法是核取模型名稱旁的圓圈。
選取 [部署] >[即時端點] 。
此動作會開啟一個視窗,您可以在其中指定端點的詳細資料。
輸入 [端點名稱] 。
保留預設選取項目:[受控] 計算類型和 [金鑰型驗證] 驗證類型。
選取 [下一步] ,直到到達 [部署] 頁面。 在這裡執行下列工作:
將部署命名為「藍色」。
選取 [啟用 Application Insights 診斷及資料收集] 的方塊,以便稍後能在工作室中檢視端點活動圖表。
選取 [下一步] 以移至 [環境] 頁面。 在這裡執行下列步驟:
在 [選取評分檔案和相依性] 方塊中,從您稍早複製或下載的存放庫中瀏覽並選取 \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py
檔案。
在環境清單上方的搜尋方塊中開始輸入 sklearn
,然後選取 [AzureML-sklearn-0.24] 策展環境。
選取 [下一步] 以移至 [計算] 頁面。 在這裡,保留虛擬機器的預設選項 [Standard_DS3_v2],並將 [執行個體計數] 變更為 1。
選取 [下一步] 以接受藍色部署的預設流量配置 (100%)。
檢閱部署設定,然後選取 [建立] 按鈕。
或者,您也可以從工作室中的 [端點] 頁面建立受控線上端點。
移至 Azure Machine Learning Studio 。
在左側導覽列,選取 [端點] 頁面。
選取 + 建立 。
此動作會開啟視窗供您指定端點和部署的詳細資料。 輸入端點和部署的設定 (如先前步驟 5-11 中所述),並接受預設值,直到系統提示您 [建立] 部署為止。
確認您現有的部署
確認現有部署的其中一個方法是叫用您的端點,使其可以針對指定的輸入要求為您的模型評分。 當您透過 CLI 或 Python SDK 叫用您的端點時,您可以選擇指定將接收傳入流量的部署名稱。
注意
與 CLI 或 Python SDK 不同,Azure Machine Learning 工作室會在您叫用端點時要求您指定部署。
使用部署名稱叫用端點
如果您使用將接收流量的部署名稱叫用端點,Azure Machine Learning 會將端點的流量直接路由傳送到指定的部署,並傳回其輸出。 您可以針對 CLI v2 (部分機器翻譯) 使用 --deployment-name
選項,或針對 SDK v2 (部分機器翻譯) 使用 deployment_name
選項來指定部署。
在不指定部署的情況下叫用端點
如果您在沒有指定將接收流量之部署的情況下叫用端點,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
命令來叫用端點。 我們將使用 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
- 在端點中測試的特定部署名稱
我們將使用 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",
)
檢視受控線上端點
您可以在 [端點] 頁面中檢視所有受控線上端點。 移至端點的 [詳細資料] 頁面來尋找重要資訊,包括端點 URI、狀態、測試工具、活動監視器、部署記錄和樣本取用程式碼:
在左側導覽列,選取 [端點] 。 在這裡,您可以查看工作區中所有端點的清單。
(選用) 在 [計算類型] 上建立 [篩選條件] ,以只顯示 [受控] 計算類型。
選取端點名稱以檢視端點的 [詳細資料] 頁面。
使用樣本資料測試端點
使用端點詳細資料頁面中的 [測試] 索引標籤,以測試受控線上部署。 輸入樣本輸入並檢視結果。
在端點的詳細資料頁面中選取 [測試] 索引標籤。 已在下拉式功能表中選取藍色部署。
從 json (英文) 檔案中複製範例輸入
將範例輸入貼到測試方塊中。
選取 [測試]。
縮放現有部署以處理更多流量
在使用線上端點來部署和評分機器學習模型 中所述的部署中,您會在部署 yaml 檔案中將 instance_count
設定為 1
的值。 您可以使用 update
命令來擴增:
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
注意
請注意,在上述命令中我們使用 --set
來覆寫部署設定。 或者,您也可以更新 yaml 檔案,並使用 --file
輸入將該檔案作為輸入傳遞到 update
命令中。
使用稍早建立的 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)
使用下列指示,調整執行個體的數目來擴大或縮小部署:
在端點 [詳細資料] 頁面中。 找出藍色部署的卡片。
在藍色部署卡片的標頭選取編輯圖示 。
將 [執行個體計數] 變更為 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>
。 下列程式碼片段會使用 curl
來直接叫用部署。 此程式碼片段應可在 Unix/WSL 環境中運作:
# 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()
注意
如果您要為 Kubernetes 線上端點建立部署,請使用 KubernetesOnlineDeployment
類別,並在 Kubernetes 叢集中指定 Kubernetes 執行個體類型 。
測試新的部署
雖然 green
配置的流量為 0%,但您仍可使用 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
,然後選取 [AzureML-sklearn-0.24] 策展環境。
選取 [下一步] 以移至 [計算] 頁面。 在這裡,保留虛擬機器的預設選項 [Standard_DS3_v2],並將 [執行個體計數] 變更為 1。
選取 [下一步] 以移至 [流量] 頁面。 在這裡,保留部署的預設流量配置 (「藍色」為 100% 的流量,而「綠色」則為 0% 的流量)。
選取 [下一步] 以檢閱您的部署設定。
選取 [建立] 以建立部署。
或者,您可以使用 [模型] 頁面來新增部署:
在左側導覽列,選取 [模型] 頁面。
核取模型名稱旁邊的圓圈來選取模型。
選取 [部署] >[即時端點] 。
選擇部署到現有的受控線上端點。
依照先前的步驟 3 至 9 以完成綠色部署的建立。
注意
將新部署新增至端點時,您可以在 [流量] 頁面上調整部署之間流量平衡。 不過,在目前的階段您應該保留部署的預設流量配置 (「藍色」為 100% 的流量,而「綠色」則為 0% 的流量)。
測試新的部署
雖然 green
配置的流量為 0%,但您仍可叫用端點和部署。 使用端點詳細資料頁面中的 [測試] 索引標籤,以測試受控線上部署。 輸入樣本輸入並檢視結果。
在端點的詳細資料頁面中選取 [測試] 索引標籤。
從下拉式功能表選取綠色部署。
從 json (英文) 檔案中複製範例輸入。
將範例輸入貼到測試方塊中。
選取 [測試]。
使用鏡像流量測試部署
測試 green
部署之後,您可以向其鏡像 (或複製) 特定百分比的即時流量。 流量鏡像不會變更傳回給用戶端的結果,100% 的要求仍然會流到 blue
部署。 流量的鏡像百分比會複製並提交至 green
部署,因此您可以收集計量和記錄,而不會影響用戶端。 當您想在不影響用戶端的情況下驗證新的部署時,鏡像非常有用。 例如,您可以使用鏡像來檢查延遲是否在可接受的界限內,或是檢查是不是沒有任何 HTTP 錯誤。 使用流量鏡像來測試新部署,也被稱為鏡像測試 (英文)。 接收鏡像流量的部署 (在此情況下為 green
部署) 也可以稱為「鏡像部署」 。
鏡像有下列限制:
鏡像支援 CLI (v2) (2.4.0 版或更高版本) 和 Python SDK (v2) (1.0.0 版或更高版本)。 如果您使用舊版的 CLI/SDK 來更新端點,您將會失去鏡像流量設定。
鏡像目前不支援 Kubernetes 線上端點。
您只能針對端點中的單一部署進行流量鏡像。
您可以進行鏡像的最大流量百分比為 50%。 此限制是為了降低對您端點頻寬配額 的影響 (預設為 5 MBPS)。如果您超過配置的配額,您的端點頻寬將會受到節流。 如需監視頻寬節流的詳細資訊,請參閱監視受控線上端點 。
也請注意下列行為:
部署只能設定為僅接收即時流量或鏡像流量,而非兩者。
當您叫用端點時,您可以指定其任何部署的名稱 (甚至是鏡像部署) 以傳回預測。
當您使用將接收傳入流量之部署的名稱來叫用端點時,Azure Machine Learning 並不會針對鏡像部署進行流量鏡像。 Azure Machine Learning 只會在您未指定部署的情況下,將傳送至端點的流量對鏡像部署進行流量鏡像。
現在,讓我們將綠色部署設定為接收 10% 的鏡像流量。 用戶端仍然只會從藍色部署接收預測。
下列命令會將 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 blue --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"
測試過您的 green
部署之後,請向其配置少量的流量:
endpoint.traffic = {"blue": 90, "green": 10}
ml_client.begin_create_or_update(endpoint).result()
測試過您的 green
部署之後,請向其配置少量的流量:
在端點 [詳細資料] 頁面中,選取 [更新流量] 。
調整部署流量,並將 10% 的流量配置到綠色部署,然後將 90% 的流量配置到藍色部署。
選取更新 。
提示
總流量百分比必須合計為 0% (以停用流量) 或 100% (以啟用流量)。
現在,您的 green
部署會接收所有即時流量的 10%。 用戶端將會同時接收到來自 blue
和 green
部署的預測。
將所有流量傳送給新的部署
當您覺得 green
部署完全符合要求後,請將所有流量切換至此部署。
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"
當您覺得 green
部署完全符合要求後,請將所有流量切換至此部署。
endpoint.traffic = {"blue": 0, "green": 100}
ml_client.begin_create_or_update(endpoint).result()
當您覺得 green
部署完全符合要求後,請將所有流量切換至此部署。
在端點 [詳細資料] 頁面中,選取 [更新流量] 。
調整部署流量,並將 100% 的流量配置到綠色部署,然後將 0% 的流量配置到藍色部署。
選取更新 。
移除舊的部署
使用下列步驟,從受控線上端點刪除個別部署。 刪除個別部署會影響受控線上端點中的其他部署:
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%。
在端點 [詳細資料] 頁面中,尋找您藍色部署。
選取部署名稱旁的刪除圖示 。
刪除端點和部署
若您不打算使用端點和部署,則應將其刪除。 刪除端點也會刪除其所有底層部署。
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
若您不打算使用端點和部署,則應將其刪除。 刪除端點也會刪除其所有底層部署。
ml_client.online_endpoints.begin_delete(name=online_endpoint_name)
若您不打算使用端點和部署,則應將其刪除。 刪除端點也會刪除其所有底層部署。
移至 Azure Machine Learning Studio 。
在左側導覽列,選取 [端點] 頁面。
核取模型名稱旁邊的圓圈來選取端點。
選取 [刪除] 。
或者,您也可以直接在端點的詳細資料頁面中選取 [刪除] 圖示,以刪除受控線上端點。
相關內容