TensorFlowサービング用のSavedModelのSignatureDefs

客観的

このドキュメントでは、TensorFlow Serving の API にマップする SavedModel での SignatureDefs の使用目的の例を示します。

概要

SignatureDef は、 TensorFlow グラフでサポートされる計算の署名を定義します。 SignatureDefs は、関数の入力と出力を識別するための汎用サポートを提供することを目的としており、 SavedModel を構築するときに指定できます。

背景

TF-ExporterSessionBundleは概念上は似た署名を使用していましたが、ロード時に正しく取得できるように、ユーザーは名前付き署名とデフォルト署名を区別する必要がありました。以前に TF-Exporter/SessionBundle を使用していた場合、TF-Exporter のSignatures SavedModel のSignatureDefsに置き換えられます。

SignatureDef 構造体

SignatureDef には次の指定が必要です。

  • TensorInfo への文字列のマップとしてinputs
  • TensorInfo への文字列のマップとしてoutputs
  • method_name (ロード ツール/システムでサポートされているメソッド名に対応します)。

TensorInfo自体には名前、dtype、テンソル形状の指定が必要であることに注意してください。テンソル情報はグラフ内にすでに存在していますが、ツールがグラフ定義を読み取ることなく署名検証などを実行できるため、SignatureDef の一部として TensorInfo を明示的に定義すると便利です。

ツールやシステム間での再利用と共有を容易にするために、TensorFlow Serving でサポートされる SignatureDefs に関連して一般的に使用される定数は定数として定義されます。具体的には:

さらに、SavedModel は、signature-def の構築に役立つユーティリティを提供します。

サンプル構造

TensorFlow Serving は、推論を実行するための高レベルの API を提供します。これらの API を有効にするには、入力と出力に使用する正確な TensorFlow ノードを定義する 1 つ以上の SignatureDef をモデルに含める必要があります。 TensorFlow Serving が各 API に対してサポートする特定の SignatureDef の例については、以下を参照してください。

TensorFlow Serving は、各 TensorInfo (SignatureDef の入力および出力内) のキーと、SignatureDef のメソッド名に依存することに注意してください。 TensorInfo の実際の内容はグラフに固有です。

分類署名定義

分類 SignatureDef は、TensorFlow Serving の分類 API への構造化呼び出しをサポートします。これらは、 inputs Tensor が存在する必要があること、および 2 つのオプションの出力 Tensor、 classesscoresが存在し、そのうちの少なくとも 1 つが存在する必要があることを規定しています。

signature_def: {
  key  : "my_classification_signature"
  value: {
    inputs: {
      key  : "inputs"
      value: {
        name: "tf_example:0"
        dtype: DT_STRING
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "classes"
      value: {
        name: "index_to_string:0"
        dtype: DT_STRING
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "scores"
      value: {
        name: "TopKV2:0"
        dtype: DT_FLOAT
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/classify"
  }
}

署名定義を予測する

Predict SignatureDefs は、TensorFlow Serving の Predict API への呼び出しをサポートします。これらのシグネチャを使用すると、任意の数の入力テンソルと出力テンソルを柔軟にサポートできます。以下の例では、署名my_prediction_signatureには、グラフx:0内の実際の Tensor にマッピングされる単一の論理入力 Tensor imagesがあります。

Predict SignatureDefs により、モデル間での移植性が可能になります。これは、クライアントがオンラインに留まり、古いものと新しいものを継続的にクエリしている間、おそらく異なる基礎となる Tensor 名を持つ異なる SavedModel を交換できることを意味します (たとえば、 x:0の代わりに Tensor z:0を持つ新しい代替モデルがあるかもしれません)。クライアント側の変更を行わないこのモデルのバージョン。

Predict SignatureDefs を使用すると、明示的にクエリできるオプションの追加 Tensor を出力に追加することもできます。以下のscoresの出力キーに加えて、デバッグまたはその他の目的でプーリング層もフェッチしたいとします。その場合は、 poolなどのキーと適切な値を持つ追加の Tensor を追加するだけです。

signature_def: {
  key  : "my_prediction_signature"
  value: {
    inputs: {
      key  : "images"
      value: {
        name: "x:0"
        dtype: ...
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "scores"
      value: {
        name: "y:0"
        dtype: ...
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/predict"
  }
}

回帰署名定義

Regression SignatureDefs は、TensorFlow Serving の Regression API への構造化呼び出しをサポートします。これらは、 inputs Tensor が 1 つとoutputs Tensor が 1 つだけ存在する必要があることを規定しています。

signature_def: {
  key  : "my_regression_signature"
  value: {
    inputs: {
      key  : "inputs"
      value: {
        name: "x_input_examples_tensor_0"
        dtype: ...
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "outputs"
      value: {
        name: "y_outputs_0"
        dtype: DT_FLOAT
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/regress"
  }
}