当前位置: 首页 > 科技观察

机器学习任务编排工具比较

时间:2023-03-17 10:07:18 科技观察

任务编排工具和工作流最近,出现了用于编排任务和数据工作流的新工具(有时称为“MLOps”)。这些工具的数量之多让人很难选择使用哪一个,也很难理解它们是如何重叠的,因此我们决定比较一些最流行的工具。>Airflow是最受欢迎的解决方案,其次是Luigi。也有更新的竞争者,他们'总的来说,ApacheAirflow是最流行和最通用的工具,但Luigi是一个类似的工具,上手更容易。Argo是团队在已经使用Kubernetes时经常使用的工具,而Kubeflow和MLFlow满足了与部署机器学习模型和跟踪实验相关的更多利基需求。在进行详细比较之前,了解一些与任务编排相关的更广泛的概念是很有用的。什么是任务编排,它为什么有用?较小的团队通常从手动管理任务开始,例如清理数据、训练机器学习模型、跟踪结果以及将模型部署到生产服务器。随着团队规模和解决方案的增长,重复步骤的数量也会增加。可靠地执行这些任务也变得更加重要。这些任务相互依赖的复杂方式也在增加。起初,您可能希望每周或每月运行一系列任务。这些任务需要按特定顺序运行。随着你的成长,这条管道变成了一个具有动态分支的网络。在某些情况下,某些任务会产生其他任务,而这些任务可能取决于首先运行的其他几个任务。该网络可以建模为DAG(有向无环图),它对每个任务以及它们之间的依赖关系进行建模。>管道是一个有限的DAG,其中每个任务最多有一个上游和一个下游依赖项,大多数工作流编排工具允许您通过指定所有任务以及它们如何相互依赖来定义DAG。然后,该工具按计划以正确的顺序执行这些任务,然后在运行下一个任务之前重试任何失败的任务。它还会监控进度并在出现故障时通知您的团队。Jenkins等CI/CD工具(通常用于自动化测试和部署代码)与任务编排工具之间有很强的相似之处,但也存在重要差异。虽然理论上您可以使用这些CI/CD工具来编排动态的、相互关联的任务,但在一定程度的复杂性下,您会发现切换到更通用的工具(如ApacheAirflow)会更容易。总的来说,任何编排工具的重点都是确保集中、可重复、可再现和高效的工作流程:一个用于所有自动化任务的虚拟指挥中心。考虑到这一点,让我们看看一些最流行的工作流工具是如何叠加的。告诉我使用哪一个您可能应该使用:ApacheAirflow如果您想要功能最全、最成熟的工具,您可以花时间了解它的工作原理、设置和维护。Luigi,如果你需要比Airflow更简单的学习方法。它的功能较少,但更容易上手。Argo,如果你已经深深地投资于Kubernetes生态系统,并希望将你的所有任务作为Pod来管理,并在YAML(而不是Python)中定义它们。如果你想使用Kubernetes,但仍然使用Python而不是YAML来定义任务,那么使用KubeFlow。MLFlow,如果您更关心使用MLFlow的预定义模式跟踪实验或跟踪和部署模型,而不是寻找可以适合现有自定义工作流程的工具。比较表>(来源:作者)——获取更多机器学习技巧——获取我们的每周时事通讯受欢迎程度:基于采用率和GitHub星级;简单性:基于易于注册和采用;广度:基于每个项目的专业性和适应性;语言:基于您与该工具交互的主要方式。这些不是严格的基准或科学基准,而是旨在让您快速了解这些工具如何重叠以及它们彼此之间有何不同。有关更多详细信息,请参见下面的面对面比较。LuigivsAirflowLuigi和Airflow解决类似的问题,但Luigi简单得多。它包含在一个组件中,而Airflow有多个模块,可以用不同的方式配置。Airflow拥有更大的社区和一些额外的功能,但学习曲线要??陡峭得多。具体来说,Airflow在计划方面要强大得多,它提供了一个日历UI来帮助您设置任务应该运行的时间。使用Luigi,您需要编写更多自定义代码才能按计划运行任务。这两种工具都使用Python和DAG来定义任务和依赖关系。如果你有一个小团队并且需要快速入门,请使用Luigi。如果你有一个更大的团队,一旦你克服了学习曲线,Airflow可以用来从最初的生产力损失中获得更多动力。Luigivs.ArgoArgo建立在Kubernetes之上,每个任务都作为一个单独的Kubernetes容器运行。如果您已经在大部分基础设施中使用Kubernetes,这可能会很方便,但如果您没有使用,则会增加复杂性。Luigi是一个Python库,可以使用pip和conda等Python包管理工具进行安装。Argo是一个Kubernetes扩展,使用Kubernetes安装。虽然这两种工具都可以将任务定义为DAG,但使用Luigi,您将使用Python编写这些定义,而使用Argo,您将使用YAML。如果您已经投资于Kubernetes并且知道所有任务都是Pod,请使用Argo。还应该考虑编写DAG定义的开发人员是否更喜欢YAML而不是Python。如果您没有在Kubernetes上运行并且您的团队中有Python专业知识,请使用Luigi。Luigi与KubeflowLuigi是一个基于Python的通用任务编排库,而Kubeflow是一个基于Kubernetes的工具,专门用于机器学习工作流程。Luigi专为编排一般任务而构建,而Kubeflow具有用于实验跟踪、超参数优化和服务Jupyter笔记本的预构建模式。Kubeflow由两个不同的组件组成:Kubeflow和KubeflowPipeline。后者侧重于模型部署和CI/CD,可以独立于主要的Kubeflow功能使用。如果您需要协调从数据清理到模型部署的各种不同任务,请使用Luigi。如果您已经使用Kubernetes并希望安排常见的机器学习任务(例如实验跟踪和模型训练),请使用Kubeflow。Luigi与MLFlowLuigi是一个通用的任务编排系统,而MLFlow是一个更专业的工具,可以帮助管理和跟踪您的机器学习生命周期和实验。您可以使用Luigi来定义常规任务和依赖项(例如训练和部署模型),但您可以将MLFlow直接导入到您的机器学习代码中并使用其辅助函数来记录信息(例如您正在使用的参数)和工件(例如经过训练的模型)。您还可以将MLFlow用作命令行工具,为使用scikit-learn等常用工具构建的模型提供服务,或将它们部署到AzureML或AmazonSageMaker等常用平台。Airflow与ArgoArgo和Airflow都允许您将任务定义为DAG,但在Airflow中,您可以使用Python执行此操作,而在Argo中,您可以使用YAML。Argo将每个任务作为Kubernetespod运行,而Airflow则存在于Python生态系统中。Canva在选择Argo之前对这两个选项进行了评估,您可以观看此演讲以进行详细的比较和评估。如果你想要一个更成熟的工具并且不关心Kubernetes,请使用Airflow。如果您已经投资于Kubernetes并希望运行在不同堆栈中编写的各种任务,请使用Argo。Airflowvs.KubeflowAirflow是一个通用的任务编排平台,而Kubeflow则专门专注于实验跟踪等机器学习任务。这两种工具都允许您使用Python定义任务,但Kubeflow在Kubernetes上运行任务。Kubeflow分为Kubeflow和KubeflowPipelines:后者组件允许您指定DAG,但它比常规任务更侧重于部署和模型服务。如果您需要一个成熟、广泛的生态系统来处理各种不同的任务,请使用Airflow。如果您已经在使用Kubernetes并希望使用更多开箱即用的机器学习解决方案模式,请使用Kubeflow。Airflow与MLFlowAirflow是一个通用的任务编排平台,而MLFlow是专门为优化机器学习生命周期而构建的。这意味着MLFlow具有运行和跟踪实验以及训练和部署机器学习模型的能力,而Airflow具有广泛的用例,您可以使用它来运行任何一组任务。Airflow是一组用于管理和调度任务的组件和插件。MLFlow是一个Python库,您可以将其导入到现有的机器学习代码中,还可以使用命令行工具训练用scikit-learn编写的机器学习模型并将其部署到AmazonSageMaker或AzureML。如果您想要一种开箱即用的方式来管理机器学习实验和部署,请使用MLFlow。如果您有更复杂的要求并希望更好地控制机器学习生命周期的管理方式,请使用Airflow。Argovs.KubeflowKubeflow的某些部分(例如Kubeflow管道)构建在Argo之上,但Argo旨在编排任何任务,而Kubeflow专注于机器学习特定任务,例如实验跟踪、超参数调整和模型部署。.Kubeflowpipeline是Kubeflow的一个独立组件,专注于模型部署和CI/CD,可以独立于Kubeflow的其他特性使用。这两个工具都依赖于Kubernetes,如果您已经采用它,您可能会对它更感兴趣。使用Argo,您可以使用YAML定义任务,而Kubeflow允许您使用Python接口。如果您需要管理作为KubernetesPod运行的常规任务的DAG,请使用Argo。如果您想要一个更专注于机器学习解决方案的工具,请使用Kubeflow。Argo与MLFlowArgo是一种任务编排工具,可让您将任务定义为KubernetesPod,并将它们作为DAG(使用YAML定义)运行。MLFlow是一种更专业的工具,不允许您定义任意任务或它们之间的依赖关系。相反,您可以将MLFlow作为Python库导入到现有(Python)机器学习代码库中,并使用其辅助函数来记录工件和参数,以帮助分析和实验跟踪。您还可以使用MLFlow的命令行工具来训练scikit-learn模型,将它们部署到AmazonSagemaker或AzureML,并管理Jupyter笔记本。如果您需要管理日常任务并希望在Kubernetes上运行它们,请使用Argo。如果您想要一种固执己见的方法来使用托管云平台管理机器学习生命周期,请使用MLFlow。Kubeflowvs.MLFlow与Airflow或Luigi等通用任务编排平台相比,Kubeflow和MLFlow都是更小、更专业的工具。Kubeflow依赖于Kubernetes,而MLFlow是一个Python库,可帮助您将实验跟踪添加到现有的机器学习代码中。Kubeflow允许您构建完整的DAG,其中每个步骤都是一个Kubernetespod,但MLFlow具有将scikit-learn模型部署到AmazonSagemaker或AzureML的内置功能。