Triton 推論サーバーを使用した高パフォーマンスのサービス

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

Azure Machine Learning でオンライン エンドポイントと共に NVIDIA Triton 推論サーバーを使用する方法について説明します。

Triton は、推論用に最適化されたマルチフレームワークのオープンソース ソフトウェアです。 TensorFlow、ONNX Runtime、PyTorch、NVIDIA TensorRT などの一般的な機械学習フレームワークをサポートしています。 CPU または GPU のワークロードに使用できます。

Triton モデルをオンライン エンドポイントにデプロイするときに利用できる方法は主に 2 つあります。コードなしデプロイとフル コード (Bring Your Own Container) デプロイです。

  • Triton モデルのコードなしのデプロイは、デプロイするTritonモデルを持ち込むだけでよいので、シンプルなデプロイ方法です。
  • Triton モデルのフル コード デプロイ (Bring Your Own Container) は、Triton 推論サーバーで使用できる構成のカスタマイズを完全に制御できるように、それらをデプロイするためのより高度な方法です。

どちらのオプションでも、Triton 推論サーバーは、NVIDIA によって定義された Triton モデルに基づいて推論を実行します。 たとえば、アンサンブル モデルは、より高度なシナリオに使用できます。

Triton は、マネージド オンライン エンドポイントと Kubernetes オンライン エンドポイントの両方でサポートされています。

この記事では、Triton のコードなしのデプロイを使用して、マネージド オンライン エンドポイントにモデルをデプロイする方法について説明します。 CLI (コマンド ライン)、Python SDK v2、Azure Machine Learning スタジオの使用に関する情報を提供します。 Triton 推論サーバーの構成を使用してさらに直接カスタマイズする場合は、カスタム コンテナーを使用してモデルをデプロイする方法に関するページと、Triton の BYOC の例 (デプロイ定義エンドツーエンド スクリプト) を参照してください。

Note

NVIDIA Triton Inference Server コンテナーの使用は NVIDIA AI Enterprise Software ライセンス契約で管理され、エンタープライズ製品サブスクリプションなしで 90 日間使用できます。 詳細については、Azure Machine Learning の NVIDIA AI Enterprise に関するページを参照してください。

前提条件

この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。

  • 動作する Python 3.8 (以上) の環境。

  • スコアリング用に追加の Python パッケージをインストールしている必要があり、以下のコードでインストールできます。 これには次のようなものがあります。

    • Numpy - 配列と数値計算ライブラリ
    • Triton 推論サーバー クライアント - Triton 推論サーバーへの要求を容易にする
    • 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 の既定値を設定していない場合は、既定の設定を保存する必要があります。 サブスクリプション、ワークスペース、およびリソース グループの値が複数回渡されることを防ぐには、以下のコマンドを使用します。 次のパラメーターを、実際の構成の値に置き換えます。

  • <subscription> は、Azure サブスクリプション ID に置き換えてください。
  • <workspace> は、ご利用の Azure Machine Learning ワークスペース名に置き換えます。
  • <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 (現行)

このセクションでは、Machine Learning 拡張機能 (v2) を備えた Azure CLI を使用してマネージド オンライン エンドポイントにデプロイする方法を示します。

重要

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) を機能させるには、typetriton_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
    

Deploy to Azure (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
    

次のステップ

詳細については、次の記事を参照してください。