Поднял сервис на FastAPI, в который планируется направлять GET-запросы на обработку аудиофайла.
При отправке GET-запроса происходит чтение некоторого аудиофайла, а затем он направляется в ML-модель.
Последний этап занимает наибольшее время.
Так и не смог понять, как настроить процесс так, чтоб N-е число пользователей могли направлять параллельно запросы, и каждый из запросов (в пределах доступных ресурсов) модель бы параллельно обрабатывала и возвращала по итогу обработки.
Примерный код основного функционала сервиса:
from fastapi import FastAPI
from ml_models import AudioModel
ml_models = {}
@asynccontextmanager
async def ml_model_lifespan(app: FastAPI):
# add model-1
ml_models ["MODEL_1"] = AudioModel(**kwargs)
# add model-2
ml_models ["MODEL_2"] = AudioModel(**kwargs)
yield
# code to execute when app is shutting down
ml_models .clear()
app = FastAPI(title="ML model service", lifespan=ml_model_lifespan)
@app.get("/start")
async def run_ml_model(filepath, model_id):
result = ml_models[model_id].predict(filepath)
return {"code": 200, "data": result}