Развертывание модели как сервиса с использованием FastAPI и Gunicorn с высокой пропускной способностью

#python #api #gunicorn #fastapi #uvicorn

#python #API #gunicorn #fastapi #uvicorn

Вопрос:

Я пытаюсь развернуть модель машинного обучения (на основе tensorflow и keras) как сервис с использованием FastAPI и Gunicorn, но я не могу получить достаточную пропускную способность от API даже после увеличения числа рабочих процессов и потоков Gunicorn.

Я пробовал использовать следующие конфигурации:

  1. 1 Рабочий: модель gunicorn: приложение -k uvicorn.workers.UvicornWorker -b имя хоста: порт Это дает мне пропускную способность 15 ответов в секунду

  2. 5 рабочих: модель gunicorn: приложение -k uvicorn.workers.UvicornWorker —workers =5 -b имя хоста: порт Это дает мне пропускную способность в 30 ответов в секунду

30 ответов в секунду — это максимальная пропускная способность, которую я могу получить, в то время как мне приходится масштабировать ее примерно до 300 ответов в секунду. Я также пытался увеличить количество потоков, но это также не привело к увеличению пропускной способности.

Когда я синхронизирую запрос-ответ с одним работником: для возврата ответа требуется около 80 мс (выполняется через Postman)

Я пытаюсь запустить это на компьютере Linux со следующими подробностями:

  • ОС — CentOS
  • Процессор (ы) — 8
  • Количество ядер на сокет — 4
  • Количество потоков на ядро — 2
  • Объем памяти — ~ 65 ГБ

Система практически простаивает, когда я пытаюсь запустить сервис (загрузка процессора составляет менее 5%).

Комментарии:

1. У вас большая полезная нагрузка?

2. Это будут непрерывные потоки данных со скоростью около 300 записей в секунду

3. Это действительно странно, вы использовали асинхронные функции?

4. Вы можете использовать библиотеку orjson , которая чрезвычайно быстра, а в FastAPI есть ORJSONResponse сам класс, вы можете изменить свой класс ответа по умолчанию на ORJSONResponse , вам просто нужно установить orjson и добавить app = FastAPI(default_response_class=ORJSONResponse)

5. Я обязательно попробую и дам вам знать!!