大数据智能体工作台 DataBuddy 记录训练指标

在 DataBuddy 数据科学模块中,训练指标的记录基于 MLflow 协议。你在 Notebook 中调用 MLflow API 记录的参数、指标、工件,会自动汇聚到对应实验的运行中,供后续查看与对比。

相关产品
大数据智能体工作台 DataBuddy 产品页,含版本规格、价格与购买入口。

这篇说说如何在 Notebook 中通过 MLflow API 记录这三类信息,并在实验详情页查看记录结果。

一、前提条件

在开始记录前,请确保:

·已创建目标实验(参见 创建实验),并获取实验 ID 或实验名称。

·当前账号在该实验上拥有编辑或管理权限。

·已在 Notebook 中安装 MLflow 客户端(DataBuddy 默认环境已预置 MLflow,无需额外安装)。

MLflow 协议中可记录的三类信息为:参数(Parameter)、指标(Metric)、工件(Artifact)。各类型的含义与典型示例请参见 什么是模型实验 > 关键概念。

二、记录方式选择

DataBuddy 支持两种记录方式,可按场景灵活选择:

方式 适用场景
自动记录 使用 sklearn / xgboost / lightgbm / pytorch / tensorflow 等主流框架,无需手写 log_*,框架训练时自动捕获参数、指标与模型
手动记录 自定义训练流程;需要记录非框架默认捕获的指标,完全控制记录时机与内容

三、自动记录

在 mlflow.start_run() 之前调用 mlflow.autolog(),框架训练时会自动捕获参数、指标、模型与训练数据集:

import mlflowfrom sklearn.datasets import load_diabetesfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.model_selection import train_test_splitmlflow.set_experiment(experiment_id="3")mlflow.autolog() # 自动记录with mlflow.start_run(): db = load_diabetes() X_train, X_test, y_train, y_test = train_test_split(db.data, db.target) rf = RandomForestRegressor(n_estimators=100, max_depth=6) rf.fit(X_train, y_train) # 参数(n_estimators、max_depth)、训练指标、模型工件均自动记录

注意:说明:

注意:Autologging 是注册模型的推荐方式之一:自动记录的模型默认携带签名(Signature),可直接用于 Catalog 注册。模型签名是注册模型的强制前置条件。

四、1.手动记录参数

在 with mlflow.start_run() 上下文中调用 mlflow.log_param:

import mlflowwith mlflow.start_run(run_name="manual_run"): # 单个参数 mlflow.log_param("learning_rate", 0.01) mlflow.log_param("batch_size", 64) mlflow.log_param("optimizer", "Adam") # 批量记录 mlflow.log_params({ "n_estimators": 100, "max_depth": 6, "max_features": 3, })

取值约束 :

·key 为字符串,最大长度由 MLflow 协议规定。

·value 类型可以是字符串、整数或浮点数。

·同一 Run 内同名参数 只能记录一次 ,重复记录会报错。

五、2.手动记录指标

在 with mlflow.start_run() 上下文中调用 mlflow.log_metric,可指定 step 用于绘制曲线:

import mlflowwith mlflow.start_run(run_name="manual_run"): # 单个指标 mlflow.log_metric("accuracy", 0.92) mlflow.log_metric("auc", 0.88) # 训练过程中按 epoch 记录损失 for epoch in range(100): loss = train_one_epoch(…) mlflow.log_metric("loss", loss, step=epoch) # 批量记录 mlflow.log_metrics({ "precision": 0.91, "recall": 0.89, "f1": 0.90, })

注意:说明:

六、3.手动记录工件(Artifact)

工件包括序列化的模型、日志、配置、图片等任意文件。记录方式分为两类:

1. 记录通用工件文件

import mlflowwith mlflow.start_run(): # 记录单个文件 mlflow.log_artifact("output/eval_report.html") # 记录到子目录 mlflow.log_artifact("config/params.yaml", artifact_path="configs") # 记录整个目录 mlflow.log_artifacts("output/figures", artifact_path="figures")

2. 记录模型工件

不同 ML 框架使用对应的 log_model 方法。常用示例:

# scikit-learnmlflow.sklearn.log_model( sk_model=model, name="sklearn-model", input_example=X_train, # 提供输入样例,自动生成签名)# PyTorchmlflow.pytorch.log_model(model, "model")# 自定义 Python 模型mlflow.pyfunc.log_model(artifact_path="model", python_model=my_model)

注意:注册到 Catalog 的模型必须携带签名(Signature)。建议在 log_model 时传入 input_example= 让 MLflow 自动推断签名;或在调用前显式构造 mlflow.models.signature.ModelSignature。无签名的模型在后续注册时将被拒绝。

3. 在记录时直接注册模型

