使用 Triton 推斷伺服器的高效能服務

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

了解如何在 Azure Machine Learning 中使用 NVIDIA Triton 推斷伺服器搭配線上端點

Triton 是針對推斷最佳化的多架構開放原始碼軟體。 它支援熱門的機器學習架構,例如 TensorFlow、ONNX Runtime、PyTorch、NVIDIA TensorRT 等等。 其可用於您的 CPU 或 GPU 工作負載。

在將 Triton 模型部署至在線端點時,您主要可以採用兩種方法:無程式代碼部署或完整程式碼(攜帶您自己的容器)部署。

  • Triton 模型的無程序代碼部署是部署它們的簡單方式,因為您只需要部署 Triton 模型。
  • 針對 Triton 模型進行完整程式代碼部署 (自備容器)是更進階的部署方式,因為您可以完全控制自定義 Triton 推斷伺服器可用的設定。

針對這兩個選項,Triton 推斷伺服器會根據 NVIDIA 所定義的 Triton 模型執行推斷。 例如, 合奏模型 可用於更進階的案例。

受控在線端點和 Kubernetes 在線端點支援 Triton。

在本文中,您將瞭解如何使用 Triton 的無程式代碼部署將模型部署到受控在線端點。 同時使用 CLI (命令列)、Python SDK v2 和 Azure Machine Learning 工作室提供資訊。 如果您想要使用 Triton 推斷伺服器的組態進一步自定義,請參閱 使用自定義容器來部署模型 和 Triton 的 BYOC 範例(部署定義端對端腳本)。

注意

NVIDIA Triton 推斷伺服器容器的使用,受 NVIDIA AI 企業軟體授權合約規範,沒有企業產品訂用帳戶可使用 90 天。 如需詳細資訊,請參閱 Azure Machine Learning 上的 NVIDIA AI Enterprise

必要條件

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

  • 正常運作的 Python 3.8 (或以上版本) 環境。

  • 您必須安裝額外的 Python 套件以進行評分,而且可以使用下列程式碼加以安裝。 其中包含:

    • Numpy - 陣列和數值運算程式庫
    • Triton Inference Server Client - 協助對 Triton Inference Server 的要求
    • Pillow - 映像作業的程式庫
    • Gevent - 連線到 Triton 伺服器時所使用的網路程式庫
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • 您 Azure 訂用帳戶的 NCv3 系列 VM 的存取權。

    重要

    您可能需要先為您的訂用帳戶要求增加配額,才能使用此系列的 VM。 如需詳細資訊,請參閱 NCv3 系列

NVIDIA Triton 推斷伺服器需要特定的模型存放庫結構,其中的每個模型都有一個目錄,以及子目錄為模型版本。 每個模型版本子目錄的內容取決於模型的類型和支援該模型的後端需求。 若要查看所有模型存放庫結構 https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

此文件中的資訊是以使用 ONNX 格式儲存的模型為基礎,因此模型存放庫的目錄結構是 <model-repository>/<model-name>/1/model.onnx。 具體而言,此模型會執行影像識別。

本文中的資訊是以 azureml-examples 存放庫中包含的程式碼範例為基礎。 若要在本機執行命令,而不需要複製/貼上 YAML 和其他檔案,請複製存放庫,然後將目錄變更為存放庫中的 cli 目錄:

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

如果您尚未設定 Azure CLI 的預設值,請儲存您的預設設定。 若要避免多次傳遞訂閱、工作區和資源群組的值,請使用下列命令。 將下列參數取代為特定設定值:

  • 使用您的 Azure 訂用帳戶識別碼來取代 <subscription>
  • 將您的 Azure Machine Learning 工作區名稱取代為 <workspace>
  • <resource-group> 取代為包含您工作區的 Azure 資源群組。
  • <location> 取代為包含您工作區的 Azure 區域。

提示

您可以使用 az configure -l 命令來查看目前的預設值。

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

定義部署設定

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

本節說明如何使用 Azure CLI 搭配機器學習擴充功能 (v2) 部署至受控線上端點。

重要

針對 Triton 無程式碼部署,目前不支援透過本機端點進行測試

  1. 若要避免輸入多個命令的路徑,請使用下列命令來設定 BASE_PATH 環境變數。 此變數會指向模型和相關聯的 YAML 設定檔所在的目錄:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. 使用下列命令來設定即將建立的端點的名稱。 在此範例中,會為端點建立隨機名稱:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. 為您的端點建立 YAML 設定檔。 下列範例會設定端點的名稱和驗證模式。 下列命令中使用的是位於您稍早複製的 azureml-examples 存放庫中的 /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. 建立用於部署的 YAML 設定檔。 下列範例會將名為 blue 的部署設定為上一個步驟中定義的端點。 下列命令中使用的是位於您稍早複製的 azureml-examples 存放庫中的 /cli/endpoints/online/triton/single-model/create-managed-deployment.yml

    重要

    若要讓 Triton 無程式碼部署 (NCD) 運作,需要將 type 設定為 triton_model​type: triton_model​。 如需詳細資訊,請參閱 CLI (v2) 模型 YAML 結構描述

    此部署會使用 Standard_NC6s_v3 VM。 您可能需要先為您的訂用帳戶要求增加配額,才能使用此 VM。 如需詳細資訊,請參閱 NCv3 系列

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: blue
    endpoint_name: my-endpoint
    model:
      name: sample-densenet-onnx-model
      version: 1
      path: ./models
      type: triton_model
    instance_count: 1
    instance_type: Standard_NC6s_v3
    

部署至 Azure

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

  1. 若要使用 YAML 設定來建立新端點,請使用下列命令:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. 若要使用 YAML 設定來建立部署,請使用下列命令:

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f $BASE_PATH/create-managed-deployment.yaml --all-traffic
    

測試端點

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

部署完成後,請使用下列命令對已部署的端點提出評分要求。

提示

azureml-examples 存放庫中的檔案 /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py 會用於評分。 傳遞至端點的影像需要預先處理,以符合大小、類型和格式需求,以及需要後置處理以顯示預測的標籤。 triton_densenet_scoring.py 會使用 tritonclient.http 程式庫來與 Triton 推斷伺服器進行通訊。 此檔案會在用戶端上執行。

  1. 若要取得端點評分 uri,請使用下列命令:

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. 若要取得驗證金鑰,請使用下列命令:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. 若要使用端點對資料進行評分,請使用下列命令。 它會將孔雀 (https://aka.ms/peacock-pic) 的影像提交至端點:

    python $BASE_PATH/triton_densenet_scoring.py --base_url=$scoring_uri --token=$auth_token --image_path $BASE_PATH/data/peacock.jpg
    

    指令碼的回應類似於下列文字:

    Is server ready - True
    Is model ready - True
    /azureml-examples/cli/endpoints/online/triton/single-model/densenet_labels.txt
    84 : PEACOCK
    

刪除端點和模型

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

  1. 完成端點之後,請使用下列命令將它刪除:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. 使用下列命令封存您的模型:

    az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
    

下一步

若要深入了解,請檢閱下列文章: