#python #api #gunicorn #fastapi #uvicorn
#python #API #gunicorn #fastapi #uvicorn
Вопрос:
Я пытаюсь развернуть модель машинного обучения (на основе tensorflow и keras) как сервис с использованием FastAPI и Gunicorn, но я не могу получить достаточную пропускную способность от API даже после увеличения числа рабочих процессов и потоков Gunicorn.
Я пробовал использовать следующие конфигурации:
-
1 Рабочий: модель gunicorn: приложение -k uvicorn.workers.UvicornWorker -b имя хоста: порт Это дает мне пропускную способность 15 ответов в секунду
-
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. Я обязательно попробую и дам вам знать!!