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 に関するページを参照してください。
前提条件
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
Azure CLI と Azure CLI の
ml
拡張機能。 詳しくは、CLI (v2) のインストール、設定、使用に関するページをご覧ください。重要
この記事の CLI の例では、Bash (または互換性のある) シェルを使用していることを前提としています。 たとえば、Linux システムや Linux 用 Windows サブシステムなどです。
Azure Machine Learning ワークスペース。 お持ちでない場合は、CLI (v2) のインストール、セットアップ、使用に関する記事の手順を使用して作成します。
動作する 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 のコードなしのデプロイの場合、 ローカル エンドポイントを使用したテスト は現在サポートされていません。
複数のコマンドでパスを入力せずにすむように、次のコマンドを使用して
BASE_PATH
環境変数を設定します。 この変数は、モデルとそれに関連する YAML 構成ファイルが格納されているディレクトリを示します。BASE_PATH=endpoints/online/triton/single-model
次のコマンドを使用して、作成するエンドポイントの名前を設定します。 この例では、エンドポイントにランダムな名前を作成します。
export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
エンドポイントの 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
デプロイの 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
Deploy to Azure (Azure へのデプロイ)
適用対象: Azure CLI ml 拡張機能 v2 (現行)
YAML 構成を使用して新しいエンドポイントを作成するには、次のコマンドを使用します。
az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
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 推論サーバーと通信します。 このファイルはクライアント側で実行されます。
エンドポイントのスコアリング URI を取得するには、次のコマンドを使用します。
scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv) scoring_uri=${scoring_uri%/*}
認証キーを取得するには、次のコマンドを使用します。
auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
エンドポイントを使用してデータをスコア付けするには、次のコマンドを使用します。 これにより、クジャクの画像 (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 (現行)
エンドポイントを使い終えたら、次のコマンドを使用して削除します。
az ml online-endpoint delete -n $ENDPOINT_NAME --yes
モデルをアーカイブするには次のコマンドを使用します。
az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
次のステップ
詳細については、次の記事を参照してください。