# 🧪 MLflow Practice — практический проект Проект для изучения MLflow на практике: от логирования экспериментов до Model Registry и загрузки моделей. Поддерживает **GPU (RTX 3090)** и CPU. --- ## 📁 Структура ``` mlflow-practice/ ├── requirements.txt # зависимости ├── start_ui.sh # запуск MLflow Tracking Server ├── README.md # этот файл ├── data/ # датасеты (MNIST скачается автоматически) ├── artifacts/ # графики, отчёты └── src/ ├── train_simple.py # Урок 1: scikit-learn + Tracking ├── train_gpu.py # Урок 2: PyTorch CNN на GPU (3090) ├── register_model.py # Урок 3: Model Registry ├── load_and_predict.py # Урок 4: загрузка и предсказание └── compare_runs.py # Урок 5: сравнение запусков ``` --- ## 🚀 Быстрый старт ### 1. Установка зависимостей ```bash cd mlflow-practice # Базовые зависимости (CPU — работает везде) pip install mlflow scikit-learn pandas numpy matplotlib # Для GPU-урока (RTX 3090) — установите PyTorch под вашу CUDA: pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 ``` ### 2. Запуск MLflow UI (в отдельном терминале) ```bash ./start_ui.sh # → откройте http://localhost:5000 ``` ### 3. Урок 1 — scikit-learn (быстрый, CPU) ```bash python src/train_simple.py --n-estimators 50 --max-depth 5 python src/train_simple.py --n-estimators 100 --max-depth 8 python src/train_simple.py --n-estimators 200 --max-depth 12 ``` Сравните результаты в UI → вкладка **Experiments → digits_classification**. ### 4. Урок 2 — PyTorch CNN на 3090 ```bash # На GPU — быстро (3090 справится за пару минут) python src/train_gpu.py --epochs 10 --batch-size 256 --lr 0.001 # На CPU — медленно, уменьшите эпохи python src/train_gpu.py --epochs 2 --batch-size 64 --lr 0.01 ``` В UI посмотрите графики `train_loss` и `test_accuracy` по эпохам. ### 5. Урок 3 — Model Registry ```bash python src/register_model.py --experiment digits_classification ``` В UI → вкладка **Models** появится модель `digits_rf_model` со стадией **Production**. ### 6. Урок 4 — Загрузка и предсказание ```bash python src/load_and_predict.py ``` ### 7. Урок 5 — Сравнение запусков ```bash python src/compare_runs.py --experiment digits_classification --top 10 ``` --- ## 🖥️ Специфика RTX 3090 | Параметр | Значение | |---|---| | VRAM | 24 GB GDDR6X | | CUDA cores | 10496 | | Рекомендуемый batch-size | 256–512 для MNIST | | CUDA версия | 12.1 (рекомендуется) | Код в `train_gpu.py` **автоматически** определяет CUDA: ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") ``` На 3090 обучение MNIST (10 epochs) займёт ~1-2 минуты. --- ## 💡 Эксперименты для самостоятельной работы 1. **Подбор гиперпараметров**: запустите `train_simple.py` с разными `--n-estimators` и `--max-depth`, сравните в UI 2. **Визуализация**: добавьте логирование ROC-кривой как артефакта 3. **Автолог**: попробуйте `mlflow.autolog()` вместо ручного логирования 4. **GPU эксперименты**: в `train_gpu.py` попробуйте разные `--lr` и `--batch-size`, сравните графики learning curves 5. **Model Registry**: обучите несколько версий, переведите лучшую в Production, остальные в Archived 6. **Serving**: попробуйте `mlflow models serve -m models:/digits_rf_model/Production -p 5001`