ヘルプKaggleにTensorFlowグレートバリアリーフを保護チャレンジに参加

TensorFlowサービング用のSavedModelのSignatureDefs

目的

このドキュメントでは、TensorFlowServingのAPIにマッピングされるSavedModelでのSignatureDefの使用目的の例を示します。

概要概要

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

バックグラウンド

TF-輸出業者SessionBundleを使用署名それらを負荷に正確に取得するために名前が付けられ、デフォルトの署名を区別するためにコンセプトが似ているが、必要なユーザーを。以前TF-輸出/ SessionBundleを使用人のために、 Signatures TF-輸出では置き換えられますSignatureDefs SavedModelに。

SignatureDef構造

SignatureDefには、以下の指定が必要です。

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

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

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

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

サンプル構造

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

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

分類SignatureDef

分類SignatureDefsは、TensorFlowServingのClassificationAPIへの構造化された呼び出しをサポートします。これらは、 inputsテンソルが必要であり、2つのオプションの出力テンソルが存在することを規定しています。 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"
  }
}

SignatureDefを予測する

Predict SignatureDefsは、TensorFlowServingのPredictAPIへの呼び出しをサポートします。これらの署名により、任意の数の入力および出力テンソルを柔軟にサポートできます。以下の例では、署名my_prediction_signatureは、グラフx:0実際のテンソルにマップされる単一の論理入力テンソルimagesがあります。

Predict SignatureDefsは、モデル間の移植性を可能にします。これは、クライアントが古いものと新しいものを継続的にクエリしながら、異なるSavedModelsを、おそらく異なる基になるTensor名で交換できることを意味します(たとえば、 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"
  }
}

回帰SignatureDef

Regression SignatureDefsは、TensorFlowServingのRegressionAPIへの構造化された呼び出しをサポートします。これらは、 inputsテンソルが1つ、 outputsテンソルが1つでなければならないことを規定していoutputs

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"
  }
}