Objetivo
Este documento proporciona ejemplos del uso previsto de SignatureDefs en SavedModel que se asignan a las API de TensorFlow Serving.
Descripción general
A SignatureDef define la firma de un cálculo apoyado en un gráfico TensorFlow. SignatureDefs tienen como objetivo proporcionar apoyo genérico para identificar las entradas y salidas de una función y se puede especificar cuando se construye un SavedModel .
Fondo
TF-exportador y SessionBundle utilizan firmas que son similares en concepto, pero los usuarios necesarios para distinguir entre las firmas con nombre y predeterminadas con el fin de que puedan ser recuperados correctamente sobre una carga. Para aquellos que previamente utilizado TF-exportador / SessionBundle, Signatures
en TF-exportador será reemplazado por SignatureDefs
en SavedModel.
Estructura SignatureDef
Una SignatureDef requiere la especificación de:
-
inputs
como un mapa de cadena a TensorInfo. -
outputs
como un mapa de cadena a TensorInfo. -
method_name
(que corresponde a un nombre de método soportado en la herramienta / sistema de carga).
Tenga en cuenta que TensorInfo sí requiere la especificación del nombre, dtype y la forma del tensor. Si bien la información del tensor ya está presente en el gráfico, es útil tener explícitamente TensorInfo definido como parte de SignatureDef, ya que las herramientas pueden realizar la validación de firmas, etc. sin tener que leer la definición del gráfico.
Constantes y utilidades relacionadas
Para facilitar la reutilización y el uso compartido entre herramientas y sistemas, las constantes de uso común relacionadas con SignatureDefs que serán compatibles con TensorFlow Serving se definen como constantes. Específicamente:
Además, proporciona una SavedModel util para ayudar a construir una firma definición.
Estructuras de muestra
TensorFlow Serving proporciona API de alto nivel para realizar inferencias. Para habilitar estas API, los modelos deben incluir una o más SignatureDefs que definan los nodos de TensorFlow exactos que se usarán para la entrada y la salida. Consulte a continuación para ver ejemplos de SignatureDefs específicas que TensorFlow Serving admite para cada API.
Tenga en cuenta que TensorFlow Serving depende de las claves de cada TensorInfo (en las entradas y salidas de SignatureDef), así como del nombre_método de SignatureDef. El contenido real de TensorInfo es específico de su gráfico.
Firma de clasificación Def
Classification SignatureDefs admite llamadas estructuradas a la API de clasificación de TensorFlow Serving. Estos prescriben que debe haber un inputs
Tensor, y que hay dos tensores opcionales de salida: classes
y scores
, al menos uno de los cuales debe estar presente.
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"
}
}
Predecir SignatureDef
Predict SignatureDefs admite llamadas a la API Predict de TensorFlow Serving. Estas firmas le permiten admitir de manera flexible y arbitraria muchos tensores de entrada y salida. Para el siguiente ejemplo, la firma my_prediction_signature
tiene una sola entrada lógica Tensor images
que se asignan al tensor real en su gráfico de x:0
.
Predict SignatureDefs permite la portabilidad entre modelos. Esto significa que se puede intercambiar en diferentes SavedModels, posiblemente con diferentes nombres Tensor subyacente (por ejemplo, en lugar de x:0
Tal vez usted tiene un nuevo modelo alternativo con un tensor z:0
), mientras que sus clientes pueden permanecer en línea consultar continuamente el viejo y nuevo versiones de este modelo sin cambios en el lado del cliente.
Predict SignatureDefs también le permite agregar tensores adicionales opcionales a las salidas, que puede consultar explícitamente. Digamos que, además de la clave de salida por debajo de scores
, que también quería a buscar una capa de puesta en común para la depuración o para otros fines. En ese caso, sólo tendría que añadir un tensor adicional con una llave como pool
y el valor apropiado.
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"
}
}
Firma de regresión Def
Regression SignatureDefs admite llamadas estructuradas a la API de regresión de TensorFlow Serving. Estos prescribe que debe haber exactamente una inputs
de tensor, y uno outputs
de 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"
}
}