RSVP pour votre événement TensorFlow Everywhere local dès aujourd'hui!
Cette page a été traduite par l'API Cloud Translation.
Switch to English

SignatureDefs dans SavedModel pour le service TensorFlow

Objectif

Ce document fournit des exemples d'utilisation prévue de SignatureDef dans SavedModel qui correspondent aux API de TensorFlow Serving.

Aperçu

Un SignatureDef définit la signature d'un calcul pris en charge dans un graphe TensorFlow. SignatureDefs vise à fournir un support générique pour identifier les entrées et les sorties d'une fonction et peut être spécifié lors de la construction d'un SavedModel .

Contexte

TF-Exporter et SessionBundle ont utilisé des signatures dont le concept est similaire mais qui obligeait les utilisateurs à faire la distinction entre les signatures nommées et par défaut afin qu'elles soient récupérées correctement lors d'un chargement. Pour ceux qui utilisaient auparavant TF-Exporter / SessionBundle, les Signatures dans TF-Exporter seront remplacées par SignatureDefs dans SavedModel.

Structure de SignatureDef

Un SignatureDef nécessite la spécification de:

  • inputs sous forme de mappage de chaîne vers TensorInfo.
  • outputs comme une carte de chaîne vers TensorInfo.
  • method_name (qui correspond à un nom de méthode pris en charge dans l'outil / système de chargement).

Notez que TensorInfo lui-même nécessite la spécification du nom, du type et de la forme du tenseur. Bien que les informations de tenseur soient déjà présentes dans le graphique, il est utile de définir explicitement TensorInfo dans le cadre de SignatureDef car les outils peuvent alors effectuer la validation de signature, etc. sans avoir à lire la définition du graphique.

Pour faciliter la réutilisation et le partage entre les outils et les systèmes, les constantes couramment utilisées liées à SignatureDefs qui seront prises en charge dans TensorFlow Serving sont définies comme des constantes. Plus précisément:

De plus, SavedModel fournit un utilitaire pour aider à construire une signature-def.

Exemples de structures

TensorFlow Serving fournit des API de haut niveau pour effectuer des inférences. Pour activer ces API, les modèles doivent inclure un ou plusieurs SignatureDef qui définissent les nœuds TensorFlow exacts à utiliser pour l'entrée et la sortie. Voir ci-dessous pour des exemples des SignatureDef spécifiques pris en charge par TensorFlow Serving pour chaque API.

Notez que le service TensorFlow dépend des clés de chaque TensorInfo (dans les entrées et sorties de SignatureDef), ainsi que du nom_méthode de SignatureDef. Le contenu réel de TensorInfo est spécifique à votre graphique.

Signature de classificationDéf

Les signatures de classification prennent en charge les appels structurés à l'API de classification de TensorFlow Serving. Celles-ci prescrivent qu'il doit y avoir un Tensor d' inputs , et qu'il y a deux Tensors de sortie optionnels: des classes et des scores , dont au moins un doit être présent.

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

Prédire SignatureDef

Predict SignatureDefs prend en charge les appels à l'API Predict de TensorFlow Serving. Ces signatures vous permettent de prendre en charge de manière flexible de nombreux Tensors d'entrée et de sortie. Pour l'exemple ci-dessous, la signature my_prediction_signature a une seule entrée logique images Tensor qui sont mappées au Tensor réel dans votre graphique x:0 .

Predict SignatureDefs permet la portabilité entre les modèles. Cela signifie que vous pouvez échanger différents SavedModels, éventuellement avec différents noms de Tensor sous-jacents (par exemple, au lieu de x:0 vous avez peut-être un nouveau modèle alternatif avec un Tensor z:0 ), tandis que vos clients peuvent rester en ligne en interrogeant en permanence l'ancien et le nouveau versions de ce modèle sans modifications côté client.

Predict SignatureDefs vous permet également d'ajouter des tenseurs supplémentaires facultatifs aux sorties, que vous pouvez interroger explicitement. Disons qu'en plus de la clé de sortie ci-dessous des scores , vous vouliez également récupérer une couche de pooling à des fins de débogage ou à d'autres fins. Dans ce cas, vous ajouteriez simplement un Tensor supplémentaire avec une clé comme pool et une valeur appropriée.

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

Signature de régressionDef

Regression SignatureDefs prend en charge les appels structurés à l'API de régression de TensorFlow Serving. Celles-ci prescrivent qu'il doit y avoir exactement une inputs Tensor et une 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"
  }
}