Микросервис для предсказания погоды, основанный на модели градиентного бустинга. Сервис оценивает вероятность дождя на следующий день по текущим погодным условиям. Модель обёрнута в веб-приложение, к которому можно обращаться по сети. Также в коде имеются тесты для оценки работоспособности сервиса и модели.
-
Чтобы редактировать репозиторий, необходимо сделать его копию. Это делается по кнопке fork. Лучше не менять название репозитория, поскольку оно прописано в файле setup
-
Клонируем репозиторий на свой компьютер:
git clone <адрес вашей копии репозитория>
- Создаём новую ветку:
git checkout -b <имя новой ветки>
- Установка нужных библиотек:
pip install -r requirements.txt
pip install -e .
Бывает, что pip пропускает модуль marshmallow_dataclass. Можно установить его вручную:
pip install marshmallow_dataclass
- Готово! Можно проверить работоспособность проекта, запустив тесты:
python -m online_inference.tests
Запустить сервер можно следующей командой:
uvicorn --app-dir=online_inference app:app --host 127.0.0.1 --port 8000
Проверить post-запросы можно с помощью скрипта:
python -m online_inference.script
Все файлики, с которыми мы будем работать, находятся в папке online_inference.
-
Необходимо добавить в файл app.py новый эндпоинт /will_it_rain, который возвращает 1, если вероятность, предсказанная моделью, превышает 0.6, или 0 в обратном случае.
-
В файле tests.py раскомментируйте тест для данного эндпоинта и проверьте его работу. Добейтесь того, чтобы все тесты проходили.
-
Запушьте изменения на Github, убедитесь, что новая версия проходит автоматические проверки.
-
Сделайте pull request в master и скиньте на него ссылку в чат.
- Добавляем изменения в индекс:
git add .
- Создаём коммит:
git commit -m "Описание того, что было изменено"
- Отправляем изменения в удалённый репозиторий:
git push
Если вы локально создали новую ветку, эта команда не сработает, но git сам подскажет, как её модернизировать, чтобы добавить ветку. Можно просто скопировать :)
==============================
├── LICENSE
├── README.md
├── data <- Папка c датасетом и предиктом
│
├── notebooks <- Ноутбук с разведочным анализом данных
│
├── configs <- Конфиги с параметрами моделей (для обучения: список фич, параметры модели, пути для сохранения; для предикта: путь к модели и результатам)
│
├── requirements.txt <- Файл с зависимостями
│
├── ml_project <- Исходный код ML-микросервиса
│ ├── __init__.py
│ │
│ ├── data <- Скрипт для загрузки и разделения данных на обучающую и тестовую выборку
│ │ └── get_data.py
│ │
│ ├── features <- Трансформер для обработки датасета
│ │ └── build_features.py
│ │
│ ├── models <- Скрипт для работы с моделью
│ │ └── model_fit_predict.py
│ │
│ ├── enities <- Параметры модели датасета в формате DataClass (чёрная магия для парсинга конфигов)
│ │ ├── features_params.py
│ │ ├── model_params.py
│ │ └── split_params.py
│ │
│ └── tests <- Юнит-тесты отдельных модулей и тест пайплайна для обучения модели
│
|
├── online_inference <- Код веб-приложения для онлайн-использования модели
│ ├── app.py <- Точка входа: обработчики запросов и валидация
│ │
│ ├── script.py <- Скрипт для создания post-запросов
│ |
│ ├── tests.py <- Юнит-тесты для проверки работы приложения
│ │
│ └── data_utils
│ └── data_utils.py <- Утилиты для работы с моделью (удобная загрузка модели и датасета, валидация данных из post-запроса)
│
└── setup.py
Можно обучить модель заново или проверить её тесты.
Обучение модели:
python ml_project/train_test_pipeline.py --mode=fit --config=config/config_lgbm.yaml
Предикт с помощью модели:
python ml_project/train_test_pipeline.py --mode=predict --config=config/config_predict.yaml
Тесты модели:
python ml_project/tests/test_full_train_fit_pipeline.py
python ml_project/tests/data/test_get_dataset.py
python ml_project/tests/features/test_transformer.py
python ml_project/tests/models/test_train_model.py