Обслуживание Tensorflow: когда его использовать, а не просто выводить внутри службы Flask?
Я работаю с моделью, обученной с использованием API обнаружения объектов. Вот как я это сделал:
Создайте службу Tensorflow на порту 9000, как описано в базовом руководстве
Создайте код Python, вызывающий этот сервис, используя предикат_pb2 из tenorsflow_serving.apis, подобный этому
- Вызовите этот код на сервере Flask, чтобы сделать службу доступной по HTTP
Тем не менее, я мог бы сделать вещи намного проще следующим образом:
- Создайте код Python для вывода, как в примере в репозитории обнаружения объектов
- Вызовите этот код на сервере Flask, чтобы сделать службу доступной по HTTP
Как видите, я мог бы пропустить использование сервировки Tensorflow.
Итак, есть ли веская причина использовать сервировку Tensorflow в моем случае? Если нет, то в каких случаях я должен его использовать?
2 ответа
Я полагаю, что большинство причин, по которым вы бы предпочли Tensorflow Serving over Flask, связаны с производительностью:
- Tensorflow Serving использует gRPC и Protobuf, в то время как обычный веб-сервис Flask использует REST и JSON. JSON опирается на HTTP 1.1, а gRPC использует HTTP/2 ( есть важные различия). Кроме того, Protobuf - это двоичный формат, используемый для сериализации данных, и он более эффективен, чем JSON.
- TensorFlow Serving может выполнять пакетные запросы к одной и той же модели, которая более целесообразно использует аппаратное обеспечение (например, графические процессоры).
- TensorFlow Serving может управлять версиями модели
Как почти все, это во многом зависит от варианта использования, который у вас есть, и вашего сценария, поэтому важно подумать о плюсах и минусах и ваших требованиях. TensorFlow Serving обладает отличными функциями, но эти функции также могут быть реализованы для работы с Flask с некоторыми усилиями (например, вы можете создать свой пакетный механизм).
Flask используется для обработки запросов / ответов, тогда как обслуживание Tensorflow специально разработано для обслуживания гибких моделей ML в производстве.
Давайте рассмотрим несколько сценариев, в которых вы хотите:
- Одновременное обслуживание нескольких моделей для нескольких продуктов (отношения "многие ко многим").
- Посмотрите, какая модель оказывает влияние на ваш продукт (A/B-тестирование).
- Обновление весов моделей при производстве, что так же просто, как сохранение новой модели в папке.
- Иметь производительность, равную коду, написанному на C/C++.
И вы всегда можете использовать все эти преимущества БЕСПЛАТНО, отправляя запросы в TF Serving с помощью Flask.