MLflow и DVC на собеседовании Data Scientist

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — 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.json

dvc repro — reruns только тех stages, чьи deps изменились.

Хранилище. DVC remote — S3, GCS, Azure, SSH, локальный диск.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

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.

Связанные темы

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+ вопросами для собесов.