使用 MLflow 跟踪实验和模型
跟踪是保存试验的相关信息的过程。 本文介绍如何使用 MLflow 跟踪 Azure 机器学习工作区中的试验和运行。
连接到 Azure 机器学习时,MLflow API 中提供的某些方法可能不可用。 有关支持和不支持的操作的详细信息,请参阅查询运行和试验的支持矩阵。 还可以从 MLflow 和 Azure 机器学习一文中了解 Azure 机器学习中支持的 MLflow 功能。
注意
- 若要跟踪在 Azure Databricks 上运行的试验,请参阅使用 MLflow 和 Azure 机器学习跟踪 Azure Databricks ML 试验。
先决条件
拥有 Azure 订阅和 Azure 机器学习。
若要运行 Azure CLI 和 Python 命令,请安装 Azure CLI v2 和适用于 Python 的 Azure 机器学习 SDK v2。 首次运行 Azure 机器学习 CLI 命令时,Azure CLI 的
ml
扩展会自动安装。
如下所示,安装 MLflow SDK
mlflow
包和适用于 MLflow 的 Azure 机器学习azureml-mlflow
插件。pip install mlflow azureml-mlflow
提示
可以使用
mlflow-skinny
包,它是一个不带 SQL 存储、服务器、UI 或数据科学依赖项的轻型 MLflow 包。 对于主要需要 MLflow 的跟踪和记录功能但不需要导入整个功能套件(包括部署)的用户,建议使用此包。创建 Azure 机器学习工作区。 若要创建工作区,请参阅创建入门所需的资源。 查看在工作区中执行 MLflow 操作所需的访问权限。
若要执行远程跟踪,或者跟踪在 Azure 机器学习外部运行的试验,请将 MLflow 配置为指向 Azure 机器学习工作区的跟踪 URI。 有关如何将 MLflow 连接到工作区的详细信息,请参阅为 Azure 机器学习配置 MLflow。
配置试验
MLflow 在试验和运行中组织信息。 在 Azure 机器学习中,运行称为作业。 默认情况下,运行将记录到名为 Default 的自动创建的试验,但可以配置要跟踪的试验。
对于交互式训练(如 Jupyter 笔记本中),请使用 MLflow 命令 mlflow.set_experiment()
。 例如,以下代码片段会配置一个试验:
experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)
配置运行
Azure 机器学习会跟踪 MLflow 所称运行中的训练作业。 使用运行捕获作业执行的所有处理。
以交互方式工作时,在记录需要活动运行的信息时,MLflow 将立即开始跟踪训练例程。 例如,如果启用 Mlflow 的自动记录功能,则当记录指标或参数,或者启动训练周期时,MLflow 跟踪将启动。
但显式启动运行通常很有帮助,特别是在要捕获“持续时间”字段中试验总时间的情况下。 要显式启动运行,请使用 mlflow.start_run()
。
无论是否手动启动运行,你最终都需要停止运行,以便 MLflow 知道试验运行已完成,并且可以将运行状态标记为“已完成”。 若要停止运行,请使用 mlflow.end_run()
。
以下代码会手动启动运行,并在笔记本末尾结束该运行:
mlflow.start_run()
# Your code
mlflow.end_run()
最好手动启动运行,以免忘记结束运行。 可以使用上下文管理器范式帮助记住结束运行。
with mlflow.start_run() as run:
# Your code
使用 mlflow.start_run()
启动新运行时,指定 run_name
参数可能会很有用,该参数之后会在 Azure 机器学习用户界面中转换为运行的名称。 这种做法有助于更快地识别运行。
with mlflow.start_run(run_name="hello-world-example") as run:
# Your code
启用 MLflow 自动日志记录
可以使用 MLflow 手动记录指标、参数和文件,还可以依赖于 MLflow 的自动日志记录功能。 MLflow 支持的每个机器学习框架确定了自动跟踪的内容。
若要启用自动日志记录,请在训练代码之前插入以下代码:
mlflow.autolog()
查看工作区中的指标和项目
在工作区中跟踪 MLflow 日志记录中的指标和项目。 可以随时在 Azure 机器学习工作室中查看和访问它们,也可以通过 MLflow SDK 以编程方式访问它们。
在工作室中查看指标和工件:
在工作区的“作业”页面上,选择试验名称。
在“试验详细信息”页面上,选择“指标”选项卡。
选择记录的指标以在右侧呈现图表。 可以通过应用平滑处理、更改颜色或在单个图形上绘制多个指标来自定义图表。 还可以调整布局的大小和重新排列布局。
创建所需视图后,将其保存以备将来使用,并使用直接链接与队友共享。
若要通过 MLflow SDK 以编程方式访问或查询指标、参数和工件,请使用 mlflow.get_run()。
import mlflow
run = mlflow.get_run("<RUN_ID>")
metrics = run.data.metrics
params = run.data.params
tags = run.data.tags
print(metrics, params, tags)
提示
前面的示例仅返回给定指标的最后一个值。 若要检索给定指标的所有值,请使用 mlflow.get_metric_history
方法。 若要详细了解如何检索指标值,请参阅从运行中获取参数和指标。
若要下载已记录的工件(如文件和模型),请使用 mlflow.artifacts.download_artifacts()。
mlflow.artifacts.download_artifacts(run_id="<RUN_ID>", artifact_path="helloworld.txt")
若要详细了解如何使用 MLflow 在 Azure 机器学习中检索或比较试验和运行中的信息,请参阅使用 MLflow 查询和比较试验和运行。