Kubeflow管线中的实验跟踪技术的详细介绍

239 阅读10分钟

实验跟踪一直是机器学习项目中最受欢迎的话题之一。很难想象在开发一个新项目时不跟踪每个实验的运行历史、参数和指标。

虽然有些项目可能会使用更 "原始 "的解决方案,比如将所有的实验元数据存储在电子表格中,但这绝对不是一个好的做法。一旦团队壮大,安排的实验越来越多,它就会变得非常乏味。

许多成熟和积极开发的工具可以帮助你的团队跟踪机器学习实验。在这篇文章中,我将介绍和描述其中的一些工具,包括TensorBoardMLFlowNeptune.ai,特别是在将它们与Kubeflow Pipelines(一个在Kubernetes上运行的流行框架)一起使用。

什么是Kubeflow?

要了解如何在Kubeflow管道中跟踪实验,我们需要了解Kubeflow是什么。

Kubeflow是一个先进的、可扩展的平台,用于在Kubernetes集群上运行机器学习工作流。它提供的组件涵盖了数据科学项目中经常执行的大多数典型任务,例如。

  • 笔记本。用于探索性数据分析、原型设计等。
  • 管线。用于定义和运行机器学习(或一般的数据)工作流程。
  • 卡蒂布。一个用于超参数优化和神经结构搜索的内部工具。

它还支持模型服务(使用KServe、Seldon和其他框架),与Feast功能商店集成,以及更多。你可以在他们的网站上阅读有关Kubeflow的组件、架构和可能的集成。

Kubeflow components

图1.Kubeflow组件的普及|来源:2021年Kubeflow世界的状况

Kubeflow的主要特点之一是它运行在Kubernetes上,维护起来可能相当有挑战性,但也能为机器学习项目带来许多好处,因为它能够按需调度和扩展工作负载,并将模型部署为微服务。

Kubeflow的工作可能相当复杂(Kubernetes也是如此),因为有这么多可用的功能,而且在引擎盖下发生的事情更多(整合这些组件、设置网络等)。在这篇文章中,我们将只关注KF的一个子集,即Kubeflow管道,我将在下一节介绍。

Kubeflow管道

根据2021年在Kubeflow社区中进行的调查,管道是最受欢迎的组件,比笔记本略受欢迎。这是因为这两个模块对每一个处于开发阶段的机器学习项目都至关重要。

Kubeflow中的管道是一个由各个步骤组成的图(例如,摄入数据、特征工程、训练)。这些组件的流程和它们之间共享的数据形成了一个管道,可以从Kubeflow用户界面或编程方式执行。其他管道框架,如Airflow、Prefect等,也采用了非常类似的定义。

这个组件的一个重要特点是,管道中的每一步都是在Kubernetes pods中运行的隔离容器中执行的。这种方法鼓励开发者编写模块化的代码,然后将其合并到一个管道中。

由于每个步骤都被定义为Docker镜像,在保持管道定义和数据流不变的情况下,更新或交换单个步骤也比较容易。这是成熟的、可扩展的机器学习管道的一个重要特征。

管道实例可以在Kubeflow管道库的`samples`目录中找到。

Kubeflow pipelines deployment

图2.Kubeflow管道的独立部署|来源:作者的图片

如前所述,管道可以手动、程序化地执行,并作为循环运行。这可能会导致每天执行几十次管道,这自然会产生对适当的实验跟踪解决方案的需求。

在这篇文章中,我将演示如何使用流行的 "实验跟踪 "工具来记录参数、指标和其他管道运行的元数据。我 们将探索不同的选项,从最简单的解决方案到最先进的。

Pipeline run in kubeflow pipelines

图3.图示Kubeflow管道中已完成的管道运行|来源:作者图片**

Kubeflow管道中的实验跟踪

令人惊讶的是,Kubeflow原生支持实验跟踪。虽然这不是最先进的解决方案,但它是开箱即用的,这无疑是你应该为你的团队考虑的一个好处。

每次运行都可以产生一组指标(如F1、召回率),然后显示在所有管道运行的列表视图中(见图4)。除了标量指标外,管道可以导出指标图,如混淆矩阵和ROC/AUC曲线。这样的工件也可以与其他指标一起被保存和分析。

这种方法的最大优点是它是与Kubeflow管道一起提供的,不需要额外的设置。另一方面,它是一个非常动态的项目,其文档往往是过时的或混乱的。

本文接下来描述的其他工具可能会提供更多的功能和灵活性,但可能需要额外的代码来与你的管道整合,或者也可能需要花费你。

Runs in kubeflow experiment tracking

图4.显示简单指标历史的已完成的运行列表 | 来源:作者的图片

Kubeflow管线中用于实验跟踪的其他工具

虽然使用内置的跟踪工具可能是最简单的解决方案,但对于你的使用情况来说,它可能不是最方便的。这就是为什么我将介绍其他一些流行的选择来跟踪管道结果。

TensorBoard

如果我没有记错的话,在过去,TensorBoard是一个简单的可视化工具,用于记录训练历史(损失和其他指标,如F1,准确率等)。现在,用户还可以记录图像和各种图表(直方图、分布图),以及模型图

Tensorboard for experiment tracking in kubelfow

