#tensorflow #batching #tensorflow-serving
#tensorflow #пакетирование #обслуживание tensorflow
Вопрос:
Я экспериментирую с развертыванием обслуживания TF на GKE и пытаюсь создать высокодоступную онлайн-систему прогнозирования. Я пытался оптимизировать задержку, объединяя несколько запросов вместе. Однако задержка, похоже, страдает, а не улучшается.
- Модель представляет собой CNN, входной вектор длиной около 50.
- Обслуживание TF выполняется в кластере Kubernetes с 6 стандартными узлами
- Я пробовал пакеты размером 5 и 10. Я не использовал реализацию пакетной обработки из TF Serving, я просто отправил запрос с массивом shape
(batch_size, input_size)
вместо(1, input_size)
Моя интуиция заключалась в том, что, хотя пакетная обработка приносит наибольшую пользу при использовании с графическими процессорами для использования их пропускной способности, использование ее с процессорами не должно замедлять ее. Замедление показано на диаграммах ниже — req / s — это скорее прогнозы / с, т.Е. 20 будут разделены на 4 или 2 запроса к серверу.
Я понимаю, как это неравномерно распределяет рабочую нагрузку по кластеру для меньшего количества запросов, но даже при просмотре 60 или 120 задержка просто выше.
Есть идеи, почему это так?
Комментарии:
1. Насколько велики данные, которые вы отправили с вашим пакетом? Я видел несколько патологических случаев, когда при отправке данных узкое место со скоростью 80 МБ / с, возможно, это может быть узким местом
2. Хм, это далеко не такой размер — весь пакет представляет собой всего лишь массив целых чисел 10 * 50.
3. Если вы запускаете его на процессоре, пакетная обработка не должна быть медленнее, но и не быстрее.
4. Я не говорю, что вы не используете пакетную реализацию, а загружаете (batch, inp). Если он рассматривает это как один вход, возможно, это значительно увеличивает количество параметров, которые у вас есть в вашей модели, потому что теперь вы обрабатываете каждый образец в пакете по-разному. Это стало бы причиной значительного замедления.
5. Если это время задержки. Возможно, это увеличивается из-за пакетной обработки, потому что вам нужно дождаться создания целого пакета, прежде чем вы сможете отправить его на обработку.