Цель
В этом документе представлены примеры предполагаемого использования SignatureDefs в SavedModel, которые сопоставляются с API-интерфейсами TensorFlow Serving.
Обзор
SignatureDef определяет подпись вычислений , поддерживаемых в графе TensorFlow. SignatureDefs направлены на обеспечение общей поддержки , чтобы идентифицировать входы и выходы функции и могут быть определены при создании SavedModel .
Задний план
TF-экспортеры и SessionBundle используются подписи , которые аналогичны по своей концепции , но необходимые пользователям различать по имени и по умолчанию подписей для того , чтобы они были извлечены правильно при нагрузке. Для тех , кто ранее использовал TF-экспортер / SessionBundle, Signatures
в TF-экспортере будут заменены SignatureDefs
в SavedModel.
SignatureDef Структура
SignatureDef требует спецификации:
-
inputs
в качестве карты строки в TensorInfo. -
outputs
как отображение строки в TensorInfo. -
method_name
(что соответствует поддерживаемому имени метода в загрузке инструмента / системы).
Обратите внимание , что TensorInfo сама по себе требует уточнения имени, DTYPE и тензорной форме. Хотя тензорная информация уже присутствует на графике, полезно явно указать TensorInfo как часть SignatureDef, поскольку инструменты могут затем выполнять проверку подписи и т. Д. Без необходимости читать определение графа.
Связанные константы и утилиты
Для простоты повторного использования и совместного использования в инструментах и системах часто используемые константы, связанные с SignatureDefs, которые будут поддерживаться в TensorFlow Serving, определены как константы. Конкретно:
Кроме того, SavedModel обеспечивает Util , чтобы помочь построить подпись четкости.
Образцы конструкций
TensorFlow Serving предоставляет API высокого уровня для выполнения логического вывода. Чтобы включить эти API, модели должны включать один или несколько SignatureDefs, которые определяют точные узлы TensorFlow, которые будут использоваться для ввода и вывода. Ниже приведены примеры конкретных SignatureDefs, которые TensorFlow Serving поддерживает для каждого API.
Обратите внимание, что обслуживание TensorFlow зависит от ключей каждого TensorInfo (на входах и выходах SignatureDef), а также от имени метода SignatureDef. Фактическое содержимое TensorInfo зависит от вашего графика.
Подпись классификации
Classification SignatureDefs поддерживает структурированные вызовы API классификации TensorFlow Serving. Они предписывают , что должно быть inputs
Тензорная, и что существуют два дополнительных выходных Тензоры: classes
и scores
, по меньшей мере , один из которых должен присутствовать.
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"
}
}
Прогнозировать подписьDef
Predict SignatureDefs поддерживает вызовы Predict API TensorFlow Serving. Эти подписи позволяют гибко поддерживать произвольное количество тензоров ввода и вывода. В приведенном ниже пример, подпись my_prediction_signature
имеет один логический вход Тензорных images
, которые отображаются в реальный Тензор в вашем графике x:0
.
Predict SignatureDefs обеспечивает переносимость между моделями. Это означает , что вы можете поменять в различных SavedModels, возможно , с разными названиями основного Tensor (например , вместо x:0
, возможно , у вас есть новая альтернативная модель с тензорным z:0
), в то время как ваши клиенты могут оставаться в сети постоянно запрашивая старый и новый версии этой модели без изменений на стороне клиента.
Predict SignatureDefs также позволяет добавлять необязательные дополнительные тензоры к выходным данным, которые можно явно запрашивать. Допустим, что в дополнении к ключу вывода ниже из scores
, вы также хотели бы принести пул слой для отладки или для других целей. В этом случае, вы бы просто добавить дополнительный тензор с ключом , как pool
и соответствующим значение.
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"
}
}
Подпись регрессииDef
Regression SignatureDefs поддерживает структурированные вызовы API регрессии TensorFlow Serving. Они предписывают , что должно быть ровно один inputs
тензорные и один 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"
}
}