图5.TensorBoard中的指标仪表板|来源:TensorBoard文档。来源:TensorBoard文档

你可能会注意到,这套功能与使用Kubeflow可以实现的功能有些类似,但TensorBoard可以提供更多的功能,例如模型剖析或与What-If工具集成以理解模型。此外,Kubeflow管道的文档显示,与TensorBoard的集成非常简单。

不幸的是,TensorBoard强烈倾向于TensorFlow/Keras用户,虽然它仍然可以与其他深度学习框架(如PyTorch)一起使用,但它的一些功能可能无法使用或难以集成。例如,What-If仪表板需要使用TFServing来提供模型,而模型分析器在引擎盖下使用TensorFlow分析器

MLFlow跟踪

另一个可以用来跟踪机器学习实验运行的工具是MLFlow。更具体地说,由于MLFlow现在提供了其他的组件(如模型注册,项目管理),负责实验监控的组件是MLFlow Tracking

MLflow for experiment tracking in kubelfow

图6.MLFlow跟踪用户界面|来源:Databricks。来源:Databricks

MLFlow Tracking的用户界面相当原始和简单,与我们在Kubeflow Pipelines中看到的相似。它支持简单的指标记录和可视化,以及存储参数。这个工具的优势来自于与MLFlow的其他组件的集成,如模型注册表

MLFlow可以在Databricks上"作为服务 "使用(按需付费),但大多数用户使用的是免费的开源版本。人们必须在本地或远程服务器上安装它才能使用它。然而,就Kubeflow管道而言,使用它最方便的方式是将其部署在Kubernetes集群上(你可以在本地安装或作为管理服务)。

这需要花费一些精力来

  • 在集群上构建和部署带有MLFlow跟踪服务器的Docker镜像。
  • 配置和部署Postgres数据库。
  • 部署MinIO(MLFLow的对象存储)服务,类似于Postgres。

因此,你需要在Kubernetes集群上部署、集成和维护三个独立的微服务,只是为了能够在内部使用MLFlow。如果你不能让你的任何日志存储在服务器之外,这可能是值得的,但请记住,在生产中维护这种服务需要一定的经验和技能。

MLflow的一些替代品包括Aimguild.ai

Neptune.ai

Neptune.ai结合了前面几个工具的良好特性。

此外,Neptune.ai还为你所有的ML实验提供元数据和工件存储。与MLFlow相比,开发者不需要在他们的机器上安装任何服务器或数据库。

Neptune for experiment tracking in kubelfow

图7. Neptune.ai UI | 来源。Neptune.ai文档

Neptune可以很容易地与Kubeflow管道集成,需在你的管道代码中使用其API客户端调用即可。要做到这一点,用户只需要获得一个Neptune API密钥,并将其存储在一个安全的地方,如Kubernetes secret。还有一件事是联网--你的集群必须能够使用API与Neptune通信,以便能够发送实验日志。

每个实验的元数据(参数、指标、图像)都存储在Neptune中,并使用API客户端从用户的管道发送。这是迄今为止最简单的方法,因为它把大部分的逻辑转移到了工具上。用户只需要安装Neptune客户端(以Python库的形式发布),将其实例化,然后发送日志或他们想要存储的任何类型的数据。

Neptune的另一个优点是用户可以在不同的项目上进行协作和工作。你可以创建许多项目并控制对它们的访问(为每个用户单独赋予读/写权限)。这对于那些会有多个团队在同一个实验跟踪工具上工作的大公司来说是极其重要的。

虽然将实验跟踪的结果存储在 "云 "中听起来对某些项目有很大的好处,但其他人可能会担心这种方法的隐私和安全问题。如果你想把Neptune部署在你的私有云或企业内部,也有这样的选择。

Neptune.ai的一些替代品包括Weights&BiasesComet

Kubeflow管线的实验跟踪工具的比较

总而言之,现在让我们看看我已经描述过的工具的比较表。它显示了在预算、维护工作或实验跟踪以外的组件的可用性方面的一些最重要的功能。

总结

有许多工具提供实验跟踪功能,我只描述了其中的几个。然而,我希望我能够指出这类工具的主要 "组别":有些是开箱即用的,但很有限;有些则必须和数据库一起部署在用户的机器上;还有一组工具是可管理的服务,只需要最小的努力就可以把它们和你的代码整合起来。

用户应该考虑到以下因素。

  • 公司的安全政策。如果你的公司对他们的数据要求非常严格,你可能会更喜欢那些可以完全离线托管的工具(在你的环境中),如TensorBoard或MLFlow。
  • 预算。一些工具是开源的,其他工具的定价取决于项目、实验或用户数量等因素。在做出选择时,也应考虑到这些因素。
  • 维护工具的能力。像Neptune或Weights&Biases这样的工具的明显优势是,使用它们只需要最小的努力,用户基本上没有什么需要维护的(除了他们的管道)。例如,如果你决定选择MLFlow,你需要在你的团队中负责设置部署、数据库和其他东西,有时一个团队可能缺乏技能来有效地完成这些。
  • 对其他功能的需求。在机器学习项目中,你很少只需要一个实验跟踪工具。迟早你会发现需要一个模型注册表、数据版本管理或其他功能。与其同时使用几十个不同的工具,不如坚持使用一个能够提供许多这些功能的供应商。