init
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# 🧪 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`
|
||||
Reference in New Issue
Block a user