FastAPIについて
FastAPI は、Pythonの標準である型ヒントに基づいてPython 3.6 以降でAPI を構築するための、モダンで、高速(高パフォーマンス)な、Web フレームワークです。
機械学習デザインパターン
Uvicornによる非同期処理
UvicornはASGIと呼ばれる標準的なインターフェイスを提供するフレームワーク
非同期シングルプロセスで動作
Gunicornから起動することでマルチプロセスで使用することも可能
GunicornはWSGIと呼ばれる同期的なアプリケーションインターフェイスを提供する
UvicornをGunicornから起動することで、
ASGIの非同期処理とWSGIのマルチプロセスを組み合わせることが可能
Pydanticによる構造的なデータ定義
app = FastAPI(
title = "ServingPattern",
description="web single pattern",
version="0.1",
)
app.include_router(routers.router, prefix="", tags=[""])
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ドキュメントへの型適用やバリデーションチェックが実行される
メソッドの引数部分にあるが、パスパラメータにない場合、
それはクエリパラメータとして扱われる
ONNX Runtime
FastAPIと直接は関係ない
ONNXという機械学習推論モデルの共通フォーマットで出力されたモデルファイルを読み込んで
推論するためのランタイム
Docker化について
公式のイメージがあるけど、
内容がよくわからないため、Pythonイメージから作成する
scikit-learnで作成したアヤメのモデルにONNXRUNTIMEを適用する