Питонический способ использования FastAPIPython

Программы на Python
Ответить
Anonymous
 Питонический способ использования FastAPI

Сообщение Anonymous »

Я пытаюсь обработать модель Pytorch через FastAPI. Мне было интересно, каков правильный питонический/правильный способ сделать это.
Меня беспокоит то, что при использовании варианта 2, если вы попытаетесь написать тест, он запустит сервер.
Вариант 1
Этот метод помещает загрузку модели внутри метода __init__.
class ImageModel:
def __init__(self, model_path: pathlib.Path):
self.model = torch.load(model_path)
self.app = FastAPI()

@self.app.post("/predict/", response_model=ImageModelOutput)
async def predict(input_image: PIL.Image):
image = my_transform(input_image)
prediction = self.model_predict(image)
return ImageModelOutput(prediction=prediction)

@self.app.get("/readyz")
async def readyz():
return ReadyzResponse(status="ready")

def model_predict(self, image: torch.Tensor) -> list[str]:
# Replace this method with actual model prediction logic
return post_process(self.model(image))

def run(self, host: str = "0.0.0.0", port: int = 8080):
uvicorn.run(self.app, host=host, port=port)

# Example usage
if __name__ == "__main__":
# Replace with your actual model loading logic
image_model = ImageModel(model=model_path)
image_model.run()

Вариант 2
app = FastAPI()

# Load the model (replace with your actual model loading logic)
model_path = pathlib.Path("path/to/model")
model = torch.load(model_path)

@app.post("/predict/", response_model=ImageModelOutput)
async def predict(input_image: Image.Image):
image = my_transform(input_image)
prediction = post_process(model(image))
return ImageModelOutput(prediction=prediction)

@app.get("/readyz")
async def readyz():
return ReadyzResponse(status="ready")

# Run the application
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8080)


Подробнее здесь: https://stackoverflow.com/questions/792 ... ng-fastapi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»