master
Родитель
e0b7f9de12
Сommit
e69113adac
@ -0,0 +1 @@
|
||||
__pycache__
|
@ -0,0 +1,14 @@
|
||||
FROM python:3.11-slim
|
||||
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
EXPOSE 8000
|
||||
VOLUME /models
|
||||
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000" ]
|
||||
|
||||
# docker build . --tag estate_model:0
|
||||
# docker run -p 8001:8000 -v $(pwd)/../models:/models estate_model:0
|
@ -0,0 +1,20 @@
|
||||
|
||||
import logging
|
||||
import pandas as pd
|
||||
import pickle as pkl
|
||||
|
||||
logger = logging.getLogger("uvicorn.error")
|
||||
class FastAPIHandler():
|
||||
|
||||
def __init__(self):
|
||||
logger.warning('Loading model...')
|
||||
try:
|
||||
self.model = pkl.load(open('../models/model.pkl', 'rb'))
|
||||
logger.info('Model is loaded')
|
||||
except Exception as e:
|
||||
logger.error('Error loading model')
|
||||
|
||||
def predict(self, item_features:dict):
|
||||
item_df = pd.DataFrame(data=item_features, index=[0])
|
||||
prediction = self.model.predict(item_df)
|
||||
return (prediction[0])
|
@ -0,0 +1,19 @@
|
||||
|
||||
import random
|
||||
from fastapi import FastAPI
|
||||
from api_handler import FastAPIHandler
|
||||
|
||||
app = FastAPI()
|
||||
app.handler = FastAPIHandler()
|
||||
|
||||
@app.get('/')
|
||||
def root_dir():
|
||||
return({'Hello': 'world'})
|
||||
|
||||
@app.post('/api/prediction')
|
||||
def make_prediction(flat_id: int, item_features: dict):
|
||||
prediction = app.handler.predict(item_features)
|
||||
return ({
|
||||
'price': prediction,
|
||||
'flat_id': flat_id
|
||||
})
|
@ -0,0 +1,5 @@
|
||||
fastapi
|
||||
uvicorn
|
||||
pandas
|
||||
pickle4
|
||||
scikit-learn
|
@ -0,0 +1,18 @@
|
||||
import mlflow
|
||||
import pickle as pkl
|
||||
|
||||
# Работаем с MLflow локально
|
||||
TRACKING_SERVER_HOST = "127.0.0.1"
|
||||
TRACKING_SERVER_PORT = 5001
|
||||
|
||||
registry_uri = f"http://{TRACKING_SERVER_HOST}:{TRACKING_SERVER_PORT}"
|
||||
tracking_uri = f"http://{TRACKING_SERVER_HOST}:{TRACKING_SERVER_PORT}"
|
||||
|
||||
mlflow.set_tracking_uri(tracking_uri)
|
||||
mlflow.set_registry_uri(registry_uri)
|
||||
|
||||
RUN_NAME = '96a46920d98c48dfa3c019926b44018b'
|
||||
loaded_model = mlflow.sklearn.load_model(f'runs:/{RUN_NAME}/models')
|
||||
|
||||
with open('model.pkl', 'wb+') as f:
|
||||
pkl.dump(loaded_model, f)
|
Двоичный файл не отображается.
Загрузка…
Ссылка в новой задаче