Hotdry.
ai-engineering

将ML-For-Beginners的26个Jupyter笔记本转化为MLflow跟踪管道:集成自动评分、容器API与CI/CD

工程化微软经典ML课程的sklearn笔记本,使用MLflow实现实验跟踪、模型注册,支持quiz自动评分、Docker API部署和GitHub Actions CI/CD。

将微软开源的 ML-For-Beginners 课程中的 26 个经典机器学习 Jupyter 笔记本工程化为生产级管道,是团队规模化训练的关键步骤。该课程覆盖回归、分类、聚类、NLP、时间序列和强化学习等主题,使用 Scikit-learn 实现项目导向学习,每课配有 52 个自动评分 quiz。这种从探索性 notebook 到可复现管道的转型,能显著提升实验追踪、模型管理和部署效率,避免 “作品在本地跑通、生产崩溃” 的常见问题。

核心观点在于:单一技术栈 sklearn 结合 MLflow,能将 notebook 重构为参数化脚本,实现断线续传式跟踪。证据显示,MLflow 的 autolog () 无缝集成 sklearn 模型训练,自动记录超参数如 n_estimators、max_depth,指标如 MSE/RMSE,以及模型 artifact。“MLflow is an open-source platform to manage the ML lifecycle, including experimentation, reproducibility, deployment, and a central model registry。” 通过 start_run () 包裹训练循环,多轮实验对比直观,支持团队协作共享 runs。

落地参数与清单如下:

1. Notebook 重构为 MLflow Pipeline 脚本

  • 提取核心函数:data_load (), preprocess (), train_model (params), evaluate_model (), log_results ()。
  • 参数化入口:使用 argparse 或 MLproject YAML 定义,如 alpha=0.5, l1_ratio=0.5(ElasticNet 示例)。
  • 集成 autolog:mlflow.sklearn.autolog (log_models=True),自动 log 模型。
  • 示例脚本(train.py):
import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--n_estimators', type=int, default=100)
parser.add_argument('--max_depth', type=int, default=6)
args = parser.parse_args()

mlflow.sklearn.autolog()
db = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(db.data, db.target)
rf = RandomForestRegressor(n_estimators=args.n_estimators, max_depth=args.max_depth)
rf.fit(X_train, y_train)
  • 运行:mlflow run . -P n_estimators=200,实现参数扫瞄。

2. 集成自动评分 Quiz

  • 课程原 quiz-app(Netlify 托管)可 fork 为 MLflow artifact:log_quiz_results () 记录 quiz 准确率。
  • 参数阈值:quiz_pass_threshold=0.8,低于阈值 fail pipeline。
  • 清单:
    步骤 参数 监控点
    Pre-quiz n/a baseline_score
    Train learning_rate=0.01 train_accuracy>0.85
    Post-quiz model_uri quiz_accuracy>0.9
  • CI/CD 中:pytest 运行 quiz,mlflow.log_metric ('quiz_score', score)。

3. 容器化 API 部署

  • MLflow Models:mlflow models build-docker -m runs:/<run_id>/model -n ml-pumpkin-api。
  • FastAPI wrapper(sklearn 兼容):
from fastapi import FastAPI
import mlflow.sklearn
model = mlflow.sklearn.load_model("models:/<model_name>/latest")
app = FastAPI()
@app.post("/predict")
def predict(data: list):
    return {"prediction": model.predict(data).tolist()}
  • Dockerfile 参数:EXPOSE 8080, CMD ["mlflow", "models", "serve", "-m", "models:/model/prod", "-p", "8080"]。
  • 阈值:response_time<200ms, throughput>100qps。

4. CI/CD with GitHub Actions

  • .github/workflows/mlflow-pipeline.yml:
name: ML Pipeline
on: [push]
jobs:
  train:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: conda-incubator/setup-miniconda@v2
    - run: mlflow run . -P alpha=0.3
    - name: Register if best
      if: success()
      run: mlflow register-model runs:/${{ github.run_id }}/model pumpkin-prod
  • 回滚策略:alias 'prod' to previous version if metrics degrade>10%。

监控与风险阈值

  • MLflow UI 监控:MSE<3000(糖尿病数据集基准),drift 检测 precision>0.95。
  • 风险:Overfitting 阈值 validation_score/train_score<0.9,触发 early_stop。
  • 清单监控点:
    风险 阈值 缓解
    Data drift KS>0.1 Retrain alert
    Model staleness age>7d Auto-retrain
    Quiz fail score<80% Rollback

通过以上工程化,26 个 lessons 如南瓜价格回归(2-Regression)可复现为 pipelines,支持团队并行调参。最终,fork repo,替换 lesson data/train code,mlflow run 一键启动,实现从课程到生产的闭环。

资料来源

查看归档