MLFlow实验追踪报错:No such file or directory问题排查与解决
问题分析与解决方案
这个FileNotFoundError是MLFlow写入运行元数据时找不到对应目录导致的,核心原因是路径配置不当或手动干预了MLFlow的自动目录生成流程,以下是具体修正方案:
1. 移除手动创建mlruns目录的代码
MLFlow会自动根据追踪URI生成所需目录结构,手动提前创建mlruns可能导致目录权限或结构不匹配,直接删除这行代码:
# 删除此行,无需手动创建 # Path("mlruns").mkdir(parents=True, exist_ok=True)
2. 修正追踪URI的格式
Windows环境下file:mlruns的路径解析容易出问题,推荐使用绝对路径或标准file URI格式:
import os # 绝对路径方案(推荐,避免工作目录差异问题) mlflow.set_tracking_uri(f"file:///{os.path.abspath('mlruns').replace(os.sep, '/')}") # 相对路径方案(仅Linux/macOS更稳妥,Windows优先用绝对路径) # mlflow.set_tracking_uri("file:./mlruns")
3. 简化实验创建流程(更稳妥)
手动调用MlflowClient.create_experiment偶尔会和mlflow.start_run的自动逻辑冲突,建议改用mlflow.set_experiment自动创建并切换实验:
EXPERIMENT_NAME = "你的实验名称" # 自动创建实验(不存在时)并切换 mlflow.set_experiment(EXPERIMENT_NAME) # 给实验添加标签 client = mlflow.MlflowClient() experiment = client.get_experiment_by_name(EXPERIMENT_NAME) client.set_experiment_tag(experiment.experiment_id, "author", "me")
4. 修正后的完整代码示例
import mlflow import os # 配置追踪URI(绝对路径版本) mlflow.set_tracking_uri(f"file:///{os.path.abspath('mlruns').replace(os.sep, '/')}") # 配置实验 EXPERIMENT_NAME = "test_experiment" mlflow.set_experiment(EXPERIMENT_NAME) # 添加实验标签 client = mlflow.MlflowClient() experiment = client.get_experiment_by_name(EXPERIMENT_NAME) client.set_experiment_tag(experiment.experiment_id, "author", "me") # 运行实验并记录图表 with mlflow.start_run(run_name="foobar", description="Lorem Ipsum dolor sit amet") as run: # 假设fig是你创建的matplotlib/seaborn等图表对象 mlflow.log_figure(fig, "figure_name.png")
额外排查点
- 检查Jupyter当前工作目录:执行
os.getcwd()确认是否在预期目录,避免MLFlow在错误路径创建mlruns。 - 确认目录写入权限:Linux/macOS检查当前用户对工作目录的写入权限;Windows避免在系统目录(如C:\Program Files)运行Notebook。
内容的提问来源于stack exchange,提问作者João Areias
相关产品推荐
相关产品推荐

