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)
|
Двоичный файл не отображается.
Загрузка…
Ссылка в новой задаче