目標
本文件提供範例,說明 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:classes
和 scores
,且至少必須存在其中一個。
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"
}
}