本文內容
適用於: Azure CLI ml 延伸模組 v2 (目前) Python SDK azure-ai-ml v2 (目前)
在本文中,您將瞭解如何在生產環境中部署新版本的機器學習模型,而不會造成任何中斷。 您將使用藍色-綠色部署策略(也稱為安全推出策略),將新版本的Web服務引入生產環境。 此策略可讓您在完全推出 Web 服務之前,將新版本的 Web 服務推出至一小部分的使用者或要求。
本文假設您使用的是在線端點,也就是用於在線(即時)推斷的端點。 線上端點有兩種類型:受控線上端點 和 Kubernetes 線上端點 。 如需端點的詳細資訊,以及受控在線端點與 Kubernetes 在線端點之間的差異,請參閱什麼是 Azure 機器學習 端點? 。
本文的主要範例使用受控在線端點進行部署。 若要改用 Kubernetes 端點,請參閱本檔中的附註,內嵌於受控在線端點討論。
在本文中,您將了解如何:
使用名為 「blue」 的部署來定義在線端點,以提供模型第 1 版
調整藍色部署,使其可以處理更多要求
將模型第 2 版(稱為「綠色」部署)部署到端點,但不會傳送部署即時流量
隔離測試綠色部署
將一百分比的即時流量鏡像到綠色部署以驗證
將少量即時流量傳送至綠色部署
將所有即時流量傳送至綠色部署
刪除現在未使用的 v1 藍色部署
必要條件
遵循本文中的步驟之前,請確定您已滿足下列必要條件:
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 Notebook 為基礎 。 其包含與本文相同的內容,雖然程式碼的順序稍有不同。
注意
Kubernetes 在線端點的步驟是以 kubernetes-online-endpoints-safe-rollout.ipynb Notebook 為基礎 。
連線至 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] 。
找出第一個模型的模型資料夾/cli/endpoints/online/model-1/model
和評分腳本/cli/endpoints/online/model-1/onlinescoring/score.py
。model-1
找出第二個模型的模型資料夾/cli/endpoints/online/model-2/model
和評分腳本/cli/endpoints/online/model-2/onlinescoring/score.py
。model-2
定義端點和部署
線上端點用於線上 (即時) 推斷。 在線端點包含已準備好接收客戶端數據的部署,並即時傳送回應。
定義端點
下表列出當您定義端點時要指定的索引鍵屬性。
屬性
描述
Name
必要。 端點的名稱。 其在 Azure 區域中必須是唯一的。 如需命名規則的詳細資訊,請參閱端點限制 (部分機器翻譯)。
驗證模式
端點的驗證方法。 選擇金鑰型驗證key
和 Azure 機器學習 令牌型驗證 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) Managed Online Deployment 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
建立 『blue』 部署
在本文中,您將使用 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
重要
--all-traffic
中的 az ml online-deployment create
旗標會將 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 (v2) 管理 Azure Machine Learning 環境 。
建立在線端點
若要建立受控在線端點,請使用 類別 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()
建立 『blue』 部署
若要為您的受控在線端點建立部署,請使用 類別 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 (v2) 管理 Azure Machine Learning 環境 。
注意
若要建立 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
的模型,方法是核取模型名稱旁邊的圓圈。
選取 [部署 >即時端點]。
此動作會開啟一個視窗,您可以在其中指定端點的詳細資料。
輸入端點名稱 。
保留預設選取項目:[受控] 計算類型和 [金鑰型驗證] 驗證類型。
選取 [下一步] ,直到到達 [部署] 頁面。 在這裡,執行下列工作:
將部署命名為 「blue」。
核取 [ 啟用 Application Insights 診斷和數據收集 ] 方塊,可讓您稍後在 Studio 中檢視端點活動的圖表。
選取 [下一步] 以移至 [環境] 頁面。 在這裡,執行下列步驟:
在 [選取評分檔案和相依性] 方塊中,流覽並選取 \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 機器學習 會將端點的流量直接路由傳送至指定的部署,並傳回其輸出。 您可以使用 --deployment-name
CLI v2 的選項 ,或 deployment_name
SDK v2 的選項 來指定部署。
在未指定部署的情況下叫用端點
如果您在未指定接收流量的部署的情況下叫用端點,Azure 機器學習 會根據流量控制設定,將端點的連入流量路由傳送至端點中的部署。
流量控制設定會配置指定百分比的連入流量到端點中的每個部署。 例如,如果您的流量規則指定端點中的特定部署將接收傳入流量 40% 的時間,Azure 機器學習 會將端點流量的 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 檔案複製範例輸入
將範例輸入貼到測試方塊中。
選取 [測試]。
調整現有的部署以處理更多流量
在使用在線端點部署和評分機器學習模型中所述的部署中,您會將 設定instance_count
為部署 yaml 檔案中的值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)
使用下列指示來調整實例數目,以相應增加或減少部署:
在 [端點詳細數據] 頁面中。 尋找藍色部署的卡片。
選取 藍色部署卡片標頭中的編輯圖示 。
將實例計數變更為 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
命名為 。
從 [ 端點詳細數據] 頁面
在端點 [詳細數據] 頁面中,選取 [+ 新增部署] 按鈕。
選取 [ 部署模型 ]。
選取 [下一步 ] 以移至 [模型] 頁面,然後選取模型模型 -2 。
選取 [下一步 ] 以移至 [部署] 頁面,然後執行下列工作:
將部署命名為 「green」。
啟用 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 機器學習 不會將流量鏡像到陰影部署。 Azure 機器學習 當您未指定部署時,會從傳送至端點的流量鏡像到陰影部署的流量。
現在,讓我們設定綠色部署以接收 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%。
選取更新 。
端點詳細數據頁面現在會顯示10%到部署的 green
鏡像流量配置。
若要測試鏡像流量,請參閱 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% 的所有即時流量。 用戶端會收到 來自和 green
部署的預測blue
。
將所有流量傳送至您的新部署
一旦您完全滿意您的 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 。
在左側導覽列,選取 [端點] 頁面。
核取模型名稱旁邊的圓圈來選取端點。
選取 [刪除] 。
或者,您可以選取端點詳細數據頁面中的 [刪除] 圖示,直接 刪除受控在線端點。
相關內容