通过 registered_model_name= 参数可在 log_model 时同步注册到 Catalog(同一模型名首次注册为 V1,再次注册版本号自动 +1):

mlflow.sklearn.log_model( sk_model=model, name="sklearn-model", input_example=X_train, registered_model_name="my_catalog.my_schema.churn_model",)

模型注册的详细规则参见 模型版本管理。

七、完整示例

下面是一个端到端的示例,演示在一次训练中同时记录参数、指标、模型并完成注册:

import mlflowimport mlflow.sklearnfrom sklearn.datasets import make_regressionfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.metrics import mean_squared_errorfrom sklearn.model_selection import train_test_splitmlflow.set_experiment("regression_demo")with mlflow.start_run() as run: X, y = make_regression(n_features=4, n_informative=2, random_state=0, shuffle=False) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) params = {"max_depth": 2, "random_state": 42} model = RandomForestRegressor(**params) model.fit(X_train, y_train) # 记录参数 mlflow.log_params(params) # 记录指标 y_pred = model.predict(X_test) mlflow.log_metrics({"mse": mean_squared_error(y_test, y_pred)}) # 记录并注册模型(同步注册到 Catalog) mlflow.sklearn.log_model( sk_model=model, name="sklearn-model", input_example=X_train, registered_model_name="catalog_name.schema_name.model_name", )

八、父子 Run 与超参搜索

在父 Run 上下文中嵌套子 Run,常用于超参数搜索场景:

import mlflowwith mlflow.start_run(run_name="Parent Run") as parent: mlflow.log_param("model_type", "RandomForest") for n in [50, 100, 200]: with mlflow.start_run(run_name=f"n_estimators={n}", nested=True): mlflow.log_param("n_estimators", n) # … 训练并记录 metric …

实验详情中的运行任务列表会以嵌套方式展示父 Run 与其下的子 Run,便于分层查看。

九、1. 如何查看实验详情

记录完成后,进入实验详情查看:

1.1 进入数据科学 > 模型实验 ,点击目标实验名称进入详情。

1.2 默认在 运行任务 中以列表展示所有 Run。

1.3 点击运行任务名称进入 Run 详情,包含 4 个 Tab 如下:

Tab 内容
概览信息 关于此运行任务的基本信息。支持点击跳转数据集、模型、代码文件界面。支持编辑标签,搜索参数配置、指标
模型指标 展示通过 log_metric 记录的指标的可视化图表(柱状图、折线图等)
系统指标 CPU 使用率、内存、网络、磁盘等系统级监控图表
模型文件 当前 Run 的所有工件文件,支持浏览、复制、下载

十、2. 添加自定义标签

在 概览信息 页面,你可以为该运行任务添加自定义键值对标签,用于分类与检索。

操作方式:在添加标签 区域输入键值对,每输入一组后点击保存按钮,系统会自动新增一行;点击行末删除按钮可移除该行。

十一、3. 验证结果

记录完成后,你可以通过以下方式确认记录结果:

·概览信息 中可看到所有记录的参数、指标、自定义标签。

·模型指标 与 系统指标 中可看到对应的图表。

·模型文件 中可看到记录的工件文件树状结构。

·如果同步注册了模型,可在 模型管理 列表中找到对应的注册模型。

十二、调用 mlflow.log_param 时报错 Parameter already logged 怎么办?

同一 Run 内同名参数只能记录一次。请检查代码是否在循环中重复记录同一参数;如果确实需要按时间步记录变化的值,请改用 mlflow.log_metric(key, value, step=…)。

十三、指标曲线为什么只显示一个点?

mlflow.log_metric(key, value) 不传 step 时默认按记录顺序累加。如果只调用了一次,曲线只有一个点。在训练循环中按 epoch 调用 log_metric(key, value, step=epoch) 即可绘制完整曲线。

十四、模型注册时提示模型没有签名怎么办?

注册模型要求模型必须携带签名。请:

1. 在 log_model 调用时传入 input_example= 让 MLflow 自动推断签名;或

2. 显式构造 mlflow.models.signature.ModelSignature 并通过 signature= 参数传入;或

3. 启用 mlflow.autolog() 由框架自动记录带签名的模型。

若模型没有签名,则模型不会被记录,模型文件 区不会显示已记录的模型文件。

十五、手动启动的 Run 一直停留在运行中状态怎么办?

如果代码异常退出且未正确关闭 Run,可能导致 Run 状态滞留。建议始终使用 with mlflow.start_run() as run: 上下文管理器,异常退出时也会自动调用 mlflow.end_run() 关闭 Run。

十六、相关文档

·什么是模型实验

·创建实验

·对比实验结果

·Notebook

赞 (0)
上一篇 4天前
下一篇 4天前