你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 MLflow 跟踪 ML 实验和模型
跟踪是指保存所有试验相关信息的过程,你可能会发现这些信息与你运行的每个实验相关。 此类元数据因项目而异,但可能包括:
- 代码
- 环境详细信息(操作系统版本、Python 包)
- 输入数据
- 参数配置
- 模型
- 评估指标
- 评估可视化效果(混淆矩阵、重要性绘图)
- 评估结果(包括一些评估预测)
处理作业时,Azure 机器学习会自动跟踪其中一些元素(包括代码、环境和输入和输出数据)。 但模型生成器需要检测模型、参数和指标等其他内容,因为它特定于特定的方案。
在本文中,你将了解如何使用 MLflow 跟踪 Azure 机器学习工作区中的试验和运行。
注意
若要跟踪在 Azure Databricks 或 Azure Synapse Analytics 上运行的试验,请参阅专用文章使用 MLflow 和 Azure 机器学习跟踪 Azure Databricks ML 试验或使用 MLflow 和 Azure 机器学习跟踪 Azure Synapse Analytics ML 试验。
跟踪试验的好处
强烈建议机器学习从业者通过跟踪试验来进行检测,无论他们是使用 Azure 机器学习中的作业进行训练,还是在笔记本中以交互方式进行训练。 优势包括:
- 所有 ML 试验都组织在一个位置,让你能够搜索和筛选试验以查找信息,并向下钻取以查看之前尝试的确切内容。
- 只需少量的额外工作即可比较试验、分析结果和调试模型训练。
- 重现或重新运行试验以验证结果。
- 通过查看每个人正在执行的操作、共享试验结果以及以编程方式访问试验数据来改善协作。
为什么使用 MLflow
Azure 机器学习工作区与 MLflow 兼容,这意味着可以通过 Azure 机器学习工作区使用 MLflow 跟踪运行、指标、参数和项目。 通过使用 MLflow 进行跟踪,无需更改训练例程即可使用 Azure 机器学习或注入任何特定于云的语法,这是该方法的主要优势之一。
有关所有受支持的 MLflow 和 Azure 机器学习功能,包括 MLflow 项目支持(预览版)和模型部署,请参阅 MLflow 和 Azure 机器学习。
先决条件
安装 Mlflow SDK 包
mlflow
和适用于 MLflow 的 Azure 机器学习插件azureml-mlflow
。pip install mlflow azureml-mlflow
提示
可以使用
mlflow-skinny
包,它是一个不带 SQL 存储、服务器、UI 或数据科学依赖项的轻型 MLflow 包。 对于主要需要用到跟踪和日志记录功能,但不需要导入整个 MLflow 功能套件(包括部署)的用户,建议使用它。你需要一个 Azure 机器学习工作区。 可以按照此教程创建一个。
如果要执行远程跟踪(在 Azure 机器学习外部运行的跟踪试验),请将 MLflow 配置为指向 Azure 机器学习工作区的跟踪 URI,如为 Azure 机器学习配置 MLflow 中所述。
配置试验
MLflow 在试验和运行中组织信息(在 Azure 机器学习中,运行称为作业)。 默认情况下,运行将记录到系统自动创建的名为默认的试验中。 可以配置进行跟踪的试验。
以交互方式训练时(例如在 Jupyter Notebook 中),使用 MLflow 命令 mlflow.set_experiment()
。 例如,以下代码片段演示如何配置试验,然后在作业期间进行记录:
experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)
配置运行
Azure 机器学习跟踪 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()
启动新运行时,指示随后将在 Azure 机器学习用户界面中转换为运行名称,并帮助你更快识别运行的参数 run_name
可能会非常有趣:
with mlflow.start_run(run_name="hello-world-example") as run:
# Your code
自动日志记录
可以手动使用 MLflow 记录指标、参数和文件。 但也可以依赖于 MLflow 自动日志记录功能。 MLflow 支持的每个机器学习框架决定了自动跟踪的内容。
若要启用自动日志记录,请在训练代码之前插入以下代码:
mlflow.autolog()
查看工作区中的指标和项目
在工作区中跟踪 MLflow 日志记录中的指标和项目。 若要随时查看它们,请在 Azure 机器学习工作室中导航到你的工作区,并在该工作区中按名称找到试验。
选择记录的指标以在右侧呈现图表。 可以通过应用平滑处理、更改颜色或在单个图形上绘制多个指标来自定义图表。 还可以根据需要调整布局的大小和重新排列布局。 创建所需视图后,可以将其保存以备将来使用,并使用直接链接与队友共享。
还可以使用 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 查询 & 比较试验和运行
示例笔记本
如果要查找有关如何在 Jupyter 笔记本中使用 MLflow 的示例,请参阅示例存储库 使用 MLflow (Jupyter Notebooks)。
限制
连接到 Azure 机器学习时,MLflow API 中提供的某些方法可能不可用。 有关支持和不支持的操作的详细信息,请阅读用于查询运行和试验的支持矩阵。