Уроки 6-9: autolog, hyperparam sweep, grid search, serving + MLproject, walkthrough
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user