Press "Enter" to skip to content

使用MLflow进行机器学习实验追踪

介绍

机器学习(ML)领域正在迅速扩展,并在许多不同的行业中应用。随着机器学习实验使用MLflow进行跟踪和管理所需的试验变得越来越复杂,跟踪它们变得更加困难。这可能会给数据科学家带来许多问题,例如:

  • 实验丢失或重复:跟踪所有进行的实验可能具有挑战性,这会增加实验丢失或重复的风险。
  • 结果的可重现性:可能很难复制实验的发现,这使得故障排除和提高模型变得困难。
  • 透明度不足:可能难以相信模型的预测,因为难以理解模型是如何创建的。
CHUTTERSNAP在Unsplash上的照片

鉴于上述挑战,拥有一个可以跟踪所有ML实验并记录度量指标以实现更好的可重现性并促进协作的工具非常重要。本博客将探索和学习MLflow,一个开源的ML实验跟踪和模型管理工具,并提供代码示例。

学习目标

  • 在本文中,我们旨在对使用MLflow进行机器学习实验跟踪和模型注册有一个清晰的理解。
  • 此外,我们将学习如何以可重复和可重用的方式交付ML项目。
  • 最后,我们将了解LLM是什么,以及为什么需要跟踪LLM对于应用程序开发。

什么是MLflow?

MLflow标志(来源:官方网站)

称为MLflow的机器学习实验跟踪和模型管理软件使处理机器学习项目变得更加容易。它提供了各种工具和功能来简化ML工作流程。用户可以比较和复制结果,记录参数和度量指标,并跟踪MLflow实验。此外,它还简化了模型打包和部署。

使用MLflow,您可以在训练运行过程中记录参数和度量指标。

# 导入mlflow库
import mlflow

# 开始mlflow跟踪
mlflow.start_run()
mlflow.log_param("learning_rate", 0.01)
mlflow.log_metric("accuracy", 0.85)
mlflow.end_run()

MLflow还支持模型版本控制和模型管理,使您可以轻松跟踪和组织模型的不同版本:

import mlflow.sklearn

# 训练并保存模型
model = train_model()
mlflow.sklearn.save_model(model, "model")

# 加载特定版本的模型
loaded_model = mlflow.sklearn.load_model("model", version="1")

# 提供加载的模型进行预测
predictions = loaded_model.predict(data)

此外,MLflow还具有模型注册表,可让多个用户轻松监视、共享和部署模型,以实现协作式模型开发。

MLflow还允许在模型注册表、配方和插件中注册模型,并支持广泛的语言模型跟踪。现在,我们将看看MLflow库的其他组件。

MLflow – 实验跟踪

MLflow具有许多功能,包括实验跟踪,用于跟踪任何ML项目的机器学习实验。实验跟踪是一组用于记录参数、度量指标、代码版本和输出文件以进行诊断的API和UI。MLflow实验跟踪具有Python、Java、REST和R的API。

现在,让我们看看使用Python编程进行MLflow实验跟踪的代码示例。

import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from mlflow.models.signature import infer_signature

# 加载和预处理数据集
data = load_dataset()
X_train, X_test, y_train, y_test = train_test_split(data["features"], data["labels"], test_size=0.2)

# 开始一个MLflow实验
mlflow.set_experiment("My Experiment")
mlflow.start_run():
      # 记录参数
      mlflow.log_param("n_estimators", 100)
      mlflow.log_param("max_depth", 5)

      # 创建并训练模型
      model = RandomForestClassifier(n_estimators=100, max_depth=5)
      model.fit(X_train, y_train)

      # 在测试集上进行预测
      y_pred = model.predict(X_test)
      signature = infer_signature(X_test, y_pred)

      # 记录度量指标
      accuracy = accuracy_score(y_test, y_pred)
      mlflow.log_metric("accuracy", accuracy)

      # 保存模型
      mlflow.sklearn.save_model(model, "model")

# 关闭MLflow运行
mlflow.end_run()

在上面的代码中,我们从MLflow和sklearn库导入模块来进行模型实验追踪。然后,我们加载样本数据集以进行mlflow实验API。我们使用start_run(),log_param(),log_metric()和save_model()类来运行实验并将其保存在名为“我的实验”的实验中。

除此之外,MLflow还支持自动记录参数和指标,无需显式调用每个跟踪函数。您可以在训练代码之前使用mlflow.autolog()来记录所有参数和工件。

MLflow – 模型注册

模型注册示意图(来源:Databricks)

模型注册是一个集中式模型注册表,使用一组API和UI来有效地与完整的MLOps工作流程进行协作。

