跟踪 ML 和深度学习训练运行

可以通过 MLflow 跟踪组件记录与训练机器学习或深度学习模型相关的源属性、参数、指标、标记和项目。 若要开始使用 MLflow,请尝试 MLflow 快速入门教程之一。

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

MLflow 跟踪基于两个概念,即试验和运行:

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

若要了解如何控制对试验的访问,请参阅共享试验更改试验权限

注意

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

  • 对于 Python,请选择“库源”PyPI,并在“包”字段内输入
  • 对于 R,请选择“库源”CRAN,并在“包”字段内输入
  • 对于 Scala,请安装以下两个包:
    • 选择“库源”Maven,并在“坐标”字段内输入
    • 选择“库源”PyPI,并在“包”字段内输入

在何处记录 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_HOSTDATABRICKS_TOKEN 环境变量的值,请参阅执行 Azure Databricks 个人访问令牌身份验证

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


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 运行才能记录到笔记本试验中。 从任何笔记本启动的或从 API 启动的 MLflow 运行可以记录到工作区试验中。 若要了解如何查看已记录的运行,请参阅查看笔记本试验查看工作区试验

将 MLflow 运行记录到笔记本

获取笔记本

可以使用 MLflow Python、Java 或 Scala 以及 R API 来启动运行并记录运行数据。 有关详细信息,请参阅 MLflow 示例笔记本

从 Azure Databricks 外部访问 MLflow 跟踪服务器

你还可以从 Azure Databricks 外部写入和读取跟踪服务器,例如,使用 MLflow CLI 来这样做。 请参阅从 Azure Databricks 外部访问 MLflow 跟踪服务器

以编程方式分析 MLflow 运行

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

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

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

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

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

MLflow 跟踪示例

以下笔记本演示了如何在 MLflow 中训练多种类型的模型和跟踪训练数据,以及如何在 Delta Lake 中存储跟踪数据。