Рабочий класс Gunicorn для задач GPU - PullRequest
0 голосов
/ 03 июня 2019

Я использую Flask с Gunicorn для реализации AI-сервера. Сервер принимает запросы HTTP и вызывает алгоритмы AI (построено с pytorch). Вычисления выполняются на графических процессорах NVIDIA. Используемый мной интерфейс драйвера - pycuda. Мне нужно немного информации о том, как я могу достичь параллелизма / параллелизма в этом случае. Машина обычно имеет 8 графических процессоров и более. И каждый из них может запускать несколько алгоритмов.

Конкретный вопрос: какой рабочий класс Gunicorn (или, скажем, библиотека параллелизма Python) лучше всего подходит для такого рода задач?

Я знаю, что общие стратегии:

  1. Если приложение ограничено вводом / выводом, выберите «псевдопотоки», такие как gevent.

  2. Если приложение ограничено ЦП, используйте процессы для достижения параллелизма благодаря GIL Python.

  3. Если речь идет об объеме памяти, используйте gthread или gevent в пользу работников процесса.

Операторы about могут быть не очень точными, но я думаю, что это работает как общее руководство.

Однако для задач с графическим процессором я не уверен, следует ли нам относиться к ним как к случаю, ограниченному процессором, или у них есть что-то особенное? Повлияет ли на вычисления GPU GIL, если я использую gthreads вместо процессов?

...