KServe 互換 RESTful API

はじめに

gRPC APIs API に加えて、OpenVINO™ モデルサーバーは KServe REST API のドキュメントにある RESTful API もサポートします。REST API は、クライアント側の Python 依存関係の数を減らし、アプリケーション・コードを簡素化することを目的とする場合にお勧めします。

このドキュメントでは、次の API について説明します。

サーバーライブ API

説明

サーバーの稼働状況に関する情報を取得します。

URL

GET http://${REST_URL}:${REST_PORT}/v2/health/live

応答形式

サーバーの稼働状況に関する情報は、応答ステータスコードで提供されます。サーバーが稼働している場合、ステータスコードは 200 です。それ以外は 4xx です。応答の本文にはコンテンツがありません。

使用例

$ curl -i http://localhost:5000/v2/health/live

HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 09 Aug 2022 09:20:24 GMT
Content-Length: 2

HTTP サーバーライブのエンドポイント上の KServe API を使用してサーバーの稼働状態を取得するサンプルコードも参照してください。

サーバーレディー API

説明

サーバーの準備状況に関する情報を取得します。

URL

GET http://${REST_URL}:${REST_PORT}/v2/health/ready

応答形式

サーバーの準備状況に関する情報は、応答ステータスコードで提供されます。サーバーの準備ができている場合、ステータスコードは 200 です。それ以外は 4xx です。応答の本文にはコンテンツがありません。

使用例

$ curl -i http://localhost:5000/v2/health/ready

HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 09 Aug 2022 09:22:14 GMT
Content-Length: 2

HTTP サーバーレディーのエンドポイントで KServe API を使用してサーバーの準備を整えるサンプルコードも参照してください。

サーバーメタデータ API

説明

サーバーの情報を取得します。

URL

GET http://${REST_URL}:${REST_PORT}/v2

応答形式

成功した場合:

{
  "name" : $string,
  "version" : $string,
  "extensions" : [ $string, ... ]
}

失敗した場合:

{
  "error": $string
}

使用例

$ curl http://localhost:5000/v2
{"name":"OpenVINO Model Server","version":"2022.2.0.fd742507"}

応答内容の詳細については、KServe API ドキュメントを参照してください。

HTTP サーバーメタデータのエンドポイントで KServe API を使用してサーバーのメタデータを取得するサンプルコードも参照してください。

モデルレディー API

説明

モデルの準備状況に関する情報を取得します。

URL

GET http://${REST_URL}:${REST_PORT}/v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/ready

応答形式

モデルの準備状況に関する情報は、応答ステータスコードで提供されます。モデルが推論の準備ができている場合、ステータスコードは 200 です。それ以外は 4xx です。応答の本文にはコンテンツがありません。

使用例

$ curl -i http://localhost:5000/v2/models/resnet/ready

HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 09 Aug 2022 09:25:31 GMT
Content-Length: 2

HTTP モデルレディーのエンドポイントで KServe API を使用してモデルの準備を整えるサンプルコードも参照してください。

モデルメタデータ API

説明

特定のモデルの情報を取得します。

URL

GET http://${REST_URL}:${REST_PORT}/v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]

注: : ${MODEL_VERSION} のインクルードはオプションです。省略した場合、最新バージョンのモデルメタデータが返されます。???

応答形式

成功した場合:

{
  "name" : $string,
  "versions" : [ $string, ... ] #optional,
  "platform" : $string,
  "inputs" : [ $metadata_tensor, ... ],
  "outputs" : [ $metadata_tensor, ... ]
}

説明:

$metadata_tensor =
{
  "name" : $string,
  "datatype" : $string,
  "shape" : [ $number, ... ]
}

失敗した場合:

{
  "error": $string
}

使用例

$ curl http://localhost:8000/v2/models/resnet
{"name":"resnet","versions":["1"],"platform":"OpenVINO","inputs":[{"name":"0","datatype":"FP32","shape":[1,224,224,3]}],"outputs":[{"name":"1463","datatype":"FP32","shape":[1,1000]}]}

応答内容の詳細については、KServe API ドキュメントを参照してください。

HTTP モデルメタデータのエンドポイントで KServe API を使用してモデルメタデータを取得をするサンプルコードも参照してください。

推論 API

説明

読み込まれたモデルまたは DAG を使用して推論を実行するエンドポイントです。

URL

POST http://${REST_URL}:${REST_PORT}/v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/infer

