Rejoignez-nous au DevFest pour l'Ukraine les 14 et 15 juin En ligne Inscrivez-vous maintenant

SignatureDefs dans SavedModel pour TensorFlow Serving

Objectif

Ce document fournit des exemples d'utilisation prévue de SignatureDefs 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 graphique tensorflow. SignatureDefs visent à fournir un soutien générique afin d' identifier des entrées et sorties d'une fonction et peut être spécifié lors de la construction d' un SavedModel .

Fond

TF-exportateur et SessionBundle utilisés signatures qui sont similaires dans leur concept , mais les utilisateurs doivent opérer une distinction entre les signatures nommées et par défaut afin qu'ils soient récupérés correctement sur une charge. Pour ceux qui ont déjà utilisé TF-exportateur / SessionBundle, Signatures dans TF-exportateur sera remplacé par SignatureDefs en SavedModel.

Structure SignatureDef

Un SignatureDef nécessite la spécification de :

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

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

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

En outre, SavedModel fournit une util pour aider à construire une signature définition.

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 SignatureDefs qui définissent les nœuds TensorFlow exacts à utiliser pour l'entrée et la sortie. Consultez ci-dessous des exemples de SignatureDefs spécifiques pris en charge par TensorFlow Serving pour chaque API.

Notez que TensorFlow Serving 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.

Classification SignatureDef

Classification SignatureDefs prend en charge les appels structurés à l'API de classification de TensorFlow Serving. Ceux - ci prescrivent qu'il doit y avoir une inputs Tensor, et qu'il y a deux tenseurs de sortie en option: les classes et les scores , 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 Tensor images qui sont mis en correspondance avec Tensor réelle dans votre graphique x:0 .

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

Predict SignatureDefs vous permet également d'ajouter des Tensors supplémentaires facultatifs aux sorties, que vous pouvez explicitement interroger. Disons que , en plus de la clé de sortie en dessous des scores , vous vouliez aussi chercher une couche de mise en commun pour le débogage ou d' autres fins. Dans ce cas, vous ajoutez simplement un Tensor supplémentaire avec une clé comme la pool et la 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"
  }
}

Régression SignatureDef

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