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 モデルのコードなしのデプロイは、マネージド オンライン エンドポイントと Kubernetes オンライン エンドポイントの両方でサポートされています。

この記事では、Triton とモデルをマネージド オンライン エンドポイントにデプロイする方法について説明します。 CLI (コマンド ライン)、Python SDK v2、Azure Machine Learning スタジオの使用に関する情報を提供します。

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
    

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
    

次のステップ

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