TensorFlow Servingは、深層学習モデル用の推論サービスエンジンです。 TensorFlow Servingでは、オンラインサービスとしてSavedModel形式のTensorFlowモデルをデプロイできます。 TensorFlow Servingは、ローリングアップデートやモデルのバージョン管理などの機能もサポートしています。 このトピックでは、TensorFlow Servingイメージを使用してモデルサービスをデプロイする方法について説明します。
あなたが始める前に
モデルファイル
TensorFlow Servingイメージを使用してモデルサービスをデプロイするには、モデルファイルが次の構造のObject Storage service (OSS) バケットに格納されていることを確認します。
Versionサブディレクトリ: 各ディレクトリには、少なくとも1つのversionサブディレクトリが必要です。 バージョンサブディレクトリの名前は、モデルバージョンを示す番号でなければなりません。 数字が大きいほど、新しいモデルバージョンを示します。
モデルファイル: モデルファイルは、バージョンのサブディレクトリ内にSavedModel形式で保存されます。 モデルサービスは、最新バージョンに対応するサブディレクトリからモデルファイルを自動的に読み込みます。
次のステップを実行します。
OSSバケットにモデルストレージディレクトリを作成します (例:
oss:// examplebucket/models/tf_serving/
) 。 詳細については、「ディレクトリの管理」をご参照ください。前の手順で作成したディレクトリにモデルファイルをアップロードします (サンプルとしてtf_serving.zipを使用できます) 。 モデル格納ディレクトリの形式は次のとおりです。
tf_serving ├── modelA │ └── 1 │ ├── saved_model.pb │ └── variables │ ├── variables.data-00000-of-00001 │ └── variables.index │ ├── modelB │ ├── 1 │ │ └── ... │ └── 2 │ └── ... │ └── modelC ├── 1 │ └── ... ├── 2 │ └── ... └── 3 └── ...
モデル设定ファイル
構成ファイルを使用すると、1つのサービス内で複数のモデルを実行できます。 単一モデルのサービスのみをデプロイする必要がある場合は、この手順をスキップしてください。
以下の手順に従って設定ファイルを作成し、OSSにアップロードします (モデルファイルセクションの例には、model_config.pbtxtという名前のモデル設定ファイルが含まれており、必要に応じて使用または変更できます) 。 この例では、モデル設定ファイルはoss:// examplebucket/models/tf_serving/
にアップロードされています。
モデル構成ファイルmodel_config.pbtxtには、次のファイルが含まれている必要があります。
model_config_list {
config {
name: 'modelA'
base_path: '/models/modelA/'
model_platform: 'tensorflow'
model_version_policy{
all: {}
}
}
config {
name: 'modelB'
base_path: '/models/modelB/'
model_platform: 'tensorflow'
model_version_policy{
specific {
versions: 1
versions: 2
}
}
version_labels {
key: 'stable'
value: 1
}
version_labels {
key: 'canary'
value: 2
}
}
config {
name: 'modelC'
base_path: '/models/modelC/'
model_platform: 'tensorflow'
model_version_policy{
latest {
num_versions: 2
}
}
}
}
次の表に、主要なパラメーターを示します。
パラメーター | 必須 | 説明 |
name | 選択可能 | モデルの名前。 このパラメーターを指定することを推奨します。 それ以外の場合は、後でサービスを呼び出すことはできません。 |
base_path | 必須 | 以降の手順でモデルファイルを読み取るために使用される、サービスインスタンス内のモデルディレクトリへのパス。 たとえば、マウントディレクトリが |
model_version_ポリシー | 選択可能 | モデルバージョンを読み込むためのポリシー。
|
バージョン_ラベル | 選択可能 | モデルバージョンを識別するためのカスタムラベル。 version_labelsがない場合、モデルバージョンはその番号によってのみ区別できます。 リクエストパスは version_labelsが設定されている場合、特定のバージョン番号 説明 ラベルは、デフォルトでロードされてサービスとして起動されたモデルバージョンにのみ割り当てることができます。 アンロードされたモデルバージョンにラベルを割り当てるには、Command To Runを |
サービスのデプロイDeploy the service
次のいずれかの方法を使用して、TensorFlow Servingモデルサービスをデプロイできます。
シナリオベースの展開: 基本的な展開シナリオに適しています。 TensorFlow Servingモデルサービスをデプロイするには、いくつかのパラメーターのみを設定する必要があります。
カスタム展開: 特定の環境で実行する必要があるモデルサービスに適しています。 ビジネス要件に基づいて設定を構成できます。
TensorFlow Servingモデルサービスサポートポート8501と8500:
8501: HTTPリクエストを受信するために、ポート8501でHTTPまたはRESTサーバーを起動します。
8500: gRPCリクエストを受信するために、ポート8500でGoogleリモートプロシージャコール (gRPC) サーバーを起動します
デフォルトでは、シナリオベースの展開はポート8501を使用し、変更することはできません。 gRPCサービスのポート8500を設定するには、[カスタムデプロイメント] を選択します。
次の例では、modelAを単一モデルサービスとしてデプロイします。
シナリオベースの展開
以下の手順を実行します。
PAI コンソールにログインします。 ページの上部で、目的の領域を選択します。 表示されるページで、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) の入力] をクリックします。
[Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 表示されるページの [シナリオベースのモデル展開] セクションで、[TensorFlow Serving Deployment] をクリックします。
[TFServingデプロイ] ページで、次の表に示す主要なパラメーターを設定します。 その他のパラメーターについては、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。
パラメーター
説明
デプロイ方法
サポートされる展開方法は次のとおりです。
標準モデルの配置: この方法は、単一モデルを使用するサービスを配置するためのものです。
構成ファイルの配置: このアプローチは、複数のモデルを組み込んだサービスを配置するためのものです。
モデル設定
[デプロイ方法] として [標準モデルのデプロイ] を選択した場合、モデルファイルを含むOSSパスを指定します。
[配置方法] として [構成ファイルの配置] を選択した場合、次のパラメーターを構成します。
OSS: モデルファイルが保存されているOSSパスを選択します。
マウントパス: モデルファイルにアクセスするためのサービスインスタンス内の宛先パスを指定します。
設定ファイル: モデル設定ファイルのOSSパスを選択します。
設定例:
パラメーター
単一モデルの例 (modelAのデプロイ)
マルチモデルの例
サービス名
modela_scene
multi_scene
デプロイ方法
[標準モデルの展開] を選択します。
構成ファイルの配置を選択します。
モデル設定
OSS:
oss:// examplebucket/models/tf_serving/modelA/
OSS:
oss:// examplebucket/models/tf_serving/
マウントパス: /models
設定ファイル:
oss:// examplebucket/models/tf_serving/model_config.pbtxt
[デプロイ] をクリックします。
カスタム展開
以下の手順を実行します。
PAI コンソールにログインします。 ページの上部で、目的の領域を選択します。 表示されるページで、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) の入力] をクリックします。
[Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 [カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[サービスの作成] ページで、次の表に示す主要なパラメーターを設定します。 その他のパラメーターについては、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。
パラメーター
説明
画像の選択
[PAIイメージ] を選択します。 表示されるドロップダウンリストで、[tensorflow-serving] とイメージのバージョンを選択します。 最新バージョンの使用を推奨します。
説明モデルサービスにGPUリソースが必要な場合、イメージのバージョンはx.xx.x-gpu形式である必要があります。
モデル設定
[モデル設定の指定] をクリックしてモデル設定を設定します。 モデルファイルの設定には複数の方法があります。 この例では、OSSを使用しています。
OSS: モデルファイルが保存されているOSSパスを選択します。
マウントパス: モデルファイルを読み取るためのサービスインスタンス内のパス。
コマンドの実行
tensorflow-servingの起動パラメーター。 tensorflow-servingイメージを選択すると、
/usr/bin/tf_serving_entrypoint.sh
コマンドがプリロードされます。 次のパラメーターを設定します。単一モデル展開のスタートアップパラメーター:
-- model_name: サービス要求URLで使用されるモデルの名前。 デフォルト値: model。
-- model_base_path: サービスインスタンス内のモデルディレクトリへのパス。 デフォルト値:
/models/model
マルチモデル展開のスタートアップパラメーター:
-- model_config_file: 必須です。 モデル構成ファイルへのパス。
-- model_config_file_poll_wait_seconds: オプションです。 モデル構成ファイルの更新を確認する間隔 (秒単位) 。 たとえば、
-- model_config_file_poll_wait_seconds=30
は、サービスが30秒ごとにファイルをチェックすることを意味します。説明新しい構成ファイルが検出されると、新しいファイルの変更のみが適用されます。 たとえば、モデルAが新しいファイルから削除され、モデルBが追加された場合、サービスはモデルAをアンロードし、モデルBをロードします。
-- allow_version_labels_for_unavailable_models: オプション。 デフォルト値:false カスタムラベルをアンロードされたモデルバージョンに割り当てるには、trueに設定します。 たとえば、
-- allow_version_labels_for_unavailable_models=true
です。
設定例:
パラメーター
単一モデルの例 (modelAのデプロイ)
マルチモデルの例
デプロイ方法
[イメージ展開サービス] を選択します。
画像の選択
PAIプラットフォームイメージ: tensorflow-serving、バージョン2.14.1を選択します。
モデル設定
[OSS] を選択します。
OSSパス:
oss:// examplebucket/models/tf_serving/
[マウントパス] を
/models
に設定します。コマンドの実行
/usr/bin/tf_serving_entrypoint.sh -- model_name=modelA -- model_base_path=/modelA
/usr/bin/tf_serving_entrypoint.sh -- model_config_file=/model_config.pbtxt -- model_config_file_poll_wait_seconds=30-allow_version_labels_for_unavailable_models=true
デフォルトのポート番号は8501です。 モデルサービスは、HTTPリクエストを受信するために、ポート8501でHTTPまたはRESTサーバーを起動します。 サービスでgRPCリクエストをサポートする場合は、次の操作を実行します。
モデルサービス情報で、ポート番号を [コマンドの実行] の8500に変更します。
サービス設定で、gRPC接続を有効にします。
構成エディターで、次の構成を追加します。
"networking": { "path": "/" }
[デプロイ] を選択します。
モデルサービスの呼び出し
モデルサービスのデプロイ時に設定したポート番号に基づいて、HTTPまたはgRPCリクエストをモデルサービスに送信できます。 次の例は、modelAにリクエストを送信します。
テストデータの準備
ModelAは、28 × 28のグレースケール画像を含むFashion − MNISTトレーニングデータセットを使用する画像分類モデルである。 サンプルが10のカテゴリの1つに属する可能性を予測します。 テストの場合、modelAサービス要求のテストデータは
[[[[1.0]] * 28] * 28]
で表されます。サンプル要求:
HTTP リクエスト
サービスは、HTTP要求をポート8501でリッスンするように設定されています。 以下は、シングルモデルとマルチモデルの両方の展開のHTTPリクエストパスの概要です。
単一モデル
マルチモデル
パス形式:
<service_url>/v1/models/<model_name>:predict
ここで:
シナリオベースのデプロイの場合、<model_name> はモデルとして定義されます。
カスタムデプロイメントの場合、<model_name> は [実行するコマンド] で設定されたモデル名に対応します。 デフォルト値: model。
サービスは、指定されたモデルバージョンの有無にかかわらず要求に対応します。 それぞれのパス形式は次のとおりです。
バージョンのないリクエストの場合 (最新バージョンを自動的にロード):
<service_url>/v1/models/<model_name>: 予測
モデルバージョンを指定するリクエストの場合:
<service_url>/v1/models/<model_name>/versions/<version_num>: 予測
バージョンラベルが設定されている場合:
/v1/models/<モデル名>/labels/<バージョンラベル>: 予測
ここで、<model_name> は、モデルの構成ファイルに設定されている名前を指します。
<service_url> はサービスのエンドポイントです。 これを表示するには、[Elastic Algorithm Service (EAS)] ページに移動し、目的のサービスの [Service Type] 列の [Invocation Method] をクリックします。 [パブリックエンドポイント] タブでエンドポイントを表示します。 このURLは、オンラインデバッグにコンソールを使用するときに事前入力されます。
たとえば、modelAのシナリオベースの単一モデル展開のHTTPリクエストパスは、
<service_url>/v1/models/model:predict
です。以下は、コンソールとPythonコードを使用してサービスリクエストを送信する方法の例です。
コンソールの使用
サービスがデプロイされたら、[操作] 列の [オンラインデバッグ] を選択します。 <service_url> は、Request Parameter Online Tuningに含まれる。 パス
/v1/models/model:predict
をURLに追加し、Bodyにリクエストデータを入力します。{"signature_name": "serving_default", "instances": [[[[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]]]]}
パラメーターを設定したら、[リクエストの送信] をクリックします。 サンプルリターン:
Pythonコード
サンプルPythonコード:
from urllib import request import json # Please replace with your service endpoint and token. # You can view the token on the Public address call tab by clicking Call information in the Service method column of the inference service list. service_url = '<service_url>' token = '<test-token>' # For scenario-based single-model deployment, use model. For other cases, refer to the path description table above. model_name = "model" url = "{}/v1/models/{}:predict".format(service_url, model_name) # Create an HTTP request. req = request.Request(url, method="POST") req.add_header('authorization', token) data = { 'signature_name': 'serving_default', 'instances': [[[[1.0]] * 28] * 28] } # Send the request. response = request.urlopen(req, data=json.dumps(data).encode('utf-8')).read() # View the response. response = json.loads(response) print(response)
gRPCリクエスト
gRPCリクエストの場合、ポート8500を使用するようにサービスを構成し、必要な設定を追加します。 以下は、gRPCリクエストを送信するためのサンプルPythonコードです。
import grpc import tensorflow as tf from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_service_pb2_grpc from tensorflow.core.framework import tensor_shape_pb2 # The endpoint of the service. For more information, see the description of the host parameter below. host = "tf-serving-multi-grpc-test.166233998075****.cn-hangzhou.pai-eas.aliyuncs.com:80" # Replace <test-token> with the token of the service. You can view the token on the Public address call tab. token = "<test-token>" # The name of the model. For more information, see the description of the name parameter below. name = "<model_name>" signature_name = "serving_default" # Set the value to a model version that you want to use. You can specify only one model version in a request. version = "<version_num>" # Create a gRPC request. request = predict_pb2.PredictRequest() request.model_spec.name = name request.model_spec.signature_name = signature_name request.model_spec.version.value = version request.inputs["keras_tensor"].CopyFrom(tf.make_tensor_proto([[[[1.0]] * 28] * 28])) # Send the request. channel = grpc.insecure_channel(host) stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) metadata = (("authorization", token),) response, _ = stub.Predict.with_call(request, metadata=metadata) print(response)
次の表に、主パラメータの詳細を示します。
パラメーター
説明
ホスト
プレフィックスが
http://
で、サフィックスが:80
であるモデルサービスのエンドポイント。 エンドポイントを取得するには、次の手順を実行します。[Elastic Algorithm Service (EAS)] ページに移動し、モデルサービスを見つけて、[service Type] 列の [Invocation Method] をクリックします。 [パブリックエンドポイント] タブで、モデルサービスのエンドポイントを表示します。name
単一モデルのgRPCリクエストの場合:
シナリオベースの展開では、名前をモデルに設定します。
カスタム配置で、名前を [実行するコマンド] で指定されたモデル名に設定します。 設定されていない場合、デフォルトでmodelになります。
マルチモデルgRPCリクエストの場合:
モデル構成ファイルで概要を示したモデル名にnameを設定します。
バージョン
使用するモデルバージョン。 リクエストで指定できるモデルバージョンは1つだけです。
メタデータ
モデルサービスのトークン。 [パブリックエンドポイント] タブでトークンを表示できます。
関連ドキュメント
Triton Inference Serverイメージを使用してモデルサービスを展開する方法の詳細については、「Triton Inference Serverイメージを使用してモデルサービスを展開する」を参照してください。
カスタムイメージを作成して、EASにモデルサービスを展開できます。 詳細については、「カスタムイメージを使用したモデルサービスのデプロイ」をご参照ください。