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