Treten Sie der SIG TFX-Addons-Community bei und helfen Sie mit, TFX noch besser zu machen! SIG TFX-Addons beitreten

SignatureDefs in SavedModel für TensorFlow Serving

Zielsetzung

Dieses Dokument enthält Beispiele für die beabsichtigte Verwendung von SignatureDefs in SavedModel, die den APIs von TensorFlow Serving zugeordnet sind.

Überblick

Ein SignatureDef definiert die Signatur einer Berechnung, die in einem TensorFlow-Diagramm unterstützt wird. SignatureDefs bieten allgemeine Unterstützung für die Identifizierung von Ein- und Ausgängen einer Funktion und kann beim Erstellen eines SavedModel angegeben werden .

Hintergrund

TF-Exporter und SessionBundle verwendeten Signaturen, deren Konzept ähnlich ist, bei denen Benutzer jedoch zwischen benannten und Standardsignaturen unterscheiden müssen, damit sie beim Laden korrekt abgerufen werden können. Für diejenigen, die zuvor TF-Exporter / SessionBundle verwendet haben, werden Signatures in TF-Exporter durch SignatureDefs in SavedModel ersetzt.

SignatureDef-Struktur

Ein SignatureDef erfordert die Angabe von:

  • inputs als Zuordnung von Zeichenfolgen zu TensorInfo.
  • outputs als Zeichenfolgenzuordnung zu TensorInfo ausgegeben.
  • method_name (entspricht einem unterstützten Methodennamen im method_name / System).

Beachten Sie, dass TensorInfo selbst die Angabe von Name, Typ und Tensorform erfordert. Während Tensorinformationen bereits im Diagramm vorhanden sind, ist es hilfreich, TensorInfo explizit als Teil des SignatureDef zu definieren, da Tools dann die Signaturvalidierung usw. durchführen können, ohne die Diagrammdefinition lesen zu müssen.

Zur Erleichterung der Wiederverwendung und gemeinsamen Nutzung zwischen Tools und Systemen werden häufig verwendete Konstanten im Zusammenhang mit SignatureDefs, die in TensorFlow Serving unterstützt werden, als Konstanten definiert. Speziell:

Darüber hinaus bietet SavedModel ein Hilfsprogramm zum Erstellen einer Signatur-Def.

Beispielstrukturen

TensorFlow Serving bietet APIs auf hoher Ebene für die Durchführung von Inferenzen. Um diese APIs zu aktivieren, müssen Modelle ein oder mehrere SignatureDefs enthalten, die die genauen TensorFlow-Knoten definieren, die für die Eingabe und Ausgabe verwendet werden sollen. Im Folgenden finden Sie Beispiele für die spezifischen SignatureDefs, die TensorFlow Serving für jede API unterstützt.

Beachten Sie, dass TensorFlow Serving von den Schlüsseln der einzelnen TensorInfo (in den Ein- und Ausgängen des SignatureDef) sowie vom Methodennamen des SignatureDef abhängt. Der tatsächliche Inhalt von TensorInfo ist spezifisch für Ihr Diagramm.

Klassifizierung SignatureDef

Klassifizierung SignatureDefs unterstützt strukturierte Aufrufe der Klassifizierungs-API von TensorFlow Serving. Diese schreiben vor, dass es einen inputs geben muss und dass es zwei optionale Ausgangstensoren gibt: classes und scores , von denen mindestens einer vorhanden sein muss.

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

SignatureDef vorhersagen

Predict SignatureDefs unterstützt Aufrufe der Predict API von TensorFlow Serving. Mit diesen Signaturen können Sie beliebig viele Eingabe- und Ausgabe-Tensoren flexibel unterstützen. Im folgenden Beispiel verfügt die Signatur my_prediction_signature über eine einzige logische Eingabe Tensor- images , die dem tatsächlichen Tensor in Ihrem Diagramm x:0 .

Predict SignatureDefs ermöglichen die Portabilität zwischen Modellen. Dies bedeutet, dass Sie verschiedene SavedModels austauschen können, möglicherweise mit unterschiedlichen zugrunde liegenden Tensornamen (z. B. anstelle von x:0 möglicherweise haben Sie ein neues alternatives Modell mit einem Tensor z:0 ), während Ihre Kunden ständig online bleiben und alte und neue abfragen können Versionen dieses Modells ohne clientseitige Änderungen.

Mit Predict SignatureDefs können Sie den Ausgaben auch optionale zusätzliche Tensoren hinzufügen, die Sie explizit abfragen können. scores , Sie möchten zusätzlich zum Ausgabeschlüssel unter den scores auch eine Poolebene zum Debuggen oder für andere Zwecke abrufen. In diesem Fall würden Sie einfach einen zusätzlichen Tensor mit einem Schlüssel wie pool und einem entsprechenden Wert hinzufügen.

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

RegressionssignaturDef

Regression SignatureDefs unterstützen strukturierte Aufrufe der Regressions-API von TensorFlow Serving. Diese schreiben vor, dass es genau einen inputs und einen outputs geben muss.

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