Gunicorn и gevent не используют ресурсы, о которых я говорю.Когда я говорю gunicorn использовать одного работника, он использует одного работника и максимизирует одно ядро.Если я скажу использовать 4 рабочих, это распределит ОДНО ядро по 4 различным рабочим.Я хочу, чтобы у одного работника был один процессор.Та же проблема, когда я использую опцию --threads
.
У меня есть движок NER, который загружает x МБ памяти графического процессора для модели.Теперь я хочу максимизировать количество запросов к этому сервису.На данный момент мой лучший результат - gunicorn -t 120 -w 4 -k gevent --threads 12 -b 0.0.0.0:8980 script:app
, что дает ~ 2,1 тыс. Запросов / мин.При проверке использования ресурса, как и ожидалось, при загрузке модели он используется очень часто.Но при фактическом вызове API, похоже, совсем не используется.
Загрузка модели.
Вызов API.
Я хочу увеличить пропускную способность.Увеличение количества потоков и рабочих, кажется, не имеет значения ..
Ps Я работаю на мощной машине, поэтому ресурсы не являются проблемой.
Кстати,Лучше всего было бы иметь одного работника, который фактически загружает модель, а затем несколько работников, использующих эту модель.Одна из больших проблем на данный момент заключается в том, что у меня заканчивается память GPU, когда у меня +12 рабочих из-за того, что каждому работнику приходится загружать модель в память GPU.Есть какой-либо способ сделать это?Если я правильно понимаю gevent
, то об этом нужно позаботиться?
Заранее спасибо
ОБНОВЛЕНИЕ Просто заметил, что gunicorn вообще ничего не делал.Я получаю те же результаты, работая на сервисе без Gunicorn.Что я делаю неправильно?