MLOps:MLflow 如何轻松跟踪您的实验并帮助您比较它们?

MLOps:MLflow 如何轻松跟踪您的实验并帮助您比较它们?

经过 Samson ZHANG , 数据科学家 小大码

这是我们文件的第三部分,专门用于 MLOps 和 MLflow。在本文中,我们将了解 MLflow 如何帮助您轻松跟踪实验并进行比较。本文不是对 MLflow 工作原理的技术深入探讨,也没有涵盖其所有功能。它更侧重于我对 MLFlow 用于模型跟踪、再现性和比较的想法。

米 机器学习项目中的 odel 可重复性经常被忽视,而且绝不能被忽视。训练模型可能既耗时又昂贵。随着实验数量的增加,跟踪失败甚至成功的实验变得更加困难。如果管理不善,很容易忘记你的实验。这就是创建 MLflow 的原因,它可以帮助您解决模型重现性问题。

为什么要使用 MLflow 之类的工具?

自 2018 年以来,在 Github 上拥有超过 2.5 亿次下载和 12.6k 星,MLflow 是最初由 Databricks 开发和推出的开源免费(在 Apache 许可证 2.0 下)工具。它是一种工具,可以为机器学习项目生命周期的多个阶段做出贡献,例如模型训练的实验跟踪、模型评估、模型版本控制和模型部署。

虽然 MLFlow 可以用于模型服务,但它最出名的是它的模型实验跟踪和模型比较能力。此外,MLflow 旨在处理多个人在同一模型上工作的并行实验运行。

我真正喜欢 MLflow 的功能之一是它 自动记录 该功能使您无需编写用于记录常见参数(例如优化器参数、损失和指标历史记录)的样板代码。它支持流行的机器学习/深度学习框架,例如 Scikit-learn、Keras、Pytorch-lightning、lightGBM 等。

为了不丢失从实验中获得的知识,您需要不惜一切代价跟踪许多信息,以便能够重现它们。 MLflow 可帮助您处理实验跟踪并回答以下问题。

培训前和培训期间

代码版本(Git)

  • 使用什么代码来处理数据和训练模型;
  • 训练超参数。

工作环境

  • conda,pip依赖;
  • 硬件资源(CPU、GPU、TPU 等)。

型号参数

  • 算法?
  • 参数。

培训产出

  • 模型权重检查点;
  • 性能指标。

使用的数据集

对于数据集跟踪,DVC 更合适,可以与 Git 和 MLflow 结合使用。

训练阶段之后

关于模型的利用存在几个问题:

  • 我们如何复制相同的训练(超参数、使用的数据集等)和结果,即使在代码修改之后,也能得到相同的结果?
  • 当存在多个训练检查点时,如何加载特定的检查点?
  • 与团队成员共享模型。其他成员在其系统上运行模型所需的先决条件/设置是什么?

当您必须通过多个团队成员处理同一个模型来提高模型性能时,实验跟踪变得更加难以解决。

这就是 MLFlow 发挥作用的地方。 MLflow 旨在有效处理所有这些任务。

由于 MLflow 对其日志 API 的示例进行了详细记录,因此我将不再讨论此功能。 MLflow 基本上可以记录您想要的任何内容,因为它是可定制的:超参数、指标、模型权重、泡菜等。

相反,我将专注于分享我的想法:

  • 我在尝试 MLflow 时遇到的最佳实践;
  • 使用集成 MLflow 的云提供商托管服务为 MLflow 和替代方案设置远程服务器的挑战;
  • 一个团队如何在多用户设置中通过多个 git 分支上的许多并行实验来管理其 git 工作流。

我将很快发表一篇文章,展示使用 MLflow 和 DVC 进行模型实验跟踪的示例。

尽管 MLflow 是用于实验跟踪的功能强大、易于使用和协作的工具,但它还不是完成这项任务的完美工具,但有潜力成为。例如,MLflow 在训练期间不支持交互式可视化,例如 张量板 **** 做。

优点和缺点

但是,它的自定义功能允许将 tensorboard 日志记录为工件,以后可以检索它们以与 tensorboard 一起使用。下表收

基本命令和跟踪界面

MLflow 易于使用。它有一个简单而全面的 API。可以通过简单的调用来开始跟踪参数和指标,例如 mlflow.start_run() 通过指定其 id 和名称来开始跟踪新实验,并使用 mlflow.log 方法来保存指标和工件(文件、指标、模型、 ETC。)。

单次实验运行可视化界面

MLflow 有一个 Web UI,可以使实验运行可视化,可以使用“mlflow ui”命令(在本地)启动:

Figure1. Mlflow UI experiments search interface

