SignatureDefs w SavedModel do obsługi TensorFlow

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Cel

Ten dokument zawiera przykłady zamierzonego użycia SignatureDefs w SavedModel, które są mapowane na API TensorFlow Serving.

Przegląd

SignatureDef określa podpis obliczeń wspierany na wykresie TensorFlow. SignatureDefs mają na celu zapewnienie wsparcia w celu identyfikacji rodzajowej wejść i wyjść z funkcji i może być określona przy budowie SavedModel .

Tło

TF-Eksporter i SessionBundle stosowane podpisy , które są podobne w koncepcji, ale wymagany użytkownikom odróżnić nazwie i domyślne podpisów, aby mogły być pobierane poprawnie po obciążeniu. Dla tych, którzy wcześniej używany TF-eksportera / SessionBundle, Signatures w TF-eksporter zostanie zastąpiony przez SignatureDefs w SavedModel.

Struktura SignatureDef

SignatureDef wymaga specyfikacji:

  • inputs mapy sznurka do TensorInfo.
  • outputs jako mapa sznurka do TensorInfo.
  • method_name (co odpowiada obsługiwanej nazwy metody w narzędziu / system załadunku).

Zauważ, że TensorInfo sama wymaga specyfikacji nazwy i kształtu, dtype tensora. Chociaż informacje o tensorze są już obecne na wykresie, warto wyraźnie zdefiniować TensorInfo jako część SignatureDef, ponieważ narzędzia mogą następnie przeprowadzać weryfikację podpisu itp. bez konieczności czytania definicji wykresu.

Aby ułatwić ponowne użycie i udostępnianie w narzędziach i systemach, często używane stałe związane z SignatureDefs, które będą obsługiwane w TensorFlow Serving, są zdefiniowane jako stałe. Konkretnie:

Ponadto SavedModel zapewnia util aby pomóc budować podpis-def.

Przykładowe struktury

TensorFlow Serving udostępnia interfejsy API wysokiego poziomu do wykonywania wnioskowania. Aby włączyć te interfejsy API, modele muszą zawierać jeden lub więcej obiektów SignatureDefs, które definiują dokładnie węzły TensorFlow, które mają być używane dla danych wejściowych i wyjściowych. Zobacz poniżej przykłady konkretnych SignatureDefs, które TensorFlow Serving obsługuje dla każdego interfejsu API.

Zauważ, że TensorFlow Serving zależy od kluczy każdego TensorInfo (w 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 ustrukturyzowane wywołania interfejsu API klasyfikacji TensorFlow Serving. Te określają, że musi istnieć inputs Tensor, 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

Predict SignatureDefs obsługuje wywołania interfejsu API Predict TensorFlow Serving. Sygnatury te pozwalają elastycznie obsługiwać dowolną liczbę tensorów wejściowych i wyjściowych. Na poniższym przykładzie podpis my_prediction_signature posiada jedno wejście logiczne Tensor images , które są mapowane do rzeczywistej Tensor na wykresie x:0 .

Predict SignatureDefs umożliwia przenoszenie między modelami. Oznacza to, że możesz zamienić w różnych SavedModels, ewentualnie z różnymi nazwami bazowy Tensor (np zamiast x:0 może masz nowy alternatywny model z tensora z:0 ), a klienci mogą zatrzymać się w Internecie stale zapytań stary i nowy wersje tego modelu bez zmian po stronie klienta.

Predict SignatureDefs umożliwia również dodawanie opcjonalnych dodatkowych tensorów do danych wyjściowych, o które można jawnie zapytać. Powiedzmy, że oprócz klucza wyjściowej poniżej z scores , również chciał sprowadzić warstwę poolingu dla debugowania lub innych celów. W takim przypadku należy po prostu dodać dodatkowy Tensor z kluczem jak pool i odpowiedniej 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 ustrukturyzowane wywołania interfejsu API regresji TensorFlow Serving. Te określają, że nie musi być dokładnie jeden inputs Tensor i jeden 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"
  }
}