MLflow训练完成后未记录或展示模型工件问题求助
问题排查与解决方案
1. 核心问题:日志操作不在MLflow Run上下文范围内
你的代码中,mlflow.log_metric、mlflow.sklearn.log_model等操作写在了with mlflow.start_run()代码块之外。MLflow的Run上下文结束后,后续的日志调用不会关联到已结束的Run,导致工件无法被正确记录到对应的实验运行中。
修正后的代码需将所有日志操作放入Run上下文内:
import mlflow import pickle from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score mlflow.set_tracking_uri("https://dagshub.com/<username>/<repo>.mlflow") mlflow.set_experiment("default") # 所有日志操作必须在with块内部 with mlflow.start_run(): model = RandomForestClassifier(n_estimators=200, 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("accuracy", acc) # 二选一即可 mlflow.sklearn.log_model(model, "model") # pickle.dump(model, open("model.pkl", "wb")) # mlflow.log_artifact("model.pkl")
2. 版本兼容性问题
Python 3.12 和 scikit-learn 1.5 都是较新的版本,旧版MLflow可能存在兼容性问题:
- MLflow从2.8.0版本开始正式支持Python 3.12,更早版本会导致工件保存/上传失败
- scikit-learn 1.5 需要MLflow 2.10.0及以上版本的sklearn集成支持
执行以下命令升级MLflow到最新稳定版:
pip install --upgrade mlflow
3. DagsHub追踪URI格式错误
你提供的URI中包含多余的转义反斜杠\\\<username\>,正确格式应为:
mlflow.set_tracking_uri("https://dagshub.com/<username>/<repo>.mlflow")
错误的URI解析可能导致MLflow能记录指标,但无法正确上传工件到DagsHub存储服务。
4. 缺少DagsHub认证配置
虽然指标可以被记录,但工件上传需要有效的DagsHub认证。请确保已配置以下环境变量:
export DAGSHUB_USERNAME="<你的DagsHub用户名>" export DAGSHUB_TOKEN="<你的DagsHub访问令牌>"
或者在代码中添加认证步骤:
mlflow.login()
(执行后会引导你完成DagsHub的认证流程)
5. 调试方法:开启MLflow日志排查细节
如果以上方法都无效,开启MLflow的调试日志,查看工件上传时的具体错误:
import logging logging.basicConfig(level=logging.DEBUG)
运行代码后,查看控制台输出,重点关注与artifact上传相关的日志信息,比如权限错误、网络问题等。
内容的提问来源于stack exchange,提问作者shahar cohen
相关产品推荐
相关产品推荐

