# 🧪 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: перебор гиперпараметров ├── serve_model.py # Урок 8: REST API сервер └── grid_search_cv.py # Урок 9: GridSearchCV + autolog ``` --- ## 🚀 Быстрый старт ### 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:5555 ``` ### 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 — Model serving (REST API) python src/serve_model.py --port 5001 # → curl http://localhost:5001/predict_random # Урок 9 — GridSearchCV + autolog (parent/child runs) python src/grid_search_cv.py ``` ### 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 | 256–512 для 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 .` на другой машине