跳到主要内容

使用 mlflow.autolog 进行自动指标、参数和 artifact 日志记录

·阅读时长 6 分钟
Daniel Liden
Databricks 开发者布道师

想了解更多关于 MLflow 中包含的自动日志记录功能吗?本入门指南将为您介绍使用这一强大且省时功能的基础知识!

健壮的日志记录实践是机器学习模型迭代开发和改进的核心。在使用复杂的机器学习库或使用具有不同 API 和各种对象及值进行跟踪的不同框架进行实验时,仔细跟踪指标、参数和工件可能具有挑战性。

MLflow 的自动日志记录功能提供了一个简单的解决方案,它与许多广泛使用的机器学习库兼容,例如 PyTorchScikit-learnXGBoost。使用 mlflow.autolog() 会指示 MLflow 捕获基本数据,而无需用户手动指定要捕获的内容。它是 MLflow 日志记录功能的一个易于访问且功能强大的入口点。

要启用自动日志记录,只需在您的机器学习脚本/笔记本中添加以下行,在启动可能包含您希望记录的信息或工件的模型训练或评估等活动之前:

import mlflow


mlflow.autolog()

自动日志功能

当数据科学工作流包含 mlflow.autolog() 时,MLflow 将自动记录:

  • 指标:标准训练和评估度量,例如准确率和 F1 分数;
  • 参数:超参数,例如学习率和估计器数量;以及
  • 工件:重要文件,例如训练好的模型。

MLflow 的自动日志记录会捕获针对所用库特定活动的详细信息:不同的库将导致不同的日志记录对象和数据。此外,MLflow 还会记录关键元数据,例如软件版本、git 提交哈希和启动运行的文件名。通过记录模型训练期间的系统状态,MLflow 旨在促进环境可重现性并提供审计沿袭,从而最大限度地减少可能因新库版本中的包回归或弃用而引起的推理问题。

通过自动日志记录捕获的具体内容取决于所使用的库。此外,MLflow 还会捕获上下文元数据,例如软件版本、git 提交哈希以及启动运行的文件的名称。通过尽可能多地记录有关训练模型的系统状态的详细信息,MLflow 可以提供环境可重现性和审计沿袭,从而最大限度地减少可能由包回归或弃用等引起的推理问题。

mlflow.autolog 的基本用法

您可以通过两种不同的方式访问自动日志记录功能:

  1. 通过 mlflow.autolog() 函数,该函数可以启用和配置所有受支持库的自动日志记录。这为处理多个库提供了一种广泛、一体化的方法,非常适合机器学习管道的原型设计和探索性分析。
  2. 通过库特定的自动日志函数,例如 mlflow.sklearn.autolog(),它们可以为单个库启用更细粒度的日志记录配置。例如,mlflow.pytorch.autolog() 包含 log_every_n_epochlog_every_n_step 参数,用于指定日志记录指标的频率。

无论您使用这两种方法中的哪一种,您都不需要使用 start_run() 手动初始化 MLflow 运行,即可创建运行并将您的模型、参数和指标捕获到 MLflow 中。

示例

import mlflow
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# Generate a 3-class classification problem
X, y = datasets.make_classification(
n_samples=1000,
class_sep=0.5,
random_state=42,
n_classes=3,
n_informative=3,
)

# Split the data into training and validation sets
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# Enable autolog
mlflow.autolog() # or mlflow.sklearn.autolog()

# Initialize the classifier with n_estimators=200 and max_depth=10
clf = RandomForestClassifier(n_estimators=200, max_depth=10)

# Fit the classifier to the data.
# The `fit` method is patched to perform autologging. When engaged in training, a
# run is created and the parameters are logged.
# After the fit is complete, the model artifact is logged to the run.
clf.fit(X_train, y_train)

# Score the model on the data
# The current active run is retrieved during calling `score` and the loss metrics are logged
# to the active MLflow run.
clf.score(X_val, y_val)

# Visualize the automatically logged run results to validate what we recorded
mlflow.last_active_run()

上述代码将模型参数、指标和模型记录到 MLflow 运行中。上述示例中最终语句(mlflow.last_active_run())的输出结果,将返回模型指标、参数和记录的工件(结果已截断)的运行数据,如下所示:

<Run: data=<RunData:
metrics={'RandomForestClassifier_score_X_val': 0.72,
'training_accuracy_score': 0.99625,
'training_f1_score': 0.9962547564333545,
'training_log_loss': 0.3354604497935824,
'training_precision_score': 0.9962921348314606,
'training_recall_score': 0.99625,
'training_roc_auc': 0.9998943433719795,
'training_score': 0.99625
},
params={'bootstrap': 'True',
'ccp_alpha': '0.0',
'class_weight': 'None',
'criterion': 'gini',
'max_depth': '10',
'max_features': 'sqrt',
'max_leaf_nodes': 'None',
[...],
},
tags={'estimator_class': 'sklearn.ensemble._forest.RandomForestClassifier',
'estimator_name': 'RandomForestClassifier',
'mlflow.autologging': 'sklearn',
[...]
}, [...]>>

您还可以通过在命令行终端执行 mlflow ui 在 mlflow UI 中访问这些内容。

The MLflow Tracking UI

MLflow UI 还允许您在多个运行中以图形方式比较不同的指标和参数,包括通过 mlflow.autolog 生成的指标和参数。

Run comparison of autologged runs in the MLflow UI

配置和自定义

自动日志记录函数接受许多参数,这些参数使用户可以更好地控制日志记录行为。例如,mlflow.autolog() 包含 log_modelslog_datasets 参数(默认为 True),它们指定是否应将模型和数据集信息保存到 MLflow 运行中,使您能够指定实际记录的内容。要在禁用数据集自动日志记录的同时继续记录所有常用元素,只需在拟合模型之前设置 mlflow.autolog(log_datasets=False) 即可禁用数据集自动日志记录功能。您还可以调整库特定自动日志函数的行为:例如,mlflow.sklearn.autolog() 函数包含一个 max_tuning_runs 参数,该参数指定在执行超参数搜索时要捕获的嵌套运行数量。

mlflow.autolog() 可以与库特定的自动日志函数结合使用,以控制特定库的日志记录行为。库特定的自动日志调用将始终取代 mlflow.autolog(),无论它们的调用顺序如何。例如,将 mlflow.autolog()mlflow.sklearn.autolog(disable=True) 结合使用将导致除 scikit-learn 之外的所有受支持库的自动日志记录。

务必查阅您正在使用的特定框架的文档,以了解自动记录的内容以及可用的配置选项。请参阅下方的延伸阅读部分以获取链接。

结论与后续步骤

MLflow 的自动日志记录功能和库特定自动日志记录函数为 MLflow 跟踪提供了直接的起点,只需很少或无需配置。它们记录了许多流行的机器学习库的关键指标、参数和工件,允许用户跟踪他们的机器学习工作流,而无需编写自定义跟踪代码。

然而,它们并非适用于所有用例的正确解决方案。如果您只需要跟踪少数特定指标,启用自动日志记录可能会效率低下,导致生成的数据和存储的工件远超所需。此外,并非所有可能的框架和用户可能希望跟踪的自定义值都支持自动日志记录。在这种情况下,可能需要手动指定要跟踪的内容

进一步阅读