运行会记录您需要了解的所有信息以实现重现性:

  • Git 提交哈希;
  • 训练超参数和数据集版本(图3);
  • 训练指标、曲线(可以替代张量板指标)(图 4);
  • 模型架构、参数(图 5)。

Figure 2. MLflow UI experiment run interface

Figure 3: MLflow UI experiment run parameters

Figure 4: MLflow UI experiment run metrics

Figure 5: MLflow UI experiment run artifacts

Figure 6. MLflow UI metric curve

多个实验运行比较界面

MLflow 的另一个重要功能绝对是它的多次运行并排比较。

借助平行坐标图(参见图 7)和并排的运行参数和指标表(参见图 8),可以根据监控的指标快速了解生成最佳运行的参数。

Figure 7. MLflow multiple runs comparison parallel coordinate plots

Figure 8. MLflow UI multiple runs, parameters and metrics comparison overview

从这个多次运行比较界面,可以查看比较不同运行的度量图(参见图 9)。

Figure 9. MLflow UI, metric comparison plot for multiple runs

MLflow 和远程服务器

米 Lflow 可以在您的机器上本地使用,但通常您希望在协作设置中使用它。为您的机器学习项目设置 MLflow 可能很难,因为它必须由您以外的其他人共享和访问。您需要设置一个本身在技术上具有挑战性的远程服务器。 MLflow 跟踪 — MLflow 1.28.0 文档

  • 首先,您可能需要设置一个可供项目中所有协作者访问的在线机器;
  • 其次,您可能不希望任何人访问您的实验,因此您需要管理用户身份验证和访问控制。为了解决这个问题,您甚至可能需要围绕它构建一个完整的系统才能安全地使用 MLflow。

这个挑战是众所周知的,这就是为什么一些云提供商提供托管服务来设置您的 MLflow 服务器(和工件存储)的原因 微软 Azure (ML) , AWS 谷歌云平台 .

Azure 机器学习工作室

Microsoft Azure 更进一步,将 MLflow 完全集成到 Azure 机器学习 它开箱即用。

使用远程 MLflow 服务器开始跟踪您的 ML 实验就像设置远程服务器跟踪 URI 一样简单:

不要犹豫,查看文档以了解替代身份验证方法。

您将获得与 MLflow UI 类似的界面,例如实验搜索。您可能会发现 MLflow 的 Azure 集成比默认的 MLflow UI 具有更好的度量曲线可视化和比较(参见图 4)。

Figure 10. Azure ML MLflow Studio experiment run search and comparison interface

查看特定运行的详细信息,您还可以找到模型参数(参见图 5)以及您保存的模型和工件(参见图 6)

Figure 11. Azure ML Studio interface for MLflow experiment tracking

Figure 12. Azure ML Studio interface, run models checkpoints and artifacts

MLflow 最佳实践

命名您的实验和运行

它使搜索实验(mlflow ui 或以编程方式)更容易。 MLflow 可以分配诸如“default”之类的默认值并使用它运行,但对于正确的跟踪体验来说,它是不可理解的。

命名你的跑步 mlflow.start_run(experiment_id=experiment_id, run_name="cats_vs_dogs_mobilenet_20200101") 通过使用“run_name”参数。

选择您的指标和参数

与您的团队达成协议 在运行任何实验之前要跟踪哪些(业务)指标和参数及其命名 .

花时间从一开始就记录所有相关参数(模型架构、优化器等)。它使运行比较更容易,尤其是在您最近的运行和较旧的运行之间。尤其是与使用的数据集相关的信息(来源、版本、日期等)。

如果您使用 DVC,则数据集版本直接链接到已提交的实验运行。

您可以设置描述运行特殊性的键值对,例如“model”:“xgboost”,如果您使用的是 xgboost。使用 MLflow 搜索 API 可以更轻松地进行搜索。

使用 python 脚本而不是 notebook 进行实验跟踪

MLflow 不能很好地支持笔记本。一般来说,笔记本应该只用于探索/可视化,因为它们容易出现人为错误(无序代码执行),并且不适合生产使用(几乎不支持版本化)。

在以下示例中,源代码从 jupyter 笔记本运行:“source”值与跟踪目的无关,“version”字段(git commit hash)为空(参见图 7)。

Figure 13. Bad: MLflow tracking when code is run from jupyter notebook

Figure 14. Good: MLflow tracking when code is run from .py script

毫不犹豫地为每个实验创建新分支和新提交

例如,对于您想尝试的每个模型架构,您可以为每个模型创建单独的分支,并运行超参数优化,为每个超参数实例执行一次提交。

设置您使用的库的随机数生成器种子

