必须显式配置后端存储,否则mlflow.register_model()报InvalidInputError;默认mlruns/不支持注册表,需用SQLite(开发)或PostgreSQL/MySQL(生产);log_model存快照,register_model才创建可版本化、可设stage的注册模型。

必须显式配置后端存储,否则 mlflow.register_model() 会直接报错,模型注册表功能不可用——这不是可选项,而是硬性前提。
为什么 mlflow.register_model() 总是失败?
常见错误现象:InvalidInputError: Model registry functionality is not supported with the current backend。根本原因在于:MLflow 默认使用本地文件系统(mlruns/ 目录)作为后端,它不支持注册表所需的数据库事务和并发控制。
- 本地快速验证:启动服务时必须指定 SQLite 后端,例如:
mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root ./artifacts - 生产环境严禁用 SQLite:它在多写入场景下会锁死,且不支持
Staging/Production阶段切换 -
--default-artifact-root必须是绝对路径(如/opt/mlflow/artifacts),相对路径在不同工作目录下极易指向错误位置
log_model() 和 register_model() 到底差在哪?
mlflow.sklearn.log_model() 只是把模型存进当前 run 的 artifacts 目录,属于“快照”;mlflow.register_model() 才是创建一个带版本号、可查可管、能打 stage 标签的注册模型实体。
- 没调
register_model,UI 里看到的只是散落的模型文件,不是受控的版本 - 注册时传入的名字(如
"DemandForecastProphet")是全局唯一标识符,后续所有版本都挂在这个名字下 - 注册后必须显式设置 stage(如
client.transition_model_version_stage("DemandForecastProphet", version=1, stage="Production")),否则下游服务无法稳定加载
如何让模型加载自动适配最新 Production 版本?
前端或 API 服务不应硬编码模型路径,而应通过 MLflow Registry 动态拉取。关键点在于 URI 格式与客户端轮询逻辑:
立即学习“Python免费学习笔记(深入)”;
- 生产服务应使用类似
models:/DemandForecastProphet/Production的 URI 加载模型,而不是runs:/abc123/model - Node.js 或 Python 服务需定期调用
client.get_latest_versions("DemandForecastProphet", stages=["Production"])获取当前版本号 - 注意缓存策略:避免每次预测都查 Registry;但也要设刷新间隔(如 5 分钟),防止回滚后服务仍用旧模型
最容易被忽略的是 Git 信息注入——如果训练脚本不在 Git 仓库根目录运行,mlflow.start_run() 就不会自动记录 commit hash,导致实验不可复现。别依赖“我本地有 git”,要确保 os.getcwd() 是仓库根,或手动设置 MLFLOW_GIT_REPO_URL 和 MLFLOW_GIT_COMMIT 环境变量。


















