Andrey 5 месяцев назад
Родитель e0b7f9de12
Сommit e69113adac

@ -12,6 +12,7 @@
| 10.10.2024 | [Feature engineering](./lectures/lec6-feature_engineering.odp) - [в формате pptx](./lectures/lec6-feature_engineering.pptx) - код в [ноутбуке к mlflow](./assets/mlflow/research.ipynb) |
| 17.10.2024 | [Feature extraction. Настройка гиперпараметров](./lectures/lec7-feature_selection_hyperparams.odp) - [в формате pptx](./lectures/lec7-feature_selection_hyperparams.pptx) - код в [ноутбуке к mlflow](./assets/mlflow/research.ipynb) |
| 24.10.2024 | [Архитекура сервиса. API](./lectures/lec8-api.odp) - [в формате pptx](./lectures/lec8-api.pptx) |
| 14.11.2024 | [Создание микросервиса](./lectures/lec9-webserver.pptx) |
## <span style="color:red">Перенос занятий</span>

@ -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)

Двоичные данные
lectures/lec9-webserver.pptx

Двоичный файл не отображается.
Загрузка…
Отмена
Сохранить