它提供了完整的机器学习模型保存的血统,包括模型保存、模型注册、模型版本控制和分阶段,可以在单个UI或使用一组API中进行。

让我们来看一下下面的屏幕截图中的MLflow模型注册UI。

mlflow UI截图

上面的截图显示了在MLflow UI上保存的模型工件,还有一个“注册模型”按钮,可以用于在模型注册表上注册模型。一旦模型注册,它将在模型注册UI页面上显示其版本、时间戳和阶段。(有关更多信息,请参阅下面的截图。)

MLflow模型注册UI

如前所述,除了UI工作流程外,MLflow还支持使用API工作流程将模型存储在模型注册表中,并更新模型的阶段和版本。

# 记录sklearn模型并注册为版本1
mlflow.sklearn.log_model(
        sk_model=model,
        artifact_path="sklearn-model",
        signature=signature,
        registered_model_name="sk-learn-random-forest-reg-model",
   )

上面的代码记录了模型并注册了模型(如果模型不存在)。如果模型名称已存在,则创建模型的新版本。MLflow库中还有许多其他注册模型的替代方法。我强烈建议阅读官方文档以了解更多信息。

MLflow – 项目

MLflow的另一个组成部分是MLflow项目,用于以可重复使用和可复制的方式将数据科学代码打包给数据团队的任何成员使用。

项目代码包括项目名称、入口点和环境信息,用于指定依赖项和其他项目代码配置以运行项目。MLflow支持Conda、虚拟环境和Docker镜像等环境。

简而言之,MLflow项目文件包含以下元素:

  • 项目名称
  • 环境文件
  • 入口点

让我们看一下MLflow项目文件的示例。

# 项目名称
name: My Project

python_env: python_env.yaml
# 或
# conda_env: my_env.yaml
# 或
# docker_env:
#    image: mlflow-docker-example

# 写入入口点
entry_points:
  main:
    parameters:
      data_file: path
      regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
  validate:
    parameters:
      data_file: path
    command: "python validate.py {data_file}"

上面的文件显示了项目名称、环境配置文件的名称以及项目代码的入口点,用于在运行时运行项目。

以下是Python python_env.yaml 环境文件的示例:

# 运行项目所需的Python版本。
python: "3.8.15"
# 构建软件包所需的依赖项。此字段是可选的。
build_dependencies:
  - pip
  - setuptools
  - wheel==0.37.1
# 运行项目所需的依赖项。
dependencies:
  - mlflow==2.3
  - scikit-learn==1.0.2

MLflow — LLM Tracking

正如我们所见,LLM在技术行业中迅速崛起。随着LLM应用的增加,开发人员越来越多地将LLM纳入其工作流程中,这就需要在开发流程中跟踪和管理这样的模型。

LLM是什么?

大型语言模型(LLM)是一种使用变压器架构和数十亿个训练参数开发的神经网络模型。这种模型可以执行各种自然语言处理任务,如文本生成、翻译和问答,具有高度的流畅性和连贯性。

为什么我们需要LLM跟踪?

与传统的机器学习模型不同,LLM必须监控提示以评估性能并找到最佳的生成模型。LLM具有许多参数,如top_k、temperature等,以及多个评估指标。不同参数下的不同模型对特定查询会产生不同的结果。因此,监控它们以确定性能最佳的LLM非常重要。

MLflow LLM跟踪API用于记录和监控LLM的行为。它记录LLM提交的输入、输出和提示,并返回相应的结果。它还提供了一个全面的用户界面,用于查看和分析过程的结果。要了解更多关于LLM跟踪API的信息,我建议访问它们的官方文档以获得更详细的了解。

结论

总之,MLflow是一个非常有效和全面的机器学习工作流和实验管理平台。它具有模型管理和对各种机器学习库的支持等功能。通过其四个主要组件:实验跟踪、模型注册表、项目和LLM跟踪,MLflow为管理和部署机器学习模型提供了一个无缝的端到端机器学习流水线管理解决方案。

主要要点

让我们来看一下本文的主要学习内容。

  1. 机器学习实验跟踪允许数据科学家和机器学习工程师轻松跟踪和记录模型的参数和指标。
  2. 模型注册表有助于将机器学习模型存储和管理在一个集中的存储库中。
  3. MLflow项目有助于简化项目代码的打包和部署,使得在不同环境中重新复现结果更加容易。

常见问题

本文中显示的媒体不归Analytics Vidhya所有,仅供作者自行决定使用。

Leave a Reply

Your email address will not be published. Required fields are marked *