Open8

FastAPIについて

philosophynotephilosophynote

機械学習デザインパターン

Uvicornによる非同期処理

https://www.uvicorn.org/

UvicornはASGIと呼ばれる標準的なインターフェイスを提供するフレームワーク
非同期シングルプロセスで動作
Gunicornから起動することでマルチプロセスで使用することも可能

https://gunicorn.org/

GunicornはWSGIと呼ばれる同期的なアプリケーションインターフェイスを提供する

UvicornをGunicornから起動することで、
ASGIの非同期処理とWSGIのマルチプロセスを組み合わせることが可能

Pydanticによる構造的なデータ定義

https://docs.pydantic.dev/

philosophynotephilosophynote
app.py
app = FastAPI(
           title = "ServingPattern",
           description="web single pattern",
           version="0.1",
           )
app.include_router(routers.router, prefix="", tags=[""])
routers.py
router = APIRouter()

@router.get("/health")
def health() -> Dict[str, str]:
 return {"health": "ok"}

@router.post("/predict")
def predict(data: Data) -> Dict[str, List[float]]:
 return {"prediction": prediction_list}

"/health"の部分をパスオペレーションという

@はデコレーター
デコレーターを呼び出すとデコレーター直下の関数を呼び出す

include_routerを使用することでFastAPIインスタンスにルーティングを紐づけることができ、
ドキュメントにも反映される

SwaggerUIはAPIドキュメントをhtmlで表現したもの
FastAPIはSwaggerUIとredocを自動生成する

Pydanticにより、APIドキュメントへの型適用やバリデーションチェックが実行される

philosophynotephilosophynote

メソッドの引数部分にあるが、パスパラメータにない場合、
それはクエリパラメータとして扱われる

philosophynotephilosophynote

ONNX Runtime
https://onnxruntime.ai/

FastAPIと直接は関係ない
ONNXという機械学習推論モデルの共通フォーマットで出力されたモデルファイルを読み込んで
推論するためのランタイム