实验
实验
本文为您介绍如何通过 UI
和 MLflow API
创建、管理实验及运行,可视化对比不同运行的训练参数、指标。
默认实验
实验
功能提供 默认实验(Default)
,用于在未指定活跃实验的情况下管理运行记录。
默认实验(Default)
在当前数据中心下的组织内部共享,不建议将其用于正式用途,您可以通过 创建实验 新建个人使用的实验;默认实验(Default)
不可删除、重命名、分享;默认实验(Default)
中的运行对组织内全部成员可见,但仅限删除个人创建的运行。

创建实验
您可通过 模型/实验
右上角 创建实验
按钮,或者在 工作表
和 笔记本中
使用 MLflow API
创建实验。
- 创建实验时只需指定实验名称,实验资源存储在当前数据中心的对象存储中;
- 实验名称在当前数据中心的组织内唯一;
- 实验可以在当前数据中心的组织内分享。
UI
点击 创建
按钮新建实验。

API
通过 MLflow API
创建实验,设置 实验标签(可选)
和 描述信息(可选)
。
import mlflow
# 实验描述(可选)
experiment_description = (
"This is the adult income classification project. "
"This experiment contains the produce models for income classification."
)
# 提供可搜索的标签,定义本实验中运行的特征(可选)
experiment_tags = {
"project_name": "adult-income-classifaction",
"team": "rain-ml",
"project_quarter": "Q3-2024",
"mlflow.note.content": experiment_description,
}
# 创建实验,实验已存在时直接使用
adult_income_experiment_id = mlflow.create_experiment(
name="成人收入分类", tags=experiment_tags
)
查看实验
实验是相关运行的集合,允许用户可视化、搜索和比较运行,以及下载运行或元数据以便在其他工具中进行分析。
UI
在 模型/实验
页面可查看(包括个人创建和分享)所有实验。

点击指定实验可查看实验详情
- 运行(Run):运行(Run)是指与机器学习模型训练过程相关的参数、指标、标签和项目的集合,每个运行都记录了模型代码的一次执行:
- 搜索:根据指标、参数和标签等条件使用类似 SQL WHERE 子句的简化版本搜索符合的运行集合;
- 可视化:通过可视化界面对模型指标进行图表分析;
- 创建:使用
笔记本(Notebook)
或工作表(Worksheet)
创建当前实验的一次运行; - 下载:下载运行以便在其他工具中进行分析;
- 比较:对比不同运行的参数和指标寻找最佳实验结果,详情查看 可视化对比不同运行。

- 评估(Evaluation):从不同维度评估不同运行的效果。

- 追踪(Tracing):
MLflow
提供Automatic Tracing
功能可以自动将执行过程中的模型
和API
调用记录到实验中。

API
搜索符合条件的实验。
import mlflow
from mlflow import MlflowClient
client = MlflowClient()
experiments = client.search_experiments()
experiments
[<Experiment: artifact_location='<当前实验的对象存储路径>', creation_time=1722510564508, experiment_id='<实验ID>', last_update_time=1722510564508, lifecycle_stage='active', name='Default', tags={'mlflow.note.content': '默认实验'}>, <Experiment: artifact_location='<当前实验的对象存储路径>', creation_time=1728957477878, experiment_id='<实验ID>', last_update_time=1728957477878, lifecycle_stage='active', name='Lyrics Corrector', tags={'mlflow.ownerEmail': '<创建人邮箱>', 'mlflow.ownerId': '<创建人ID>'}>, ...]
查看/使用某个实验。
experiment_name = "成年人收入分类"
adult_income_experiment = mlflow.set_experiment(experiment_name)
adult_income_experiment
输出
<Experiment: artifact_location='<当前实验的对象存储路径>', creation_time=1728887348428, experiment_id='<实验ID>', last_update_time=1728887724993, lifecycle_stage='active', name='成年人收入分类', tags={'mlflow.note.content': 'This is the adult income classification project. This ' 'experiment contains the produce models for income ' 'classification.', 'mlflow.ownerEmail': '<创建人邮箱>', 'mlflow.ownerId': '<创建人ID>', 'project_name': 'adult-income-classifaction', 'project_quarter': 'Q3-2024', 'team': 'rain-ml'}>
查看实验中的运行
点击指定实验名称即可查看该实验下的全部运行记录。
UI

