MLflow 跟踪功能可以记录笔记本和训练数据集、参数、指标、标记以及与训练机器学习或深度学习模型相关的项目。 有关开始使用 MLflow 的示例笔记本,请参阅教程:Azure Databricks 上的端到端 ML 模型。
模型开发过程是迭代的过程,当你开发和优化模型时,跟踪工作可能会很有挑战性。 在 Azure Databricks 中,可使用 MLflow 跟踪来帮助你记录模型开发过程,包括你尝试过的参数设置或组合,以及它们如何影响模型的性能。
MLflow 跟踪使用试验和运行来记录和跟踪机器学习和深度学习模型开发。 一次运行就是执行一次模型代码。 在一次 MLflow 运行期间,可记录模型参数和结果。 试验是相关运行的集合。 在试验中,你可以比较并筛选运行,了解模型如何执行,以及它的性能如何取决于参数设置、输入数据等。
备注
从 2024 年 3 月 27 日起,MLflow 对所有现有和新运行的总参数、标记和指标步骤数以及所有现有和新试验的总运行数施加配额限制,请参阅资源限制。 如果按试验配额命中运行,Databricks 建议删除不再需要在 Python 中使用删除运行 API 的运行。 如果达到其他配额限制,Databricks 建议调整日志记录策略,使其保持在限制之下。 如果需要提高此限制,请联系 Databricks 帐户团队,简要说明用例、建议的缓解方法不起作用的原因以及请求的新限制。
MLflow 跟踪 API 可记录模型运行中的参数、指标、标记和项目。 跟踪 API 可与 MLflow 跟踪服务器通信。 使用 Databricks 时,Databricks 托管的跟踪服务器会记录数据。 托管的 MLflow 跟踪服务器具有 Python API、Java API 和 R API。
MLflow 预安装在 Databricks Runtime ML 群集上。 若要在 Databricks Runtime 群集上使用 MLflow,必须安装 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
。
以下代码示例演示如何设置这些值:
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 和 scikit-learn。 有关使用其他 Python 库的 autologging 的信息,请参阅 MLflow autologging 文档。
此示例笔记本介绍如何使用 Python 日志记录 API。 MLflow 还具有 REST、R 和 Java API。
默认情况下,当您在 Databricks 笔记本中训练模型时,运行将被记录到笔记本中的试验中。 只有在笔记本中启动的 MLflow 运行才能记录到笔记本试验中。
从任何笔记本启动的或从 API 启动的 MLflow 运行可以记录到工作区试验中。 若要将运行记录到工作区试验,请在笔记本或 API 调用中使用类似于以下内容的代码:
experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)
有关创建工作区试验的说明,请参阅创建工作区试验。 若要了解如何查看已记录的运行,请参阅查看笔记本试验和查看工作区试验。
可使用以下两个数据帧 API 以编程方式访问 MLflow 运行数据:
- MLflow Python 客户端 search_runs API 返回 pandas 数据帧。
- MLflow 试验数据源返回 Apache Spark 数据帧。
此示例演示如何使用 MLflow Python 客户端生成一个仪表板。该仪表板可直观显示一段时间内的评估指标更改、跟踪特定用户启动的运行的数目,以及度量所有用户的运行总数:
ML 中使用的许多算法使用一个随机元素,例如算法本身中的采样或随机初始条件。 当你使用其中一种算法训练模型时,每个运行的结果可能不同,即使该运行是使用相同的条件启动的。 许多库提供种子设定机制来修复这些随机元素的初始条件。 但是,可能有其他的差异来源不受种子控制。 某些算法对数据顺序非常敏感,而且分布式 ML 算法还可能受到数据分区方式的影响。 通常,这种差异并不明显,在模型开发过程中可以忽略。
若要控制顺序和分区差异导致的差异,请使用 PySpark 函数 repartition 和 sortWithinPartitions。
以下笔记本演示了如何使用 MLflow 跟踪模型开发。