Objetivo
Este documento proporciona ejemplos del uso previsto de SignatureDefs en SavedModel que se asignan a las API de TensorFlow Serving.
Descripción general
Un SignatureDef define la firma de un cálculo admitido en un gráfico de TensorFlow. SignatureDefs tiene como objetivo proporcionar soporte genérico para identificar entradas y salidas de una función y se puede especificar al crear un SavedModel .
Fondo
TF-Exporter y SessionBundle utilizaron firmas que son similares en concepto pero requerían que los usuarios distinguieran entre firmas con nombre y firmas predeterminadas para que se recuperaran correctamente durante una carga. Para aquellos que usaron anteriormente TF-Exporter/SessionBundle, Signatures
en TF-Exporter serán reemplazadas por SignatureDefs
en SavedModel.
Estructura SignatureDef
Un SignatureDef requiere la especificación de:
-
inputs
como un mapa de cadena para TensorInfo. -
outputs
como un mapa de cadena a TensorInfo. -
method_name
(que corresponde a un nombre de método admitido en la herramienta/sistema de carga).
Tenga en cuenta que el propio TensorInfo requiere la especificación del nombre, tipo d y forma del tensor. Si bien la información del tensor ya está presente en el gráfico, es útil tener TensorInfo definido explícitamente 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 intercambio 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, SavedModel proporciona una utilidad para ayudar a crear una definición de firma.
Estructuras de muestra
TensorFlow Serving proporciona API de alto nivel para realizar inferencias. Para habilitar estas API, los modelos deben incluir uno o más SignatureDefs que definan los nodos exactos de TensorFlow que se usarán para entrada y salida. Consulte a continuación ejemplos de SignatureDefs específicos 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.
Clasificación FirmaDef
Classification SignatureDefs admite llamadas estructuradas a la API de clasificación de TensorFlow Serving. Estos prescriben que debe haber un tensor inputs
y que hay dos tensores de salida opcionales: 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 muchos tensores de entrada y salida de forma arbitraria. Para el siguiente ejemplo, la firma my_prediction_signature
tiene una única entrada lógica images
de tensor que se asignan al tensor real en su gráfico x:0
.
Predict SignatureDefs permite la portabilidad entre modelos. Esto significa que puede intercambiar diferentes SavedModels, posiblemente con diferentes nombres de tensores subyacentes (por ejemplo, en lugar de x:0
tal vez tenga un nuevo modelo alternativo con un Tensor z:0
), mientras sus clientes pueden permanecer en línea consultando continuamente el antiguo y el nuevo. versiones de este modelo sin cambios del 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 debajo de scores
, también desea obtener una capa de agrupación para depuración u otros fines. En ese caso, simplemente agregaría un tensor adicional con una clave 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ónDef
Regression SignatureDefs admite llamadas estructuradas a la API de regresión de TensorFlow Serving. Estos prescriben que debe haber exactamente un Tensor inputs
y otro Tensor 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"
}
}