Уроки 6-9: autolog, hyperparam sweep, grid search, serving + MLproject, walkthrough

This commit is contained in:
2026-07-20 15:01:31 +03:00
parent 2c07fd63c0
commit d6a4b46db0
14 changed files with 1248 additions and 95 deletions
+78
View File
@@ -0,0 +1,78 @@
"""
Урок 6: MLflow Autolog — автоматическое логирование
====================================================
Вместо ручного log_param/log_metric можно вызвать mlflow.autolog()
ОДИН раз — и MLflow сам залогирует всё: параметры, метрики, модель,
признаки, даже feature importance.
Сравните с train_simple.py — там всё логировалось вручную.
Запуск:
python src/autolog_demo.py
"""
from sklearn.datasets import load_wine
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import mlflow
import mlflow.sklearn
def main():
# ─── КЛЮЧЕВАЯ СТРОКА ──────────────────────────────────────
# autolog() включает автоматическое логирование для sklearn.
# Доступно для: sklearn, pytorch, tensorflow, xgboost, lightgbm,
# keras, fastai, spark, autogluon, statsmodels
mlflow.sklearn.autolog(
log_input_examples=False, # не логировать примеры входа
log_model_signatures=False, # не строить сигнатуру модели
log_models=True, # сохранить модель автоматически
log_datasets=True, # залогировать датасет
max_tuning_runs=10, # лимит для GridSearch
log_post_training_metrics=True,
)
# ─────────────────────────────────────────────────────────
mlflow.set_experiment("autolog_wine")
# Датасет wine — классификация вин по 3 сортам
wine = load_wine()
X, y = wine.data, wine.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
print(f"📊 Датасет wine: {X.shape[0]} образцов, {X.shape[1]} признаков, 3 класса")
# autolog начинает работать автоматически внутри start_run
with mlflow.start_run(run_name="gb_autolog") as run:
print(f"MLflow run ID: {run.info.run_id}")
# Просто обучаем модель — НИКАКИХ log_param/log_metric!
model = GradientBoostingClassifier(
n_estimators=100,
learning_rate=0.1,
max_depth=3,
random_state=42,
)
model.fit(X_train, y_train)
# Можно добавить и ручные метрики — они дополнят автолог
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
mlflow.log_metric("manual_accuracy", acc)
print(f"\n✅ Готово! Откройте MLflow UI:")
print(f" Эксперимент: autolog_wine")
print(f" Run: {run.info.run_id}")
print(f" Accuracy: {acc:.4f}")
print(f"\n🔍 Что autolog залогировал автоматически:")
print(f" • Параметры: n_estimators, learning_rate, max_depth, ...")
print(f" • Метрики: training_accuracy, training_log_loss, ...")
print(f" • Модель: сохранена в artifacts/model/")
print(f" • Датасет: профиль в artifacts/")
print(f" • Ручная метрика: manual_accuracy")
if __name__ == "__main__":
main()