要求本体の形式

{
  "id" : $string #optional,
  "parameters" : $parameters #optional,
  "inputs" : [ $request_input, ... ],
  "outputs" : [ $request_output, ... ] #optional
}

説明:

$request_input =
{
  "name" : $string,
  "shape" : [ $number, ... ],
  "datatype"  : $string,
  "parameters" : $parameters #optional,
  "data" : $tensor_data
}

$request_output =
{
  "name" : $string,
  "parameters" : $parameters #optional,
}

注: tensor_data の要素は多次元表現、または平坦化された 1 次元表現として表現できます。推論実行前に tensor データがフラット化され、tensor_data 内の要素数のみが検証されます。

数値のほかに、バイナリーデータ拡張子を使用してエンコードされた画像を渡すことができます。

JPEG/PNG でエンコードされた画像 - この場合、バイナリーエンコードされたデータは OpenCV を使用して OVMS によってロードされ、推論のため OpenVINO に適したデータ形式に変換されます。データタイプが BYTES で、モデルまたはパイプラインの形状次元が 4 (demultiplexing の場合は 5) である場合、入力はエンコードされたイメージとして扱われます。すべてのバッチの BYTES 入力の前に、そのサイズを含む 4 バイト (リトル・エンディアン) を付ける必要があります。

Content-Type: application/octet-stream
Inference-Header-Content-Length: <xx>
Content-Length: <xx+9472>
{
"model_name" : "my_model",
"inputs" : [
   {
      "name" : "model_input",
      "shape" : [ 1 ],
      "datatype" : "BYTES"
   }
]
}
<0x00250000 (9472 as four bytes little endian)><9472 bytes of data for model_input tensor>

生データ - OVMS によって前処理されないことを意味します。バイナリーデータ拡張機能を使用して生データを送信するには、BYTES 以外のデータタイプを使用します。

Content-Type: application/octet-stream
Inference-Header-Content-Length: <xx>
Content-Length: <xx+(3 x 1080000)>
{
"model_name" : "my_model",
"inputs" : [
   {
      "name" : "model_input",
      "shape" : [ 3, 300, 300, 3 ],
      "datatype" : "FP32"
   },

]
}
<3240000 bytes of the whole data batch for model_input tensor>

*バイナリー拡張内で文字列を送信するには、各バッチをそのサイズを含む 4 バイト (リトル・エンディアン) で先行させる必要があります。

詳細については、OpenVINO モデルサーバーでバイナリーデータがどのように処理されるかを確認してください。

応答形式

成功した場合:

{
  "model_name" : $string,
  "model_version" : $string #optional,
  "id" : $string,
  "parameters" : $parameters #optional,
  "outputs" : [ $response_output, ... ]
}

説明:

$response_output =
{
  "name" : $string,
  "shape" : [ $number, ... ],
  "datatype"  : $string,
  "parameters" : $parameters #optional,
  "data" : $tensor_data
}

失敗した場合:

{
  "error": <error message string>
}

応答の出力は、バイナリーデータ拡張機能を使用してバイナリー形式で送信できます。出力を強制的にバイナリー形式で送信するには、要求 JSON で “binary_data” : true パラメーターを使用する必要があります。
例:

{
  "model_name" : "mymodel",
  "inputs" : [...],
  "outputs" : [
    {
      "name" : "output0",
      "parameters" : {
        "binary_data" : true
      }
    }
  ]
}

出力データタイプが FP32 で、形状が [ 2, 2 ] であると仮定すると、この要求に対する応答は次のようになります。

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Inference-Header-Content-Length: <yy>
Content-Length: <yy+16>
{
  "outputs" : [
    {
      "name" : "output0",
      "shape" : [ 2, 2 ],
      "datatype"  : "FP32",
      "parameters" : {
        "binary_data_size" : 16
      }
    }
  ]
}
<16 bytes of data for output0 tensor>

要求と応答の内容の詳細については、KServe API ドキュメントを参照してください。

注: REST 経由で推論を実行する効率的な方法は、バイナリーデータ拡張機能を使用して、JSON オブジェクトの外部にバイナリー形式でデータを送信することです。

注: 要求 URI の最後に //.. を使用すると、パスが切り詰められ、予想とは異なる応答が返される可能性があります。

HTTP 推論エンドポイントで KServe API を使用して推論を実行するサンプルコードも参照してください。