Настройка процессов и потоков uwsgi для приложения с тяжелым процессором flask, используемого 20 пользователями одновременно - PullRequest
0 голосов
/ 28 мая 2020

Для эксперимента в области машинного обучения я построил приложение Flask, которое очень загружает процессор из-за параллельного расчета модели. Во время эксперимента систему должны использовать около 20 пользователей одновременно, что приведет к высокой загрузке процессора.

В программе можно настроить, все ли доступные ядра или только подмножество должны использоваться для расчета. Чтобы предложить приложение через Интернет, я использую nginx в сочетании с сервером приложений uwsgi. Поскольку у меня нет опыта работы с uwsgi или серверами приложений в целом, у меня возникают проблемы с поиском правильной конфигурации для серверов uwsgi. У меня проблемы, особенно когда дело касается настройки процессов и потоков. Во время тестирования с uwsgitop я обнаружил, что даже при параллельных запросах используются только 2-3 из 4 воркеров. Я предположил, что нагрузка равномерно распределяется на всех 4 рабочих. Однако он в основном сосредоточен на первых двух воркерах.

Итак, теперь вопрос: какие параметры должны быть настроены для одновременного использования моего приложения 20 пользователями, чтобы распределить нагрузку на разные процессоры или на оптимально использовать доступные ядра?

Теоретически доступно 16 ядер с одним экземпляром AWS. Имеет ли смысл увеличивать количество процессов или потоков?

Как я могу оптимизировать следующий файл конфигурации или как я могу наиболее эффективно измерить эффекты и настроить итеративно?

[uwsgi]
wsgi-file = run.py
callable = app
socket = :8080
processes = 4
threads = 2
master = true
chmod-socket = 660
vacuum = true
die-on-term = true
stats = :1717
memory-report = true
...