Я использую Flask с Gunicorn для реализации AI-сервера. Сервер принимает запросы HTTP и вызывает алгоритмы AI (построено с pytorch
). Вычисления выполняются на графических процессорах NVIDIA. Используемый мной интерфейс драйвера - pycuda
. Мне нужно немного информации о том, как я могу достичь параллелизма / параллелизма в этом случае. Машина обычно имеет 8 графических процессоров и более. И каждый из них может запускать несколько алгоритмов.
Конкретный вопрос: какой рабочий класс Gunicorn (или, скажем, библиотека параллелизма Python) лучше всего подходит для такого рода задач?
Я знаю, что общие стратегии:
Если приложение ограничено вводом / выводом, выберите «псевдопотоки», такие как gevent
.
Если приложение ограничено ЦП, используйте процессы для достижения параллелизма благодаря GIL Python.
Если речь идет об объеме памяти, используйте gthread
или gevent
в пользу работников процесса.
Операторы about могут быть не очень точными, но я думаю, что это работает как общее руководство.
Однако для задач с графическим процессором я не уверен, следует ли нам относиться к ним как к случаю, ограниченному процессором, или у них есть что-то особенное? Повлияет ли на вычисления GPU GIL
, если я использую gthreads
вместо процессов?