Cel
Ten dokument zawiera przykłady zamierzonego użycia SignatureDefs w SavedModel, które są mapowane na interfejsy API TensorFlow Serving.
Przegląd
SignatureDef definiuje podpis obliczeń obsługiwanych na wykresie TensorFlow. Celem SignatureDefs jest zapewnienie ogólnej obsługi identyfikacji danych wejściowych i wyjściowych funkcji i można je określić podczas budowania SavedModel .
Tło
TF-Exporter i SessionBundle używały podpisów , które mają podobną koncepcję, ale wymagały od użytkowników rozróżnienia między podpisami nazwanymi i domyślnymi, aby mogły zostać poprawnie pobrane po załadowaniu. Dla tych, którzy wcześniej korzystali z TF-Exporter/SessionBundle, Signatures
w TF-Exporter zostaną zastąpione przez SignatureDefs
w SavedModel.
Struktura SignatureDef
SignatureDef wymaga specyfikacji:
-
inputs
jako mapa ciągu do TensorInfo. -
outputs
jako mapę ciągu do TensorInfo. -
method_name
(która odpowiada nazwie metody obsługiwanej w narzędziu/systemie ładującym).
Należy pamiętać, że sam TensorInfo wymaga podania nazwy, typu i kształtu tensora. Chociaż informacje o tensorze są już obecne na wykresie, przydatne jest jawne zdefiniowanie TensorInfo jako części SignatureDef, ponieważ narzędzia mogą następnie sprawdzać poprawność podpisu itp. bez konieczności czytania definicji wykresu.
Powiązane stałe i narzędzia
Aby ułatwić ponowne użycie i udostępnianie między narzędziami i systemami, powszechnie używane stałe związane z SignatureDefs, które będą obsługiwane w obsłudze TensorFlow, są zdefiniowane jako stałe. Swoiście:
Ponadto SavedModel udostępnia narzędzie pomagające w tworzeniu definicji podpisu.
Przykładowe konstrukcje
TensorFlow Serving zapewnia interfejsy API wysokiego poziomu do wykonywania wnioskowań. Aby włączyć te interfejsy API, modele muszą zawierać jeden lub więcej SignatureDefs, które definiują dokładne węzły TensorFlow do użycia na potrzeby danych wejściowych i wyjściowych. Poniżej znajdują się przykłady konkretnych SignatureDefs obsługiwanych przez TensorFlow Serving dla każdego interfejsu API.
Należy pamiętać, że udostępnianie TensorFlow zależy od kluczy każdego TensorInfo (na wejściach i wyjściach SignatureDef), a także od nazwy metody SignatureDef. Rzeczywista zawartość TensorInfo jest specyficzna dla Twojego wykresu.
Klasyfikacja PodpisDef
Klasyfikacja SignatureDefs obsługuje wywołania strukturalne do interfejsu API klasyfikacji TensorFlow Serving. Przepisują one, że musi istnieć tensor inputs
i że istnieją dwa opcjonalne tensory wyjściowe: classes
i scores
, z których co najmniej jeden musi być obecny.
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"
}
}
Przewiduj podpisDef
Funkcja Predict SignatureDefs obsługuje wywołania interfejsu Predict API TensorFlow Serving. Sygnatury te umożliwiają elastyczną obsługę dowolnej liczby tensorów wejściowych i wyjściowych. W poniższym przykładzie podpis my_prediction_signature
ma pojedyncze logiczne wejściowe images
Tensora, które są mapowane na rzeczywisty Tensor na wykresie x:0
.
Predict SignatureDefs umożliwiają przenośność między modelami. Oznacza to, że możesz zamieniać różne SavedModels, prawdopodobnie z różnymi podstawowymi nazwami Tensora (np. zamiast x:0
być może masz nowy alternatywny model z Tensorem z:0
), podczas gdy Twoi klienci mogą pozostać online, ciągle odpytując stare i nowe wersje tego modelu bez zmian po stronie klienta.
Predict SignatureDefs umożliwia także dodanie opcjonalnych dodatkowych tensorów do wyników, o które można jawnie zapytać. Załóżmy, że oprócz klucza wyjściowego znajdującego się poniżej scores
chcesz także pobrać warstwę zbiorczą do debugowania lub do innych celów. W takim przypadku po prostu dodałbyś dodatkowy Tensor z kluczem podobnym do pool
i odpowiednią wartością.
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"
}
}
Podpis regresjiDef
Regresja SignatureDefs obsługuje wywołania strukturalne do interfejsu API regresji TensorFlow Serving. Przepisują one, że musi istnieć dokładnie jeden tensor inputs
i jeden tensor outputs
.
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"
}
}