使用mlflow与sklearn记录模型时出现多个artifact路径问题
MLflow记录模型时出现双模型文件夹问题说明
复现场景
使用MLflow记录Logistic Regression的参数与artifact时,模型训练完成后在MLflow UI的工件列表中看到两个独立文件夹:一个为默认命名的model文件夹,另一个为手动设置路径的自定义模型文件夹。
复现代码如下:
model = LogisticRegression() mlflow.set_tracking_uri('file:///artifacts') mlflow.set_experiment('test') mlflow.autolog() with mlflow.start_run(run_name=run_name) as run: model.train(X_train, y_train) mlflow.sklearn.log_model(model, 'logreg')
注:scikit-learn的LogisticRegression模型训练接口为fit(),上述代码中的model.train()为笔误。
问题原因
出现双文件夹是自动日志和手动日志重复记录模型导致的:
- 开启
mlflow.autolog()后,scikit-learn框架的适配逻辑会在模型训练完成时,自动将训练好的模型以model为默认artifact路径完成记录,无需手动调用模型记录接口。 - 代码中额外手动调用
mlflow.sklearn.log_model(model, 'logreg'),指定logreg为自定义artifact路径再次记录模型,最终就会在UI中展示两个独立的模型存储文件夹。
解决方案
根据实际需求二选一即可:
- 不需要自定义模型存储路径:直接删除手动调用的
mlflow.sklearn.log_model()代码,依赖autolog完成全量记录即可,最终UI中仅会展示默认的model文件夹。
参考代码:model = LogisticRegression() mlflow.set_tracking_uri('file:///artifacts') mlflow.set_experiment('test') mlflow.autolog() with mlflow.start_run(run_name=run_name) as run: model.fit(X_train, y_train) - 需要使用自定义路径存储模型:在初始化autolog时关闭自动记录模型的开关,避免自动生成默认
model文件夹,仅保留手动记录的自定义路径模型。
参考代码:model = LogisticRegression() mlflow.set_tracking_uri('file:///artifacts') mlflow.set_experiment('test') # 关闭自动模型记录,仅自动记录参数、指标等内容 mlflow.autolog(log_models=False) with mlflow.start_run(run_name=run_name) as run: model.fit(X_train, y_train) mlflow.sklearn.log_model(model, 'logreg')
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

