使用 MLflow 跟踪模型开发

MLflow 跟踪功能可以记录笔记本和训练数据集、参数、指标、标记以及与训练机器学习或深度学习模型相关的项目。 有关开始使用 MLflow 的示例笔记本,请参阅教程:Azure Databricks 上的端到端 ML 模型

使用试验和运行进行 MLflow 跟踪

模型开发过程是迭代的过程,当你开发和优化模型时,跟踪工作可能会很有挑战性。 在 Azure Databricks 中,可使用 MLflow 跟踪来帮助你记录模型开发过程,包括你尝试过的参数设置或组合,以及它们如何影响模型的性能。

MLflow 跟踪使用试验和运行来记录和跟踪机器学习和深度学习模型开发。 一次运行就是执行一次模型代码。 在一次 MLflow 运行期间,可记录模型参数和结果。 试验是相关运行的集合。 在试验中,你可以比较并筛选运行,了解模型如何执行,以及它的性能如何取决于参数设置、输入数据等。

备注

从 2024 年 3 月 27 日起,MLflow 对所有现有和新运行的总参数、标记和指标步骤数以及所有现有和新试验的总运行数施加配额限制,请参阅资源限制。 如果按试验配额命中运行,Databricks 建议删除不再需要在 Python 中使用删除运行 API 的运行。 如果达到其他配额限制,Databricks 建议调整日志记录策略,使其保持在限制之下。 如果需要提高此限制,请联系 Databricks 帐户团队,简要说明用例、建议的缓解方法不起作用的原因以及请求的新限制。

MLflow 跟踪 API

MLflow 跟踪 API 可记录模型运行中的参数、指标、标记和项目。 跟踪 API 可与 MLflow 跟踪服务器通信。 使用 Databricks 时,Databricks 托管的跟踪服务器会记录数据。 托管的 MLflow 跟踪服务器具有 Python API、Java API 和 R API。

MLflow 预安装在 Databricks Runtime ML 群集上。 若要在 Databricks Runtime 群集上使用 MLflow,必须安装 mlflow 库。 请参阅在群集上安装库,获取相关说明。

在何处记录 MLflow 运行

所有 MLflow 运行都会记录到活动试验中,可以使用以下任一方法对其进行设置:

如果未设置活动试验,则会将运行记录到笔记本试验

若要将试验结果记录到工作区(非正在运行该试验的工作区)中远程托管的 MLflow 跟踪服务器,使用 mlflow.set_tracking_uri() 设置用于引用远程工作区的跟踪 URI,并使用 mlflow.set_experiment() 设置远程工作区中的试验的路径。

mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")

如果在本地运行试验,并且想要将试验结果记录到 Databricks MLflow 跟踪服务器,请提供 Databricks 工作区实例 (DATABRICKS_HOST) 和 Databricks 个人访问令牌 (DATABRICKS_TOKEN)。 接下来,可设置跟踪 URI 以使用 mlflow.set_tracking_uri() 引用工作区,并使用 mlflow.set_experiment() 设置试验的路径。 若要详细了解在哪里查找 DATABRICKS_HOST 环境变量的值,请参阅DATABRICKS_TOKEN

以下代码示例演示如何设置这些值:


os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"

mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")

将运行记录到试验

MLflow 可自动记录在许多机器学习和深度学习框架中编写的训练代码。 这是开始使用 MLflow 跟踪的最简单方法。 请参阅示例笔记本

要更好地控制记录哪些参数和指标,或记录其他项目(如 CSV 文件或绘图),请使用 MLflow 日志记录 API。 请参阅示例笔记本

使用 autologging 跟踪模型开发

此示例笔记本介绍如何结合使用 autologging 和 scikit-learn。 有关使用其他 Python 库的 autologging 的信息,请参阅 MLflow autologging 文档

MLflow 自动记录 Python 笔记本

获取笔记本

使用日志记录 API 跟踪模型开发

此示例笔记本介绍如何使用 Python 日志记录 API。 MLflow 还具有 REST、R 和 Java API

MLflow API 日志记录 Python 笔记本

获取笔记本

将运行日志记录到工作区试验

默认情况下,当您在 Databricks 笔记本中训练模型时,运行将被记录到笔记本中的试验中。 只有在笔记本中启动的 MLflow 运行才能记录到笔记本试验中。

从任何笔记本启动的或从 API 启动的 MLflow 运行可以记录到工作区试验中。 若要将运行记录到工作区试验,请在笔记本或 API 调用中使用类似于以下内容的代码:

experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)

有关创建工作区试验的说明,请参阅创建工作区试验。 若要了解如何查看已记录的运行,请参阅查看笔记本试验查看工作区试验

以编程方式分析 MLflow 运行

可使用以下两个数据帧 API 以编程方式访问 MLflow 运行数据:

此示例演示如何使用 MLflow Python 客户端生成一个仪表板。该仪表板可直观显示一段时间内的评估指标更改、跟踪特定用户启动的运行的数目,以及度量所有用户的运行总数:

为何模型训练指标和输出有时不同

ML 中使用的许多算法使用一个随机元素,例如算法本身中的采样或随机初始条件。 当你使用其中一种算法训练模型时,每个运行的结果可能不同,即使该运行是使用相同的条件启动的。 许多库提供种子设定机制来修复这些随机元素的初始条件。 但是,可能有其他的差异来源不受种子控制。 某些算法对数据顺序非常敏感,而且分布式 ML 算法还可能受到数据分区方式的影响。 通常,这种差异并不明显,在模型开发过程中可以忽略。

若要控制顺序和分区差异导致的差异,请使用 PySpark 函数 repartitionsortWithinPartitions

MLflow 跟踪示例

以下笔记本演示了如何使用 MLflow 跟踪模型开发。