Pytorch、tensorflow、numpy、python.random 等。这对于实验的可重复性是必要的,因为在模型参数化中经常涉及随机权重初始化的随机性,这会阻止实验的完全可重复性,随机数据集拆分……

GitPython 可用于在开始新运行时自动提交 Git。

使用 MLflow 管理您的 git 分支和实验

在尝试提高模型性能时,会运行许多实验配置,并且可能有多个人在不同的分支上处理同一个模型,或者您只是想针对您的问题为不同类型的模型创建不同的分支。

当您使用 MLFlow 和 Git 跟踪实验时,很快就会出现一个问题:可以创建许多“死”分支(数十个,甚至数百个)。通常,在许多分支中的许多实验中,只有少数分支适合部署。

这种情况会带来很多问题:

  • 我们应该丢弃没有显示好结果的分支吗?
  • 如果是,则 MLflow 存储的实验将指向不存在的提交,从而导致跟踪体验不完整,删除相关的 MLflow 实验将意味着擦除所有不推荐的实验痕迹。
  • 如果不是,我们还应该继续存储所有 MLflow 实验,否则它会破坏跟踪实验的目的。
  • 假设为了实验可追溯性,我们要保留所有分支。我们如何处理可能数百个实验分支?

解决方案

我在这里推荐的解决方案是保留所有的实验分支,只将结果最好的分支合并到 main/dev 分支。 (参见图 15)

Figure 15. Git workflow with MLflow

但是,随着保存的实验数量的增加,保存所有实验可能会成为存储问题。

与由于保存简单文本而在空间存储中成本较低的代码跟踪不同,实验跟踪可能会变得昂贵,具体取决于问题的复杂性。对于实验跟踪,除了代码之外,您还希望跟踪每次运行的指标和工件。

例如,在训练生成对抗网络 (GAN) 等复杂模型时,在训练阶段为自动模型选择设置足够有意义的指标并不容易,因为我们通常使用人工人工评估来断言这些模型的质量。这意味着必须保存每个检查点以进行手动训练后评估。

复杂的案例

每个检查点可以大到 ~500MB-1GB 的情况并不少见,当存储数百个运行且每个运行有数百个检查点时,这可能会迅速突破您的存储限制。在这些复杂的情况下,存储所有实验运行可能会变得过于昂贵,您可能需要删除没有希望的实验。

对于复杂的案例,您采用的管理分支和实验的策略最终归结为哪种信息对您的团队最重要。

如果您的团队想要记录所有的实验运行并且您负担得起,这是最好的解决方案。

如果您的团队只需要记录每个实验分支的最佳结果,您可以从 git 和 MLflow 中删除所有类似的实验运行。

在 MLflow 中运行“deleting”实验时,运行状态会从“active”切换到“deleted”。它们仍然存在于存储中。利用 ** 毫升流 gc** 从存储中永久擦除处于“已删除”状态的运行。

结论

MLflow 是一个特别强大的工具,它可以轻松地进行实验跟踪(指标、日志、工件、数据版本),因为它存储了所有相关信息,并提供了一个易于使用的实时分析 UI。它有一个全面的 Python API,无需任何样板代码即可轻松集成到您的代码中。由于大多数云提供商(AWS、Microsoft Azure、GCP)都支持服务器托管,因此它可以轻松地在本地设置或远程使用。它的自动记录功能支持大多数 ML 库(XGBoost、Pytorch-lightning、Keras、Scikit-learn 等),使开始实验变得轻而快。

尽管 MLflow 有很多优点,但它仍然缺乏一些理想的功能,例如对云存储的实验删除和垃圾收集支持。但是人们可以希望未来能够实现缺少的理想功能,因为 MLflow 拥有庞大的社区并被许多公司采用。

常见问题解答:有关 MLflow 的更多信息

本文属于关于数据和模型实验跟踪的 MLOps 工具和实践的系列文章。发表了四篇文章:

  1. 简介:为什么数据和模型实验跟踪很重要? DVC 和 Mlflow 等工具如何解决这一挑战
  2. DVC 如何巧妙地管理您的数据集,以便在 git 之上训练您的机器学习模型
  3. Mlflow 如何轻松跟踪您的实验并帮助您比较它们(本文)
  4. 用例:使用 DVC 和 Mlflow 轻松跟踪您的模型实验(即将推出)

如果您已经熟悉本文中介绍的概念,请随意跳到其他文章!

我强烈建议您从阅读 数据和模型实验跟踪介绍 ,如果不是这样的话。

要进一步了解 MLflow,您还应该访问此站点: MLflow — 机器学习生命周期平台

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/37010/53221612

posted @ 2022-09-16 12:56  哈哈哈来了啊啊啊  阅读(616)  评论(0编辑  收藏  举报