你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 MLflow 跟踪 ML 实验和模型
在本文中,你将了解如何使用 MLflow 跟踪 Azure 机器学习工作区中的试验和运行。
跟踪是保存运行的试验的相关信息的过程。 保存的信息(元数据)因项目而异,它可能包含:
- 代码
- 环境详细信息(如操作系统版本、Python 包)
- 输入数据
- 参数配置
- 模型
- 评估指标
- 评估可视化效果(如混淆矩阵、重要性图)
- 评估结果(包括一些评估预测)
在 Azure 机器学习中使用作业时,Azure 机器学习会自动跟踪有关试验的一些信息,例如代码、环境和输入和输出数据。 但是,对于其他模型、参数和指标等,模型生成器需要配置跟踪,因为它们特定于特定方案。
注意
若要跟踪在 Azure Databricks 上运行的试验,请参阅使用 MLflow 和 Azure 机器学习跟踪 Azure Databricks ML 试验。 若要了解如何跟踪在 Azure Synapse Analytics 上运行的试验,请参阅使用 MLflow 和 Azure 机器学习跟踪 Azure Synapse Analytics ML 试验。
跟踪试验的好处
强烈建议机器学习从业者跟踪试验,无论是使用 Azure 机器学习中的作业进行训练,还是以交互方式在笔记本中训练。 通过试验跟踪,可以:
- 将所有机器学习试验整理到一个位置。 然后,可以搜索和筛选试验并向下钻取以查看之前运行的试验的详细信息。
- 只需少量的额外工作即可比较试验、分析结果和调试模型训练。
- 重现或重新运行试验以验证结果。
- 提升协作,因为你可以看到其他团队成员正在执行的操作、共享试验结果并以编程方式访问试验数据。
为什么使用 MLflow 来跟踪试验?
Azure 机器学习工作区与 MLflow 兼容,这意味着可以在 Azure 机器学习工作区中使用 MLflow 跟踪运行、指标、参数和工件。 使用 MLflow 进行跟踪的主要优点是,无需更改训练例程来配合 Azure 机器学习使用或注入任何特定于云的语法。
有关所有受支持的 MLflow 和 Azure 机器学习功能的详细信息,请参阅 MLflow 和 Azure 机器学习。
限制
连接到 Azure 机器学习时,MLflow API 中提供的某些方法可能不可用。 有关支持和不支持的操作的详细信息,请参阅查询运行和试验的支持矩阵。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,请在开始操作前先创建一个免费帐户。 试用免费版或付费版 Azure 机器学习。
安装 Mlflow SDK 包
mlflow
和适用于 MLflow 的 Azure 机器学习插件azureml-mlflow
:pip install mlflow azureml-mlflow
提示
可以使用
mlflow-skinny
包,它是一个不带 SQL 存储、服务器、UI 或数据科学依赖项的轻型 MLflow 包。 对于主要需要 MLflow 的跟踪和记录功能但不需要导入整个功能套件(包括部署)的用户,建议使用mlflow-skinny
。一个 Azure 机器学习工作区。 若要创建工作区,请参阅创建机器学习资源教程。 查看在工作区中执行 MLflow 操作所需的访问权限。
如果要执行远程跟踪(即跟踪在 Azure 机器学习外部运行的试验),请将 MLflow 配置为指向 Azure 机器学习工作区的跟踪 URI。 有关如何将 MLflow 连接到工作区的详细信息,请参阅为 Azure 机器学习配置 MLflow。
配置试验
MLflow 在试验和运行中整理信息(在 Azure 机器学习中,运行称为作业)。 默认情况下,运行将记录到系统自动创建的名为默认的试验中。 可以配置进行跟踪的试验。
对于交互式训练(如 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 日志记录中的指标和项目。 可以随时在工作室中查看和访问它们,也可以通过 MLflow SDK 以编程方式访问它们。
在工作室中查看指标和工件:
转到 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 查询和比较试验和运行。