其他
需要端到端管理 ML 生命周期时,用 MLflow…
适用于从实验到生产的 ML 项目,需要系统记录实验、版本化模型、部署服务并持续监控和迭代。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
需要端到端管理 ML 生命周期时,用 M特定
解决思路
- 设置 MLflow Tracking URI:调用 mlflow.set_tracking_uri 指向 http://localhost:5000。
- 创建或设置实验:调用 mlflow.set_experiment 设置 production-models。
- 启动 run 并记录基础信息:在 with mlflow.start_run(run_name=baseline-model) 中记录参数 learning_rate=0.01、batch_size=32,指标 accuracy=0.95、loss=0.05,以及 artifact model_plot.png。
- 用 MLflow Projects 打包代码:编写 MLproject,指定 name、conda_env 和 entry_points;main 入口参数 learning_rate 默认 0.01、epochs 默认 100,命令为 python train.py --lr {learning_rate} --epochs {epochs};evaluate 入口参数 model_uri,命令为 python evaluate.py --model-uri {model_uri}。
- 用 MLflow Models 标准化打包模型:训练 RandomForestClassifier,用 infer_signature 生成签名,调用 mlflow.sklearn.log_model 记录 sk_model、name=random-forest-model、signature、input_example 和 registered_model_name=ProductionClassifier。
- 用 MLflow Registry 注册模型:使用 MlflowClient,构造 model_uri=f'runs:/{run_id}/model',调用 mlflow.register_model 注册 CustomerChurnModel,并用 client.set_registered_model_alias 设置 alias=production、version。
- 基本实验跟踪:配置 tracking URI 和实验 house-price-prediction;用 train_test_split 划分数据;在 run rf-baseline 中定义 params n_estimators=100、max_depth=10、min_samples_split=5、random_state=42;训练 RandomForestRegressor;计算 mse、r2、rmse;调用 mlflow.log_params、mlflow.log_metrics、mlflow.sklearn.log_model 并设置 registered_model_name=HousePricePredictor。
- 自动记录:对 scikit-learn 调用 mlflow.sklearn.autolog(),然后在 with mlflow.start_run() 中正常训练 RandomForestClassifier,训练和预测过程会自动记录。
- 超参数调优嵌套运行:设置实验 hyperparameter-tuning;创建父 run grid-search-parent;记录 tuning_method=grid_search、cv_folds=5;遍历 learning_rate [0.01,0.1,0.3]、n_estimators [50,100,200]、max_depth [3,5,7];每个组合使用 with mlflow.start_run(nested=True, run_name=f'lr{lr}_n{n_est}_d{depth}');训练 GradientBoostingClassifier;记录 params 和 accuracy;跟踪 best_score、best_params;在父 run 记录 best_* 和 best_accuracy。
- 按时间步记录多个指标:在 run 中循环 epoch 0 到 99,用 mlflow.log_metric 记录 train_loss、val_loss、learning_rate,并传入 step=epoch。
- 记录 artifacts:保存 loss_curve.png 后用 mlflow.log_artifact 记录;将 feature_importance DataFrame 保存为 feature_importance.csv 后记录;用 mlflow.log_artifacts('output_dir/', artifact_path='outputs') 记录整个目录。
- 注册模型方式一:在 mlflow.start_run 中调用 mlflow.sklearn.log_model,传入 registered_model_name=CustomerSegmentationModel。
- 注册模型方式二:用 run_id 构造 model_uri,调用 mlflow.register_model 注册 CustomerSegmentationModel。
- 模型版本与别名:用 MlflowClient 创建 registered model FraudDetectionModel;用 create_model_version 创建 version;用 set_registered_model_alias 设置 champion=1、challenger=2;用 mlflow.sklearn.load_model 从 models:/FraudDetectionModel@champion 和 models:/FraudDetectionModel@challenger 加载。
- 模型生命周期:调用 mlflow.initialize_logged_model 创建 PENDING 状态模型,指定 name、model_type、tags;训练验证后调用 mlflow.pytorch.log_model 并传 model_id;成功时调用 mlflow.finalize_logged_model 标记 READY,异常时标记 FAILED 并 raise。
- 模型元数据与标签:用 client.set_registered_model_tag 设置任务和业务单元标签;用 client.set_model_version_tag 设置 validation_status=approved、approval_date=2024-01-15;用 client.update_registered_model 更新模型描述。
- 搜索与过滤模型:调用 client.search_registered_models,filter_string 为 name LIKE 'Production%',max_results=10;调用 client.search_model_versions,filter_string 为 name='CustomerChurnModel' AND tags.validation_status='approved';调用 client.get_model_version;调用 client.get_model_version_by_alias 获取 champion。
- 本地模型服务:用 mlflow.pyfunc.load_model 加载 models:/CustomerChurnModel@production,然后调用 model.predict(data)。
- REST API 部署:运行 mlflow models serve --model-uri models:/CustomerChurnModel@production --host 0.0.0.0 --port 5001 --workers 4;客户端 POST 到 http://localhost:5001/invocations,Content-Type 为 application/json,body 使用 dataframe_split 包含 columns 和 data,解析 response.json()。
- Docker 部署:运行 mlflow models build-docker --model-uri models:/CustomerChurnModel@production --name customer-churn-model;再运行 docker run -p 8080:8080 customer-churn-model。
- AWS SageMaker 部署:调用 mlflow.sagemaker.deploy,参数 app_name=customer-churn-predictor、model_uri=models:/CustomerChurnModel@production、region_name=us-east-1、mode=create、execution_role_arn=arn:aws:iam::123456789:role/SageMakerRole、instance_type=ml.m5.xlarge、instance_count=2。
- Azure ML 部署:用 Workspace.from_config() 配置工作区;用 AciWebservice.deploy_configuration 配置 cpu_cores=2、memory_gb=4、tags、description;调用 mlflow.azureml.deploy,参数 model_uri、workspace、deployment_config、service_name=churn-predictor-service。
- GCP Vertex AI 部署:调用 aiplatform.init(project=my-project, location=us-central1);用 mlflow.register_model 注册 CustomerChurnModel;用 aiplatform.Endpoint.create(display_name=churn-prediction-endpoint);调用 endpoint.deploy,参数 deployed_model_display_name=churn-v1、machine_type=n1-standard-4、min_replica_count=1、max_replica_count=5。
- 批量推理:用 mlflow.pyfunc.load_model 加载模型;用 pd.read_csv 读取 customer_batch.csv;按 chunk_size=1000 分块调用 model.predict;结果 DataFrame 包含 customer_id 和 churn_probability,保存为 churn_predictions.csv。
- 模型性能监控:创建 ModelMonitor 类,初始化 model_name 和 tracking_uri,设置实验 {model_name}-monitoring;log_prediction_metrics 在 run 中记录 accuracy、precision、recall,记录 timestamp、num_predictions;若 accuracy<0.85 设置 tag alert=performance_degradation。
- 数据漂移监控:log_data_drift 在 run data-drift-check 中执行;对 reference_data 每列计算 ref_mean、curr_mean、drift_percent=abs((curr_mean-ref_mean)/ref_mean)*100;记录 {col}_drift_percent;若 drift_percent>20 设置 tag {col}_drift_alert=high。
- 预测日志:log_predictions 设置实验 {model_name}-predictions;在 run prediction-{timestamp} 中记录 num_predictions、model_name、metadata;将 inputs 和 predictions 前 5 条保存为 prediction_sample.json 并调用 mlflow.log_artifact。
- 模型可解释性跟踪:log_model_explanations 在 run 中用 shap.TreeExplainer 计算 SHAP 值;生成 shap.summary.png 并调用 mlflow.log_artifact;将 feature_importances_ 写为 importance_{k} 参数。
- A/B 测试框架:ABTestFramework 加载 model_a_uri 和 model_b_uri,设置 traffic_split=0.5,实验 ab-testing;predict 中根据 user_id hash % 100 < traffic_split*100 选择 model_a 或 model_b,记录 model_variant、user_id、prediction;evaluate_test 计算 mean/std/count,用 scipy.stats.ttest_ind 得到 t_stat、p_value 并记录;若 p_value<0.05 设置 winner 和 significant=yes。
- 多臂老虎机测试:MultiArmedBandit 加载多个 model_uris,初始化 successes 和 failures 先验为 1,实验 mab-testing;select_model 用 Thompson sampling 从 np.random.beta(s,f) 取 argmax;predict_and_update 记录 selected_model、prediction;根据 actual_outcome 更新 successes/failures 并记录 success_rate。
- 特征存储集成:FeatureStore 初始化 storage_path,设置实验 feature-store;create_feature_set 在 run feature-set-{name} 中将 df 保存为 {storage_path}/{name}_{timestamp}.parquet,记录 feature_set_name、num_features、num_samples、description;用 mlflow.log_dict 记录 feature_stats.json;用 mlflow.log_artifact 记录特征文件;get_features 用 MlflowClient.get_run 获取 artifact_uri,用 mlflow.artifacts.download_artifacts 下载后 pd.read_parquet。
- 特征工程流水线:feature_engineering_pipeline 在 run feature-engineering 中记录 original_features;用 StandardScaler fit_transform 并调用 mlflow.sklearn.log_model 记录 scaler;用 PCA(n_components=0.95) fit_transform 并记录 pca;记录 final_features 和 variance_explained。
- 训练流水线:training_pipeline 设置实验 production-training-pipeline;在 run pipeline-run 中读取 CSV,拆分 X 和 y;记录 data_version、data_samples;训练 RandomForestClassifier;用 cross_val_score(cv=5) 得到 cv_score_mean 和 cv_score_std;若 mean_cv_score>=validation_threshold,则 mlflow.sklearn.log_model 注册 ProductionModel 并设置 status=passed,否则设置 status=failed、failure_reason=below_threshold。
- 模型晋级流水线:promote_model_to_production 检查 validation_results 包含 accuracy、precision、recall 且每个 >=0.8;用 client.set_model_version_tag 写入 validation_{metric};用 client.set_registered_model_alias 设置 alias=production;设置 promoted_at 标签。
- 自动重训练:AutomatedRetrainer 初始化 model_name、data_source、schedule_interval,设置实验 {model_name}-retraining;retrain 在 run 中加载最新数据,用 get_model_version_by_alias 获取 production 模型,加载并计算 current_score;训练新模型并计算 new_score;若 new_score>current_score,则 mlflow.sklearn.log_model 注册模型并设置 status=promoted,否则设置 status=not_promoted;start_scheduled_retraining 用 schedule.every().day.at('02:00') 或 schedule.every().monday.at('02:00'),循环 run_pending 并 sleep(3600)。
- 模型签名:用 infer_signature(X_train, model.predict(X_train)) 推断签名,或用 Schema 与 ColSpec 显式定义输入 age double、income double、customer_segment string,输出 double,构造 ModelSignature(inputs, outputs);log_model 时传入 signature 和 input_example=X_train[:5]。
- 模型验证框架:ModelValidator 初始化 thresholds;validate 在 run model-validation 中调用 predict,生成 classification_report(output_dict=True);对 thresholds 中每个 metric 取 report['weighted avg'][metric] 并 log_metric;若低于阈值则 passed=False,设置 {metric}_failed=true;将完整 report 写入 validation_report.json 并 log_artifact;设置 validation_passed=passed。
- 错误处理与日志:mlflow_error_handler 装饰器在 run 中执行函数;成功时设置 status=success;异常时设置 status=failed、error_type、error_message,将 traceback 写入 error_traceback.txt 并 log_artifact,logging.error 后 raise。
- 建立基线:establish_baseline 设置实验 baseline-models;对 DummyClassifier 的 most_frequent、stratified、uniform 策略分别创建 run baseline-{strategy};记录 strategy 和 accuracy;用 mlflow.sklearn.log_model 注册 Baseline-{strategy}。
适用边界 · 注意事项
- 如果团队未部署、未获准使用或无法维护 MLflow Tracking Server/Model Registry,则不应直接套用该完整流程。
- 如果只是一次性脚本、临时实验且没有生产部署、监控或版本治理需求,完整 MLOps 流程过重。
- 如果已经深度绑定其他 MLOps/模型注册平台且不打算与 MLflow 桥接,部分实验跟踪、注册和部署做法不适用。