使用自訂容器將模型部署至線上端點
適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)
瞭解如何使用自定義容器將模型部署至 Azure 機器學習 中的在線端點。
自訂容器部署所使用的 Web 伺服器可以不同於 Azure Machine Learning 所使用的預設 Python Flask 伺服器。 這些部署的使用者仍然可以利用 Azure Machine Learning 的內建監視、縮放、警示和驗證功能。
下表列出各種部署範例,其使用自訂容器,例如 TensorFlow Serving、TorchServe、Triton Inference Server、Plumber R 套件和 Azure Machine Learning 推斷最小映像。
本文著重在使用 TensorFlow (TF) Serving 提供 TensorFlow 模型。
警告
Microsoft可能無法協助針對自定義映像所造成的問題進行疑難解答。 如果您遇到問題,系統可能會要求您使用預設映像,或Microsoft提供的其中一個影像,以查看問題是否專屬於您的映像。
必要條件
遵循本文中的步驟之前,請確定您已滿足下列必要條件:
Azure Machine Learning 工作區。 如果您沒有工作區資源,請依快速入門:建立工作區資源一文中的步驟來建立工作區資源。
Azure CLI 與
ml
延伸模組或 Azure Machine Learning Python SDK v2:若要安裝 Azure CLI 和擴充功能,請參閱安裝、設定和使用 CLI (v2)。
重要
本文中的 CLI 範例假設您使用 Bash (或相容的) 殼層。 例如,從 Linux 系統或 Windows 子系統 Linux 版。
若要安裝 Python SDK v2,請使用下列命令:
pip install azure-ai-ml azure-identity
若要將現有的 SDK 安裝更新為最新版本,請使用下列命令:
pip install --upgrade azure-ai-ml azure-identity
您或您使用的服務主體必須具有 包含工作區之 Azure 資源群組的參與者 存取權。 如果您使用快速入門文章來設定工作區,您有這樣的資源群組。
若要在本機部署,您必須在本機執行 Docker 引擎。 強烈建議您執行此步驟。 它可協助您偵錯問題。
下載原始程式碼
若要遵循本教學課程,請從 GitHub 複製原始程式碼。
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
初始化環境變數
定義環境變數:
BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1
下載 TensorFlow 模型
下載並解壓縮會將輸入除以二,再將所得結果加二的模型:
wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH
在本機執行 TF 服務映像以測試其能否正常運作
使用 Docker 在本機執行映像以進行測試:
docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
-e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
--name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10
確認您可以將活躍度和評分要求傳送至映像
首先,檢查容器是否運作,這表示容器內的進程仍在執行中。 您應該會得到 200 (OK) 的回應。
curl -v http://localhost:8501/v1/models/$MODEL_NAME
然後,確認您是否可以取得關於未標記資料的預測:
curl --header "Content-Type: application/json" \
--request POST \
--data @$BASE_PATH/sample_request.json \
http://localhost:8501/v1/models/$MODEL_NAME:predict
停止映像
現在您已在本機測試,請停止映像:
docker stop tfserving-test
將線上端點部署至 Azure
接下來,將線上端點部署至 Azure。
建立要用於端點和部署的 YAML 檔案
您可以使用 YAML 來設定雲端部署。 請參閱此範例的範例 YAML:
tfserving-endpoint.yml
$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token
tfserving-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: {{MODEL_VERSION}}
path: ./half_plus_two
environment_variables:
MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/{{MODEL_VERSION}}
MODEL_NAME: half_plus_two
environment:
#name: tfserving
#version: 1
image: docker.io/tensorflow/serving:latest
inference_config:
liveness_route:
port: 8501
path: /v1/models/half_plus_two
readiness_route:
port: 8501
path: /v1/models/half_plus_two
scoring_route:
port: 8501
path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1
在此 YAML/Python 參數中,有幾個要注意的重要概念:
整備度路由與活躍度路由
HTTP 伺服器會定義活躍度和整備度的路徑。 活躍度路由可用來確認伺服器是否正在執行。 整備度路由可用來確認伺服器是否已準備好執行工作。 在機器學習推斷中,伺服器可能會在載入模型之前,先對活躍度要求回應 200 OK。 只有在模型載入記憶體之後,伺服器才能回應 200 OK 的整備要求。
如需即時度和整備探查的詳細資訊,請參閱 Kubernetes 檔。
請注意,此部署會針對活躍度和整備度使用相同的路徑,因為 TF 服務只會定義活躍度路由。
找出所掛接的模型
當您將模型部署為線上端點時,Azure Machine Learning 會將您的模型「掛接」到您的端點。 模型掛接可讓您部署新版本的模型,而不需要建立新的 Docker 映像。 根據預設,以 foo 名稱和第 1 版註冊的模型會位於已部署容器內的下列路徑:/var/azureml-app/azureml-models/foo/1
例如,如果您的本機計算機上有 /azureml-examples/cli/endpoints/online/custom-container 的目錄結構,其中模型名為 half_plus_two:
而 tfserving-deployment.yml 包含:
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
然後您的模型將會位於部署中的 /var/azureml-app/azureml-models/tfserving-deployment/1 底下:
您可以選擇性地設定 model_mount_path
。 它可讓您變更掛接模型的路徑。
重要
在 Linux 中,model_mount_path
必須是有效的絕對路徑 (容器映像的 OS)。
例如,您可以將 model_mount_path
參數加入到 tfserving-deployment.yml:
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
.....
然後您的模型位於 部署中的 /var/tfserving-model-mount/tfserving-deployment/1 。 請注意,它不再位在 azureml-app/azureml-models 之下,而是在您指定的掛接路徑下:
建立端點和部署
現在您已瞭解 YAML 的建構方式,請建立您的端點。
az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving-endpoint.yml
建立部署可能需要幾分鐘的時間。
az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving-deployment.yml --all-traffic
叫用端點
部署完成後,請看看您是否可以向所部署的端點提出評分要求。
RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)
刪除端點
既然您已成功使用端點評分,就可以將其刪除:
az ml online-endpoint delete --name tfserving-endpoint
相關內容
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應