Tensorflow обслуживает проблемы с производительностью при масштабировании до нескольких экземпляров в Kubernetes - PullRequest
0 голосов
/ 04 мая 2020

У меня есть smalli sh модель, которую я настроил на Kubernetes, чтобы максимизировать производительность для одного экземпляра.

В итоге я получил следующую настройку, которая дает мне около 1000 запросов в секунду со скоростью около 10 мс. время ответа для 99-го процентиля. Моя цель - сохранить время отклика p99 ниже 10 мс и получать как можно больше запросов в секунду на процессор.

Поскольку не было общего состояния, я предположил, что могу масштабироваться по горизонтали и иметь возможность получать 1000 запросов в секунду на экземпляр . Однако, когда я попробовал его, производительность резко снизилась, и мне нужно установить его примерно на 700QPS, чтобы поддерживать время отклика 99-го процентиля.

Работа в Google Kubernetes Engine с использованием машин n2-highcpu-32.

communicating over grpc (using GRPC client side load balancer to evenly distribute connections)
batch_timeout_micros: 500
max_batch_size: 4
num_batch_threads: 4
max_enqueued_batches: 0

tensorflow_intra_op_parallelism: 4
tensorflow_inter_op_parallelism: 4

Requests/Limits:
CPUs: 4
Memory: 4Gi

Если я попытаюсь поддерживать 1000 запросов в секунду на модуль более чем для одного модуля, задержка вырастет до> 15 мс

У кого-нибудь есть идеи о том, что здесь происходит?

Edit: я понял, что когда я увеличил размер до 4 модулей, 3 из них оказались на одном узле, а один на другом отдельно. Когда я разбил его на производительность для каждого модуля, один сам по себе работал НАМНОГО лучше, чем 3 на том же самом. ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...