Учебный проект для демонстрации основных этапов жизненного цикла проекта предиктивной аналитики.
Клонируйте репозиторий, создайте виртуальное окружение, активируйте и установите зависимости:
git clone https://github.com/LeonidAlekseev/pabd24
cd pabd24
python3 -m venv venv
source venv/bin/activate # mac or linux
.\venv\Scripts\activate # windows
pip install -r requirements.txt
python src/parse_cian.py
Параметры для парсинга можно изменить в скрипте.
Подробности см. в репозитории
Для доступа к хранилищу скопируйте файл .env
в корень проекта.
python src/upload_to_s3.py -i data/raw/file.csv
Аргумент -i или --input указывает пути до локального файла, по умолчанию переменная CSV_PATH в исполняемом файле
Для доступа к хранилищу скопируйте файл .env
в корень проекта.
python src/download_from_s3.py -i data/raw/file.csv
Аргумент -i или --input указывает пути до удаленного файла, по умолчанию переменная CSV_PATH в исполняемом файле
python src/preprocess_data.py -s 0.9 -i data/raw/file.csv
Аргумент -s или --split указывает относительный размер обучающей выборки, по умолчанию переменная TRAIN_SIZE в исполняемом файле Аргумент -i или --input указывает пути до удаленного файла, по умолчанию переменная CSV_PATH в исполняемом файле
python src/train_model.py -m models/linear_regression_v01.joblib
Аргумент -m или --model указывает путь сохранения модели, по умолчанию переменная MODEL_SAVE_PATH в исполняемом файле Модель обучается предсказывать цену (price) по площади (total_meters)
python src/test_model.py -m models/linear_regression_v01.joblib
Аргумент -m или --model указывает путь сохранения модели, по умолчанию переменная MODEL_SAVE_PATH в исполняемом файле Модель обучается предсказывать цену (price) по площади (total_meters)
python src/predict_app.py
gunicorn -b 0.0.0.0:8000 -w 1 src.predict_app:app --daemon
python src/test_api.py
Api Endpoint 'http://31.129.100.203:8000' в исполняемом файле указывает на личный сервер
python src/test_parallel.py
Api Endpoint 'http://31.129.100.203:8000' в исполняемом файле указывает на личный сервер
docker build --platform="linux/amd64" -t leonidalekseev/pabd24:dev -f Dockerfile.dev .
Development версия с запуском приложения через flask Аргумент --platform указывает платформу для сборки образа
docker build --platform="linux/amd64" -t leonidalekseev/pabd24:latest -f Dockerfile .
Production версия с запуском приложения через gunicorn Аргумент --platform указывает платформу для сборки образа
docker pull leonidalekseev/pabd24:dev
docker run --log-driver json-file --name=pabd24dev -d -p 8000:8000 leonidalekseev/pabd24:dev
Development версия с запуском приложения через flask Аргумент --log-driver указывает формат записи логов контейнера Аргумент --name указывает название для запуска контейнера Аргумент -d указывает на то что нужно отсоединиться после запуска (detach) Аргумент -p указывает на открытие и соединение портов приложения к внешнему
docker pull leonidalekseev/pabd24:latest
docker run --log-driver json-file --log-opt max-size=32m --log-opt max-file=1 --name=pabd24 -d -p 8000:8000 leonidalekseev/pabd24:latest
Production версия с запуском приложения через gunicorn Аргумент --log-driver указывает формат записи логов контейнера Аргумент --log-opt указывает на ограничения размера логов контейнера Аргумент --name указывает название для запуска контейнера Аргумент -d указывает на то что нужно отсоединиться после запуска (detach) Аргумент -p указывает на открытие и соединение портов приложения к внешнему
Для доступа к сервису используйте следующий адрес:
http://31.129.100.203:8000/
Для использования сервиса используйте файл web/index.html
.
Учебный проект для демонстрации процесса разработки сервиса предиктивной аналитики.
Мы будем шаг за шагом разрабатывать сервис, предсказывающий цены на недвижимость.
В качестве IDE рекомендуется использовать PyCharm Community. Вы можете использовать другую IDE, если лучше ее знаете.
Экзамен - 60 баллов
В билете будет два теоретических вопроса и один практический (20, 20, 20).
Ответы только на листочках, компьютеры не включать, интернетом не пользоваться.
Вопросы по теории и практике
Текущая успеваемость - 40 баллов, вкл:
4 лаб работы по 8 баллов = 32
Активность на занятиях (тесты) = 8
Лекции и литература находятся на Google Drive
Текущая успеваемость студентов выставляется в таблице, которую можно найти в файле
Ссылки на свои репозитории и решения практических задач экзамена присылайте на почту ailabintsev@fa.ru
Тесты проходить в классе на занятиях, в присутствии преподавателя.
Основные команды bash и git.
Создание проекта с именем pabd24 и публикация на github.
Внесение первых правок через pull request.
Результат:
- Cсылка на проект у меня на почте - 2 балла.
- Ветка master - защищена от прямых коммитов - 1 балл.
- Ветка tmp - содержит в README.md строчку о том, что это другая ветка - 1 балл.
Парсинг циан.
Работа с переменными окружения .env
Работа с хранилищем S3.
Первичный анализ данных и скрипт предобработки данных.
Файл .env находится в Google Drive
Посмотреть содержимое бакета можно по ссылке https://storage.yandexcloud.net/pabd24
Результат:
- 3 CSV файла результатами парсинга для 1, 2, 3 комнатных квартир (по 50 на каждую) размещены на S3 бакете в папке с Вашим ID - 4 балла.
- Реализованы скрипты для загрузки Ваших данных из хранилища S3 и препроцессингу - 2 балла.
- В README.md Вашего проекта (шаблон - здесь) есть описание использования для скриптов - 2 балла.
ШТРАФ!!! ЗА .env и / или данные в папке data на гитхабе - минус 2 балла.
P.S. Файлы данных можно скачать отсюда 1, 2, 3
Решить проблему с перемешиванием данных в preprocess_data.py
Выделить логику валидации из файла train_model.py
в отдельный скрипт test_model.py
Добавить предсказание модели в predict_app.py
Добавить тест для сервиса с помощью библиотеки requests
Добавить аутентификацию по токену в predict_app.py
Создать виртуальную машину и подключиться по SSH.
Создание пары публичный-приватный ключ
ssh-keygen
Подключение по ssh к виртуальной машине
ssh user1@192.144.12.4
Запустить оболочку bash
bash
Обновить индексы пакетов системы и установить модуль venv
для pyton3
sudo apt update
sudo apt install python3-venv
Клонировать свой репозиторий:
git clone https://github.com/labintsev/pabd24
Открыть второе окно PowerShell в директории проекта pabd24
, там где есть файл .env
.
Копирование файла .env из локальный машины на сервер выполняется командой:
scp .\.env user1@192.144.12.4:/home/user1/pabd24
Дальше устанавливаем зависимости, скачиваем данные и обучаем модель по инструкции в Вашем README.
Не забудьте настроить группы безопасности для открытия портов 5000 и 8000!
Установка и запуск:
pip install gunicorn
gunicorn -b 0.0.0.0 -w 1 src.predict_app:app --daemon
Для исследований следует опустить флажок --daemon
, тогда можно легко остановить сервер нажатем Ctr-C
.
Остановить запущенный в фоне процесс можно командой
pkill gunicorn
- В Вашем README указан адрес, на котором запущен Ваш сервис предсказания цен, (gunicorn на порт 8000) - 4 балла.
- В папке docs краткое описание разницы в работе development и production (gunicorn) серверов - 4 балла.
Шаблон отчета - здесь.
Инициализация DVC и базовые операции - Get started
Гайд по credentials
В качестве endpointurl
в настройках dvc указать https://storage.yandexcloud.net
.
Подробнее здесь
Опционально: Настройка собственного S3 хранилища на cloud.ru
Настройка пайплайна по официальной инструкции. Их проект скачивать не нужно, stages добавлять командой
dvc stage add -n preprocess python src/preprocess_data.py
Всего четыре стадии:
- подготовка данных для обучения,
- подготовка данных для тестирования
- обучение модели
- тестирование модели
Подробнее см. в файле dvc.yaml.
Обучение лучшей модели - это поиск наиболее информативных признаков, архитектуры модели и гиперпараметров обучения. Каждый вариант с разными признаками или моделью должен быть в отдельной git-ветке. Как минимум еще один.
Ваша лучшая модель должна работать в gunicorn-сервисе на том адресе, который указан у Вас в README.
Тестирование сервиса будет происходить с помощью синхронных запросов, скрипт здесь.
В запросе будут все поля, что и в исходных csv-файлах.
Пример запроса:
{'author': 'Verges of estate', 'author_type': 'real_estate_agent', 'url': 'https://www.cian.ru/sale/flat/294966171/', 'location': 'Москва', 'deal_type': 'sale', 'accommodation_type': 'flat', 'floor': 4, 'floors_count': 30, 'rooms_count': 3, 'total_meters': 115.6, 'district': 'Южнопортовый', 'street': ' 1-я Машиностроения', 'house_number': '10', 'underground': 'Дубровка', 'residential_complex': 'Дубровская Слобода', 'url_id': 294966171, 'first_floor': False, 'last_floor': False, 'area': 115.6}
Метрика - средняя ошибка на 100 случайных объектах недвижимости.
Установка docker на ubuntu
Результат:
- Подключение dvc к проекту, настройка пайплайна и версионирование экспериментов - 4 балла
- Обучение лучшей модели и деплой на сервер - 4 балла
- Контейнеризация Docker и публикация образа на DockerHub - 4 балла.
Ваш образ должен использовать gunicorn и порт 8000.
В README.md Вашего git-репозитория должна содержаться инструкция по запуску приложения в docker, например:
Для запуска приложения используйте docker:
docker run ailabintsev/pabd24:latest
Для автоматического выполнения задачи (например, парсинга данных) целесообразно написать скрипт. В нашем случае это task - запуск парсинга Циан. Сделать скрипт исполняемым нужно с помощью команды
chmod +x tasks/task.sh
Проверьте возможность выплнения скрипта перед его добавлением в cron!
./tasks/task.sh
Для создания периодических заданий нужно редактировать таблицу cron с помощью команды:
crontab -e
Для выполнения скрипта task.sh
каждую минуту нужно добавить следующую строку:
* * * * * cd /home/user1/pabd24 && ./tasks/task.sh
Журнал событий сервиса cron можно посмотреть командой
sudo journalctl -u cron -f
Для более продвинутых заданий нужно использовать более мощный инструмент, например, airflow. Самый простой способ запуска - через docker