跟踪 ML 和深度学习训练运行
可以通过 MLflow 跟踪组件记录与训练机器学习或深度学习模型相关的源属性、参数、指标、标记和项目。 若要开始使用 MLflow,请尝试 MLflow 快速入门教程之一。
使用试验和运行进行 MLflow 跟踪
MLflow 跟踪基于两个概念,即试验和运行:
注意
从 2024 年 3 月 27 日起,MLflow 对所有现有和新运行的总参数、标记和指标步骤数以及所有现有和新试验的总运行数施加配额限制,请参阅资源限制。 如果按试验配额命中运行,Databricks 建议删除不再需要在 Python 中使用删除运行 API 的运行。 如果达到其他配额限制,Databricks 建议调整日志记录策略,使其保持在限制之下。 如果需要提高此限制,请联系 Databricks 帐户团队,简要说明用例、建议的缓解方法不起作用的原因以及请求的新限制。
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.set_experiment() 命令。
- 使用
experiment_id
中的experiment_id
参数。 - 设置 MLflow 环境变量 MLFLOW_EXPERIMENT_NAME 或 MLFLOW_EXPERIMENT_ID 之一。
如果未设置活动试验,则会将运行记录到笔记本试验。
若要将试验结果记录到工作区(非正在运行该试验的工作区)中远程托管的 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
环境变量的值,请参阅执行 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 客户端 search_runs API 返回 pandas 数据帧。
- MLflow 试验数据源返回 Apache Spark 数据帧。
此示例演示如何使用 MLflow Python 客户端生成一个仪表板。该仪表板可直观显示一段时间内的评估指标更改、跟踪特定用户启动的运行的数目,以及度量所有用户的运行总数:
为何模型训练指标和输出有时不同
ML 中使用的许多算法使用一个随机元素,例如算法本身中的采样或随机初始条件。 当你使用其中一种算法训练模型时,每个运行的结果可能不同,即使该运行是使用相同的条件启动的。 许多库提供种子设定机制来修复这些随机元素的初始条件。 但是,可能有其他的差异来源不受种子控制。 某些算法对数据顺序非常敏感,而且分布式 ML 算法还可能受到数据分区方式的影响。 通常,这种差异并不明显,在模型开发过程中可以忽略。
若要控制顺序和分区差异导致的差异,请使用 PySpark 函数 repartition 和 sortWithinPartitions。
MLflow 跟踪示例
以下笔记本演示了如何在 MLflow 中训练多种类型的模型和跟踪训练数据,以及如何在 Delta Lake 中存储跟踪数据。