MarkTechPost опубликовал практический туториал, который проводит читателя через весь цикл работы с ML-моделью в MLflow — от запуска собственного сервера трекинга до превращения обученной модели в работающий REST-сервис. Автор — Michal Sutter. Весь код выполняется в облачном блокноте (Colab), а результат — воспроизводимый пайплайн, где каждый запуск обучения зафиксирован, сравним с другими и доступен для аудита.
Подготовка окружения
Сначала устанавливаются MLflow версии не ниже 3.0.0 и стандартный ML-стек:
!pip -q install "mlflow>=3.0.0" scikit-learn pandas numpy matplotlib requests
Дальше идёт импорт MLflow, scikit-learn и системных библиотек, а также набор вспомогательных функций: проверка занятости порта, ожидание готовности HTTP-сервера и безопасное завершение фоновых процессов. Эта инфраструктура нужна, чтобы сервер трекинга и сервис инференса надёжно поднимались и останавливались прямо внутри блокнота.
Свой сервер трекинга MLflow
Для хранения экспериментов автор разворачивает выделенный MLflow Tracking Server с бэкендом на SQLite и локальным хранилищем артефактов:
BASE_DIR = Path("/content/mlflow_colab_demo").resolve()
BACKEND_DB = BASE_DIR / "mlflow.db"
ARTIFACT_ROOT = BASE_DIR / "mlartifacts"
HOST = "127.0.0.1"
PORT = 5000
TRACKING_URI = f"http://{HOST}:{PORT}"
server_cmd = [
"mlflow", "server",
"--host", HOST,
"--port", str(PORT),
"--backend-store-uri", f"sqlite:///{BACKEND_DB}",
"--default-artifact-root", str(ARTIFACT_ROOT),
]
Если порт 5000 занят, скрипт автоматически перебирает диапазон 5001–5014 и подбирает свободный. После запуска сервера блокнот подключается к нему через mlflow.set_tracking_uri(TRACKING_URI) и создаёт эксперимент colab-advanced-mlflow-sklearn, в котором будут собираться все последующие запуски.
Данные и автологирование
В качестве датасета используется встроенный в scikit-learn набор load_breast_cancer. Включается автоматическое логирование:
mlflow.sklearn.autolog(
log_input_examples=False,
log_model_signatures=False,
silent=True
)
Это избавляет от ручной фиксации параметров и метрик — MLflow сам записывает всё, что происходит при обучении модели.
Вложенный перебор гиперпараметров
Дальше идёт сетка гиперпараметров для логистической регрессии:
C_VALUES = [0.01, 0.1, 1.0, 3.0]
SOLVERS = ["liblinear", "lbfgs"]
Все запуски организованы иерархически: один родительский run parent_sweep_run, внутри которого для каждой комбинации C и solver стартует дочерний вложенный run вида child_C={C}_solver={solver}. В каждом дочернем запуске обучается пайплайн StandardScaler + LogisticRegression (penalty="l2", max_iter=2000, random_state=42), после чего считаются и логируются метрики test_auc, test_accuracy, test_precision, test_recall и test_f1. Дополнительно для каждой комбинации строится матрица ошибок (confusion matrix), сохраняется как PNG и прикрепляется к запуску в виде диагностического артефакта. По итогам перебора конфигурация с лучшим AUC фиксируется в словаре best, а сводка по лучшему запуску сохраняется отдельным JSON-файлом best_run_summary.json.
Финальная модель и оценка
На основе лучших параметров обучается финальная модель — тот же пайплайн StandardScaler + LogisticRegression, но уже с зафиксированными C и solver. Модель логируется вместе с сигнатурой (infer_signature) и примером входных данных через mlflow.sklearn.log_model. Затем в дело вступает встроенный фреймворк оценки:
eval_result = mlflow.models.evaluate(
model=model_info.model_uri,
data=eval_df,
targets="label",
model_type="classifier",
evaluators="default",
)
Результаты оценки — метрики и артефакты — сохраняются в MLflow как evaluation/eval_summary.json, так что итоговая модель оказывается полностью задокументирована и воспроизводима.
Развёртывание модели как REST API
Финальный шаг — превращение обученной модели в живой сервис. MLflow поднимает отдельный процесс на порту 6000 (с автоматическим перебором диапазона 6001–6019, если порт занят) командой:
mlflow models serve -m <MODEL_URI> -p <SERVE_PORT> --host 127.0.0.1 --env-manager local
После того как сервер отвечает по HTTP, в блокноте отправляется тестовый POST-запрос на /invocations с данными в формате dataframe_split (список колонок и значений из тестовой выборки), и сервис возвращает предсказания в реальном времени — на нескольких примерах из тестовых данных.
Итог
Туториал демонстрирует полный жизненный цикл модели внутри MLflow: трекинг экспериментов, вложенный перебор гиперпараметров, логирование диагностических артефактов, встроенную оценку качества и, наконец, деплой в виде REST-сервиса — всё в одном облачном блокноте, без выхода за пределы одной среды. Для команд, которые хотят построить воспроизводимый и прослеживаемый ML-пайплайн без сборки отдельной инфраструктуры, это готовый рабочий шаблон.
Источник: MarkTechPost.