Одновременное использование моделей FastAI с воркерами Gunicorn - PullRequest
0 голосов
/ 16 июня 2020

Я работаю над проектом, включающим запуск приложения Flask -restful поверх Gunicorn, в котором загружается модель FastAI и используется для прогнозирования при получении входящего запроса. Модель FastAI экспортируется в файл, который предварительно загружается при запуске приложения. Я хочу ускорить работу приложения, когда оно получает много запросов, используя многопроцессорную обработку Gunicorn, то есть настройку его рабочих -w, но я обнаружил, что увеличение количества рабочих, похоже, только снижает скорость, с которой оно может отвечать.

Модель FastAI загружается из экспортированного файла один раз, когда приложение предварительно загружено, поэтому она должна быть разделена между всеми воркерами:

model = fastai.vision.load_learner(PATH, FILENAME)

Запросы к приложению затем выполняются из другого скрипт с использованием ThreadPoolExecutor:

with concurrent.futures.ThreadPoolExecutor(max_workers = 8) as pool:
    #[request-to-app for x in list-of-length-100+]

Когда приложение запускается с Gunicorn как:

gunicorn -w 8 --preload -b 127.0.0.1:5000 app:app

, я обнаружил, что изменение количества рабочих в команде gunicorn на 2 увеличивает скорость немного по сравнению с 1, но установка на 4 или что-то большее значительно снижает скорость. Есть ли что-то в моделях учащихся FastAI, что могло бы помешать одновременному совместному использованию этих данных каждым из воркеров, или что в противном случае могло бы привести к его замедлению, как это?

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