Path: blob/master/model_deployment/fastapi_kubernetes/app/main.py
1480 views
from typing import List1from fastapi import FastAPI2from pydantic import BaseModel3import numpy as np4import lightgbm as lgb56app = FastAPI()7model = lgb.Booster(model_file='/app/model.txt')8910class Features(BaseModel):11MedInc: float12HouseAge: float13AveRooms: float14AveBedrms: float15Population: float16AveOccup: float17Latitude: float18Longitude: float192021class PredictResponse(BaseModel):22score: float232425class BatchPredictResponse(BaseModel):26scores: List[float]272829@app.get("/")30def hello_world():31return {"message": "Hello World"}323334@app.post("/predict", response_model=PredictResponse)35def predict(features: Features):36"""Endpoint for getting the score for a single record."""37row = np.array([getattr(features, name) for name in model.feature_name()])3839# .predict expects a 2d array, hence for single record prediction, we need40# to reshape it to 2d first41row = row.reshape(1, -1)42score = model.predict(row)[0]43return {"score": score}444546@app.post("/batch/predict", response_model=BatchPredictResponse)47def batch_predict(batch_features: List[Features]):48"""Endpoint for getting scores for a batch of record."""49num_features = len(model.feature_name())50rows = np.zeros((len(batch_features), num_features))5152for i, features in enumerate(batch_features):53row = np.array([getattr(features, name) for name in model.feature_name()])54rows[i] = row5556scores = model.predict(rows).tolist()57return {"scores": scores}585960