You need to enable JavaScript to run this app. Docker环境运行MLFlow Project无法记录metrics与artifacts问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境运行MLFlow Project无法记录metrics与artifacts问题求助

问题排查与解决方案

核心根本原因

你代码中手动创建了新的实验和运行实例,完全没有使用mlflow run命令自动注入的运行上下文,所以所有日志都写入了代码新生成的、未挂载到宿主机的运行路径下,没有落到你预期的挂载目录中,容器销毁后对应数据直接丢失。

具体排查思路

  • 对比运行日志的环境变量配置:日志明确显示docker运行时注入了MLFLOW_RUN_ID=0978fdd89ba44bf7b49975ab84838e82、MLFLOW_EXPERIMENT_ID=0、MLFLOW_TRACKING_URI=file:///mlflow/tmp/mlruns三个核心环境变量,你代码中没有使用这些预置的上下文,反而调用create_experiment和create_run生成了全新的实验和运行记录,这部分记录默认存储在容器内部未挂载的路径,不会同步到宿主机。
  • 检查挂载路径匹配关系:日志显示宿主机/home/mlflow_demo/mlruns仅挂载到了容器内/mlflow/tmp/mlruns路径,你手动创建的run默认会写入容器内当前工作目录的mlruns下,不会落到已挂载的目录。

修复方案

方案1:使用mlflow自动上下文(推荐)

直接修改mlflow-demo.py代码,不需要手动创建client、实验和运行,用mlflow自动管理的上下文即可:

import mlflow
from random import random

# mlflow run命令会自动初始化运行上下文,无需手动创建相关实例
with mlflow.start_run():
    for i in range(1000):
        mlflow.log_metric("foo", random(), step=i)
    with open("test.txt","w") as f:
        f.write("This is an artifact file")
    mlflow.log_artifact("test.txt")

方案2:手动指定使用预置的运行ID

如果必须使用MlflowClient实例,可以调整代码读取环境变量中的预置run id,不要新建实验和运行:

import mlflow
from mlflow.tracking import MlflowClient
from random import random
import os

client = MlflowClient()
# 直接使用mlflow注入的run id,不需要新建run和experiment
run_id = os.getenv("MLFLOW_RUN_ID")
for i in range(1000):
    client.log_metric(run_id,"foo",random(),step=i)
with open("test.txt","w") as f:
    f.write("This is an artifact file")
client.log_artifact(run_id,"test.txt")
client.set_terminated(run_id)

额外验证项

  • 确认你使用的docker镜像中安装了和宿主机版本一致的mlflow,版本差异也可能导致数据写入失败
  • 运行命令可补充--env MLFLOW_TRACKING_URI=file:///mlflow/tmp/mlruns显式指定tracking uri,避免路径识别错误

内容的提问来源于stack exchange,提问作者kusur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 12:33:03