SignatureDefs em SavedModel para TensorFlow Serving

Objetivo

Este documento fornece exemplos de uso pretendido de SignatureDefs no SavedModel que mapeiam para APIs do TensorFlow Serving.

Visão geral

Um SignatureDef define a assinatura de uma computação suportado num gráfico TensorFlow. SignatureDefs como objectivo proporcionar suporte genérico para identificar as entradas e saídas de uma função e pode ser especificado quando a construção de uma SavedModel .

Fundo

TF-exportador e SessionBundle usado assinaturas que são semelhantes em conceito, mas os usuários necessários para distinguir entre nomeados e padrão assinaturas para que eles sejam recuperados corretamente em cima de uma carga. Para aqueles que anteriormente utilizado TF-Exportador / SessionBundle, Signatures em TF-exportador será substituído por SignatureDefs em SavedModel.

Estrutura SignatureDef

A SignatureDef requer a especificação de:

  • inputs como um mapa de corda para TensorInfo.
  • outputs como um mapa de corda para TensorInfo.
  • method_name (o que corresponde a um nome de método suportado no carregamento ferramenta / sistema).

Note-se que TensorInfo si requer especificação do nome, dtipo e forma tensor. Embora as informações do tensor já estejam presentes no gráfico, é útil ter explicitamente o TensorInfo definido como parte do SignatureDef, uma vez que as ferramentas podem realizar a validação da assinatura, etc., sem ter que ler a definição do gráfico.

Para facilitar a reutilização e o compartilhamento entre ferramentas e sistemas, as constantes comumente usadas relacionadas a SignatureDefs que terão suporte no TensorFlow Serving são definidas como constantes. Especificamente:

Além disso, SavedModel fornece uma util para ajudar a construir uma assinatura-def.

Estruturas de amostra

O TensorFlow Serving fornece APIs de alto nível para realizar inferências. Para ativar essas APIs, os modelos devem incluir um ou mais SignatureDefs que definem os nós TensorFlow exatos a serem usados ​​para entrada e saída. Veja abaixo exemplos de SignatureDefs específicos que o TensorFlow Serving suporta para cada API.

Observe que o TensorFlow Serving depende das chaves de cada TensorInfo (nas entradas e saídas de SignatureDef), bem como do method_name de SignatureDef. O conteúdo real do TensorInfo é específico para seu gráfico.

Definição de Assinatura de Classificação

Classification SignatureDefs são compatíveis com chamadas estruturadas para a API Classification do TensorFlow Serving. Estas determinam que deve haver uma inputs Tensor, e que há dois tensores opcionais de saída: classes e scores , pelo menos, uma das quais devem estar presentes.

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

Predict SignatureDef

Predict SignatureDefs oferece suporte a chamadas para a API Predict do TensorFlow Serving. Essas assinaturas permitem que você ofereça suporte flexível de forma arbitrária a muitos tensores de entrada e saída. Para o exemplo abaixo, a assinatura my_prediction_signature tem um único Tensor de entrada lógico images que são mapeados para o Tensor real em seu gráfico x:0 .

Predict SignatureDefs permite portabilidade entre modelos. Isso significa que você pode trocar em diferentes SavedModels, possivelmente com diferentes nomes Tensor subjacente (por exemplo, em vez de x:0 talvez você tem um novo modelo alternativo com um Tensor z:0 ), enquanto que seus clientes podem ficar on-line consulta continuamente o velho eo novo versões deste modelo sem alterações do lado do cliente.

Predict SignatureDefs também permite adicionar tensores adicionais opcionais às saídas, que você pode consultar explicitamente. Vamos dizer que, além da chave de saída abaixo da scores , você também queria buscar uma camada pooling para depuração ou para outros fins. Nesse caso, você poderia simplesmente adicionar um Tensor adicional com uma chave como pool e valor apropriado.

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

Regressão AssinaturaDef

Regression SignatureDefs é compatível com chamadas estruturadas para a API Regression do TensorFlow Serving. Estas determinam que deve haver exatamente um inputs Tensor, e um 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"
  }
}