
本文详解解决“cannot define a mlflow experiment”错误的核心方法:必须先启动本地 mlflow 后端服务器,否则 `mlflow.set_experiment()` 会因无法连接追踪 uri 而抛出连接拒绝异常。
当你在代码中调用 mlflow.set_tracking_uri("http://127.0.0.1:8080") 和 mlflow.set_experiment("MLflow Quickstart") 却遇到类似以下报错:
MlflowException: API request to http://127.0.0.1:8080/api/2.0/mlflow/experiments/get-by-name failed... Caused by NewConnectionError(... [WinError 10061] Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée)
这并非认证或权限问题,而是最基础的连接前提未满足:你尚未启动 MLflow 跟踪服务器。
MLflow 的 set_tracking_uri 指向的是一个运行中的 HTTP 服务端点(即后端),它负责接收日志、管理实验与运行。若该服务未启动,客户端(你的 Python 脚本)自然无法建立连接——就像试图访问一个未开启的网站。
✅ 正确操作流程如下:
-
在终端(非 Python 环境)中启动 MLflow 服务器:
mlflow server --host 127.0.0.1 --port 8080 --backend-store-uri sqlite:///mlflow.db --default-artifact-root ./mlruns
- --host 和 --port 需与代码中 set_tracking_uri 的地址严格一致;
- --backend-store-uri 指定元数据存储(推荐 SQLite 快速起步);
- --default-artifact-root 指定模型/图表等二进制文件的本地保存路径。
保持该终端持续运行(服务器进程需常驻),再执行你的 Python 脚本。
验证服务是否就绪:打开浏览器访问 http://127.0.0.1:8080,应能看到 MLflow UI 界面(含“Experiments”标签页)。
? 补充说明:
- 不要尝试在 Jupyter 或 IDE 的 Python 控制台中直接运行 mlflow server 命令(它会阻塞线程且无法后台运行);
- 若端口被占用,可更换端口(如 --port 5000),并同步更新代码中的 URI;
- 初次运行时,mlflow.set_experiment(...) 会自动创建同名实验(无需手动初始化);
- 使用 SQLite 时,请确保 mlflow.db 所在目录有写入权限;生产环境建议切换为 PostgreSQL 或 MySQL。
完成上述步骤后,你的原始代码即可正常运行:
import mlflow
mlflow.set_tracking_uri("http://127.0.0.1:8080")
mlflow.set_experiment("MLflow Quickstart") # ✅ 成功创建/获取实验
with mlflow.start_run():
mlflow.log_param("alpha", 0.5)
mlflow.log_metric("accuracy", 0.92)总结:MlflowException: Failed to establish a new connection 是典型的“服务未启动”信号,而非配置或权限错误。先启服务,再写代码,是本地使用 MLflow 跟踪功能不可跳过的第一步。










