TensorFlow Serving API を介したバイナリー入力の予測¶
GRPC¶
TensorFlow Serving API を使用すると、モデル入力データを TensorProto オブジェクト内のさまざまな形式で送信できます。配列データは、入力データバッファーを示す tensor_content
フィールド内で渡されます。
string_val
フィールド内のデータが 4 (demultiplexing の場合は 5) つの形状次元を持つモデル、またはパイプラインに送信されると、そのような入力はバイナリーエンコードされたイメージとして解釈されます。
モデルのメタデータは NHWC レイアウトの入力形状をレポートしますが、バイナリーデータは形状: [N]、データタイプ: DT_STRING で送信する必要があることに注意してください。ここで、N は文字列バイトに変換された画像数を表します。
配列形式でデータを送信する場合、すべてのバイトは tensor_content
フィールドで同じシーケンスにあり、サーバー側にロードされると、形状によってそれらを解釈する方法に関する情報が得られます。バイナリーエンコードされたデータの場合、バッチ内の各画像のバイトが string_val
フィールドの別個のシーケンスに配置されます。tensor_shape
フィールドで与えられる唯一の情報は、バッチ内のイメージの量です。サーバー側では、string_val
フィールドの各要素のバイトがロードされ、モデルの入力形状に一致するようにサイズ変更されて、OpenCV によって OpenVINO に適した配列形式に変換されます。
HTTP¶
TensorFlow Serving API を使用すると、エンコードされた画像を HTTP インターフェイス経由で 4 (demultiplexing の場合は 5) つの形状次元を持つモデルまたはパイプラインに送信することもできます。バイナリーデータは Base64 でエンコードされ、次の形式のマップとして inputs
または instances
フィールドに入力される必要があります。
<input_name>: {"b64":<Base64 encoded data>}
サーバー側では、Base64 でエンコードされたデータが生のバイナリーにデコードされ、OpenCV を使用してロードされ、推論用に OpenVINO に適したデータ形式に変換されます。
推奨¶
データをバイナリー形式で送信すると、クライアント・コードと前処理の負荷が大幅に軽減されます。REST API クライアントでは、curl および Base64 ツール、または要求 Python パッケージのみが必要です。元の入力データが jpeg または png でエンコードされている場合、要求を送信するため前処理は必要ありません。
バイナリーデータにより、ネットワーク使用率が大幅に軽減される可能性があります。多くの場合、これにより、レイテンシーが短縮され、ネットワーク帯域幅が低い場合でも非常に高いスループットを達成できます。