API
通过 MLflow API
查看实验下的全部运行记录。
from mlflow import MlflowClient
client = MlflowClient()
# 指定实验名称
experiment_name = "成年人收入分类"
expriment = client.get_experiment_by_name(experiment_name)
client.search_runs(experiment_ids=[expriment.experiment_id])
[<Run: data=<RunData: metrics={}, params={}, tags={'mlflow.log-model.history': '[{"run_id": "8d1acc2222734564a1deeab2656da96a", ' '"artifact_path": "model", "utc_time_created": ' '"2024-10-15 09:07:13.157055", "flavors": ' '{"python_function": {"loader_module": ' '"mlflow.openai", "python_version": "3.11.0", ' '"data": "model.yaml", "env": {"conda": ' '"conda.yaml", "virtualenv": "python_env.yaml"}}, ' '"openai": {"openai_version": "1.51.2", "data": ' '"model.yaml", "code": null}}, "model_uuid": ' '"5676e9b9a7c64333b0db5956bb96db84", ' '"mlflow_version": "2.15.1", "signature": ' '{"inputs": "[{\\"type\\": \\"string\\", ' '\\"required\\": true}]", "outputs": ' '"[{\\"type\\": \\"string\\", \\"required\\": ' 'true}]", "params": null}}]', 'mlflow.rain.notebookID': '947', 'mlflow.rain.notebookPath': 'ml_quickstart', 'mlflow.runName': 'youthful-moose-297', 'mlflow.source.name': 'ml_quickstart', 'mlflow.source.type': 'NOTEBOOK', 'mlflow.user': '<创建人邮箱>'}>, info=<RunInfo: artifact_uri='<当前运行的对象存储路径>', end_time=1728983257131, experiment_id='227', lifecycle_stage='active', run_id='8d1acc2222734564a1deeab2656da96a', run_name='youthful-moose-297', run_uuid='8d1acc2222734564a1deeab2656da96a', secret_key=None, start_time=1728983233105, status='FINISHED', user_id='<创建人邮箱>'>, inputs=<RunInputs: dataset_inputs=[]>>, <Run: data=<RunData: metrics={}, params={}, tags={'mlflow.log-model.history': '[{"run_id": "e67f1eba53b04c4bbb65baef4120aaf4", ' '"artifact_path": "model", "utc_time_created": ' '"2024-10-15 09:02:24.408231", "flavors": ' '{"python_function": {"loader_module": ' '"mlflow.openai", "python_version": "3.11.0", ' '"data": "model.yaml", "env": {"conda": ' '"conda.yaml", "virtualenv": "python_env.yaml"}}, ' '"openai": {"openai_version": "1.51.2", "data": ' '"model.yaml", "code": null}}, "model_uuid": ' '"e928dfe56a454a0fa2c5808eb8ef3730", ' '"mlflow_version": "2.15.1", "signature": ' '{"inputs": "[{\\"type\\": \\"string\\", ' '\\"required\\": true}]", "outputs": ' '"[{\\"type\\": \\"string\\", \\"required\\": ' 'true}]", "params": null}}]', 'mlflow.rain.notebookID': '947', 'mlflow.rain.notebookPath': 'ml_quickstart', 'mlflow.runName': 'serious-stork-54', 'mlflow.source.name': 'ml_quickstart', 'mlflow.source.type': 'NOTEBOOK', 'mlflow.user': '<创建人邮箱>'}>, info=<RunInfo: artifact_uri='<当前运行的对象存储路径>', end_time=1728982951940, experiment_id='227', lifecycle_stage='active', run_id='e67f1eba53b04c4bbb65baef4120aaf4', run_name='serious-stork-54', run_uuid='e67f1eba53b04c4bbb65baef4120aaf4', secret_key=None, start_time=1728982944345, status='FINISHED', user_id='<创建人邮箱>'>, inputs=<RunInputs: dataset_inputs=[]>>]
可视化对比不同运行
在 实验详情
页面选择多个运行后,点击对比按钮对所选运行的 参数
、指标
、标签
等进行比较。

通过不同参数与指标的对比分析,可以帮助您寻找出当前训练任务的最优参数组合,提升模型效果。

删除实验
实验列表
中仅展示活跃的实验信息,您可以根据需要删除指定实验。
UI

注意:删除实验时不会清除实验信息(包括实验下的运行和工件等),您可以通过 恢复实验 恢复已删除实验。

API
通过 MLflow API
删除指定的实验。
from mlflow import MlflowClient
client = MlflowClient()
# 指定实验名称
experiment_name = "成年人收入分类"
expriment = client.get_experiment_by_name(experiment_name)
client.delete_experiment(experiment_id=expriment.experiment_id)
无输出
恢复实验
您可以通过 MLflow API
恢复被删除的实验。
API
from mlflow import MlflowClient
client = MlflowClient()
experiment_name = "成年人收入分类"
expriment = client.get_experiment_by_name(experiment_name)
client.restore_experiment(experiment_id=expriment.experiment_id)
无输出
分享实验
您可以向 用户/用户组
分享创建的实验用以提高协作开发效率,注意:分享时请严格控制权限级别。
- 拥有"读"权限的用户可以对该实验进行查看;
- 拥有"写"权限的用户可以为该实验创建新的运行记录;
- 拥有"管理员"权限的用户可以分享实验及删除实验和实验下的运行记录。