Files
mlflow-practice/README.md
T

140 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧪 MLflow Practice — практический проект
Проект для изучения MLflow на практике: от логирования экспериментов
до Model Registry, Model Serving и воспроизводимых запусков.
Поддерживает **GPU (RTX 3090)** и CPU.
📖 **[CODE_WALKTHROUGH.md](CODE_WALKTHROUGH.md)** — подробный разбор каждого файла.
---
## 📁 Структура
```
mlflow-practice/
├── MLproject # Формат MLflow Projects (воспроизводимость)
├── python_env.yaml # Окружение для MLproject
├── requirements.txt # зависимости
├── setup_server.sh # установка на GPU-сервере
├── start_ui.sh # запуск MLflow Tracking Server
├── CODE_WALKTHROUGH.md # экскурс по коду
├── scripts/
│ └── setup_git.sh # настройка Git (HTTPS + токен)
└── src/
├── train_simple.py # Урок 1: sklearn + Tracking (ручное)
├── train_gpu.py # Урок 2: PyTorch CNN на GPU
├── register_model.py # Урок 3: Model Registry
├── load_and_predict.py # Урок 4: загрузка + предсказание
├── compare_runs.py # Урок 5: сравнение через API
├── autolog_demo.py # Урок 6: autolog (автоматическое)
├── hyperparam_sweep.py # Урок 7: перебор гиперпараметров
├── grid_search_cv.py # Урок 8: GridSearchCV + autolog
└── serve_model.py # Урок 9: REST API сервер
```
---
## 🚀 Быстрый старт
### 1. Установка
```bash
# На GPU-сервере:
bash setup_server.sh
source .venv/bin/activate
# PyTorch под CUDA:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
pip install flask # для serve_model.py
```
### 2. Запуск MLflow UI
```bash
./start_ui.sh
# → http://10.0.0.7:5000
```
### 3. Уроки по порядку
```bash
# Урок 1 — scikit-learn (CPU, ~5 сек)
python src/train_simple.py --n-estimators 100 --max-depth 8
python src/train_simple.py --n-estimators 200 --max-depth 12
python src/train_simple.py --n-estimators 50 --max-depth 5
# Урок 2 — PyTorch CNN на 3090 (~1-2 мин)
python src/train_gpu.py --epochs 10 --batch-size 256 --lr 0.001
# Урок 3 — Регистрация лучшей модели
python src/register_model.py --experiment digits_classification
# Урок 4 — Загрузка и предсказание
python src/load_and_predict.py
# Урок 5 — Сравнение запусков
python src/compare_runs.py --experiment digits_classification --top 10
# Урок 6 — Autolog (автоматическое логирование)
python src/autolog_demo.py
# Урок 7 — Hyperparameter sweep (20 комбинаций)
python src/hyperparam_sweep.py --max-combos 20
# Урок 8 — GridSearchCV + autolog (parent/child runs)
python src/grid_search_cv.py
# Урок 9 — Model serving (REST API)
python src/serve_model.py --port 5001
# → curl http://localhost:5001/predict_random
```
### 4. MLflow Projects (воспроизводимый запуск)
```bash
# Запуск через MLproject — MLflow сам создаст окружение
mlflow run . -P n_estimators=200 -P max_depth=12
mlflow run . -e gpu -P epochs=10 -P batch_size=256 -P lr=0.001
mlflow run . -e sweep -P max_combos=30
```
---
## 📚 Что изучает каждый урок
| Урок | Концепция MLflow | На чём |
|---|---|---|
| 1 | **Tracking**: params, metrics, artifacts, tags | RandomForest (digits) |
| 2 | **Tracking + GPU**: логирование по эпохам, learning curves | PyTorch CNN (MNIST) на 3090 |
| 3 | **Model Registry**: версии, стадии Staging→Production | лучшая модель из Урока 1 |
| 4 | **Model Loading**: models:/name/stage | предсказание |
| 5 | **API**: search_runs, order_by | сортировка по accuracy |
| 6 | **Autolog**: одна строка вместо ручного логирования | GradientBoosting (wine) |
| 7 | **Hyperparameter sweep**: itertools + random search | 20+ комбинаций RandomForest |
| 8 | **GridSearchCV + autolog**: parent/child runs | 18 комбинаций × 5 фолдов |
| 9 | **Model serving**: Flask REST API | REST эндпоинты для модели |
---
## 🖥️ RTX 3090
| Параметр | Значение |
|---|---|
| VRAM | 24 GB GDDR6X |
| Рекомендуемый batch-size | 256512 для MNIST |
| CUDA | 12.1 |
| MNIST 10 epochs | ~1-2 минуты |
Код GPU-aware — автоматически выбирает CUDA если доступна.
---
## 💡 Эксперименты для самостоятельной работы
1. **Подбор гиперпараметров** — запустите sweep с `--max-combos 50`
2. **Сравнение моделей** — обучите RandomForest vs GradientBoosting vs SVM
3. **Autolog vs ручное** — запустите один датасет с autolog и без, сравните
4. **Model Registry** — обучите несколько версий, переведите лучшую в Production
5. **Serving** — поднимите REST API, отправьте запрос через curl
6. **MLproject** — запустите через `mlflow run .` на другой машине