TensorFlow Serving 中 SavedModel 的 SignatureDefs

目標

本文件提供範例,說明 SignatureDefs 在 SavedModel 中的預期用途,其會對應至 TensorFlow Serving 的 API。

總覽

SignatureDef 定義 TensorFlow 圖形中支援的運算簽名。SignatureDefs 旨在提供通用支援,以識別函式的輸入和輸出,並可在建構 SavedModel 時指定。

背景

TF-Exporter 和 SessionBundle 使用的 Signatures 在概念上相似,但需要使用者區分具名簽名和預設簽名,以便在載入時正確擷取這些簽名。對於先前使用 TF-Exporter/SessionBundle 的使用者而言,TF-Exporter 中的 Signatures 將由 SavedModel 中的 SignatureDefs 取代。

SignatureDef 結構

SignatureDef 需要指定

  • inputs 輸入,以字串對應至 TensorInfo 的地圖表示。
  • outputs 輸出,以字串對應至 TensorInfo 的地圖表示。
  • method_name (對應至載入工具/系統中支援的方法名稱)。

請注意,TensorInfo 本身需要指定名稱、dtype 和張量形狀。雖然張量資訊已存在於圖形中,但明確將 TensorInfo 定義為 SignatureDef 的一部分仍很有用,因為這樣一來,工具就能執行簽名驗證等作業,而不必讀取圖形定義。

為了方便跨工具和系統重複使用及共用,與 TensorFlow Serving 中將支援的 SignatureDefs 相關的常用常數會定義為常數。具體而言

此外,SavedModel 也提供公用程式,以協助建構 signature-def。

範例結構

TensorFlow Serving 提供高階 API 以執行推論。為了啟用這些 API,模型必須包含一或多個 SignatureDefs,以定義用於輸入和輸出的確切 TensorFlow 節點。請參閱下方範例,瞭解 TensorFlow Serving 針對每個 API 支援的特定 SignatureDefs。

請注意,TensorFlow Serving 取決於每個 TensorInfo 的鍵 (在 SignatureDef 的輸入和輸出中),以及 SignatureDef 的 method_name。TensorInfo 的實際內容會因您的圖形而異。

分類 SignatureDef

分類 SignatureDefs 支援對 TensorFlow Serving 分類 API 的結構化呼叫。這些規範規定必須有 inputs Tensor,且有兩個選用的輸出 Tensor:classesscores,且至少必須存在其中一個。

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

預測 SignatureDefs 支援對 TensorFlow Serving 預測 API 的呼叫。這些簽名可讓您彈性支援任意數量的輸入和輸出 Tensor。以下範例中,簽名 my_prediction_signature 具有單一邏輯輸入 Tensor images,其會對應至圖形 x:0 中的實際 Tensor。

預測 SignatureDefs 能夠跨模型移植。這表示您可以換入不同的 SavedModel,這些模型可能具有不同的基礎 Tensor 名稱 (例如,您可能有一個新的替代模型,其中 Tensor 為 z:0,而非 x:0),而您的用戶端可以保持連線狀態,持續查詢此模型的舊版和新版,而無需進行用戶端變更。

預測 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

迴歸 SignatureDefs 支援對 TensorFlow Serving 迴歸 API 的結構化呼叫。這些規範規定必須正好有一個 inputs Tensor 和一個 outputs Tensor。

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