MLflow и DVC на собеседовании Data Scientist
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем разбирать на собесе
Reproducibility — ключевая проблема ML в проде. На собесе DS / MLE: «как ты трекаешь эксперименты», «зачем DVC», «как версионируешь модели». Senior — детали model registry, deployment hooks.
Проблема воспроизводимости в ML
ML-модель = код + данные + гиперпараметры + случайность.
Изменить любое — другой результат.
- Изменили версию train data — не воспроизведём.
- Не зафиксировали seed — не воспроизведём.
- Не сохранили hyperparameters — не воспроизведём.
Без infrastructure — каждый эксперимент в Jupyter превращается в «кажется, я получил 0.85, не помню как».
MLflow: 4 компонента
1. Tracking. Логирование experiments.
import mlflow
with mlflow.start_run():
mlflow.log_param("learning_rate", 0.01)
mlflow.log_metric("auc", 0.92)
mlflow.log_metric("loss", 0.21)
mlflow.log_artifact("plots/confusion_matrix.png")
mlflow.sklearn.log_model(model, "model")UI: список runs с метриками, параметрами, артефактами. Сравнение runs.
2. Projects. Стандартизированная структура для запуска.
# MLproject
name: my_model
conda_env: conda.yaml
entry_points:
main:
parameters:
lr: float
epochs: int
command: "python train.py {lr} {epochs}"mlflow run . -P lr=0.01 -P epochs=10
3. Models. Стандартный формат сохранения моделей.
mlflow.sklearn.save_model(model, "path")
mlflow.pytorch.save_model(model, "path")
mlflow.tensorflow.save_model(model, "path")Один формат — разные frameworks. Можно загружать через mlflow.pyfunc.load_model() без знания, какой framework.
4. Model Registry. Versioned model store.
mlflow.register_model("runs:/<run_id>/model", "MyModel")
client.transition_model_version_stage(
name="MyModel", version=3, stage="Production"
)Stages: None, Staging, Production, Archived. Хорошо для CI/CD.
DVC: data versioning
Идея. Git хорош для кода, плох для гигабайт. DVC — git-like для данных.
dvc init
dvc add data/train.csv # добавляет в DVC tracking
git add data/train.csv.dvc # версионируем pointer в git
git commit -m "v1 of training data"
dvc push # данные идут в remote (S3, GCS, etc.)Что DVC версионирует:
- Большие data files (CSV, Parquet, images).
- Promiseed артефакты (preprocessed datasets).
- Trained models.
Pipelines. DVC поддерживает stages и DAG.
# dvc.yaml
stages:
preprocess:
cmd: python preprocess.py
deps:
- data/raw.csv
- preprocess.py
outs:
- data/processed.parquet
train:
cmd: python train.py
deps:
- data/processed.parquet
- train.py
params:
- lr
- epochs
outs:
- models/model.pkl
metrics:
- metrics.jsondvc repro — reruns только тех stages, чьи deps изменились.
Хранилище. DVC remote — S3, GCS, Azure, SSH, локальный диск.
MLflow vs DVC
| MLflow | DVC | |
|---|---|---|
| Главная фишка | Experiment tracking + model registry | Data + pipeline versioning |
| Хранит данные | Артефакты в S3 | Большие данные в S3 / GCS |
| Pipeline | Через Projects |
Через dvc.yaml (DAG) |
| Git integration | Слабее | Native (через .dvc files) |
| Model registry | Yes | Нет |
| Подходит для | DS-исследования, ML deployment | Data versioning, reproducible pipelines |
Часто используются вместе:
- DVC — версии данных и pipelines.
- MLflow — tracking experiments и model registry.
Альтернативы
- Weights & Biases (wandb) — облачный tracking с красивым UI, dashboards, sweeps.
- Neptune.ai — похоже на wandb, гибче по metadata.
- ClearML — open-source, full-featured.
- Tensorboard — простой tracking, особенно для DL.
- Sacred — старый Python tool для трекинга.
- Pachyderm — data versioning + pipelines, k8s-native.
- Kedro — pipelines от QuantumBlack (lighter than DVC).
- Hydra — config management для ML.
В РФ: MLflow популярен (open source, on-prem-friendly), wandb используется реже из-за облака.
Частые ошибки
Не логировать random seed. Эксперимент невоспроизводим. mlflow.log_param("seed", 42).
Логировать model как pickle вместо mlflow.sklearn. Теряешь metadata, signature, conda env.
Хранить датасеты в git. 100МБ → распухший репо. DVC решает.
Manual git commit'ы для experiments. Каждый run — git commit? Не нужно, MLflow делает это сам через run_id.
Не разделять staging / production в model registry. Деплоится «текущая лучшая» — рискованно. Stages обязательны.
mlflow ui локально без backend. В command — local file storage. Для команды — central tracking server (Postgres + S3).
Игнорировать mlflow.signature. Без signature inference loaded модели могут получать неверный shape.
Связанные темы
- MLOps на собесе DS
- Hyperparameter tuning на собесе DS
- Cross-validation на собесе DS
- Bias-variance trade-off на собесе DS
- Подготовка к собесу Data Scientist
FAQ
MLflow подходит для small team?
Да. Local file backend для одиночки, Postgres + S3 — для команды до 10. Дальше — managed (Databricks managed MLflow).
DVC заменяет git?
Нет, дополняет. Git для кода и pointers, DVC для данных.
Что такое model signature?
Метаданные о входе / выходе модели (shapes, dtypes). MLflow умеет infer'ить из примера.
Это официальная информация?
Нет. Статья основана на документации MLflow 2.x, DVC 3.x.
Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.