У меня есть 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 на том же самом. ...