SignatureDefs en SavedModel para la publicación de TensorFlow

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.

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