【发布时间】:2022-09-24 06:40:30
【问题描述】:
我有一个提供 ML 模型的 FastAPI 应用程序。它部署在 Kubernetes 上。对于最佳实践,Kubernetes 建议在您的 API 中实现一个 liveliness 端点,它可以探测以查看应用程序何时完成启动,以及一个就绪端点来探测以查看应用程序何时准备好开始接收请求。
目前,我已将 liveliness 和 readiness 端点实现为单个端点,一旦加载了 ML 模型并且端点可用于请求,它将返回状态代码 200。
这没关系,但理想情况下,我希望在 FastAPI 的启动完成后返回 200 的活力端点,并在加载模型后返回 200 的就绪端点(比应用程序启动花费的时间要长得多) )。
FastAPI 允许startup event triggers 我可以在其中启动模型的加载,但在应用程序启动完成之前没有端点可用,在启动事件也完成之前不会完成。
无论如何要在 FastAPI 中实现和“启动后”事件,我可以在其中启动模型的加载?
这是我想要实现的一些简单示例代码:
from fastapi import FastAPI, Response
from request import PredictionRequest
import model
app = FastAPI()
@app.on_event(\"post-startup\") # not possible
def load_model():
model.load()
@app.get(\"/live\")
def is_live():
return Response(status_code=200)
@app.get(\"/ready\")
def is_ready():
if model.is_loaded():
return Response(status_code=200)
else:
return Response(status_code=409)
@app.post(\'/predict\')
def predict(request: PredictionRequest):
return model.predict(request)
-
老实说,我想不到。您可以做的是创建另一个继承自 FastAPI 的 FastAPI 类(比如说
CustomFastAPI),然后在其中调用super.__init__(**kwargs),然后再调用加载模型的方法?想起来可能真的有用。 -
好主意!让我试试