【翻译】开源机器学习流水线工具调研(MLOps)(下)

简介: 实施数据科学项目不是一件简单的任务。至少,数据分析工作流程必须定期运行,以产生最新的结果。比如,一份上周数据的报告,或者由于概念发生变化而重新训练机器学习模型。在某些情况下,这类工作流的输出需要作为API公开,例如,一个经过训练的机器学习模型,通过点击REST端点来生成预测结果。这就需要开发实践允许工作流(也称为pipeline)是可重现、可重复,并且可以很容易地部署。近年来,涌现了大量开源工作流管理工具。由于有太多的选择,团队很难选择最适合他们需求的工具,本文回顾了13种开源工作流管理工具。

Ploomber

评估部分 分数 评价
易用性 3 使用约定优于配置的方法,开始时,您只需在脚本/notebooks中包含两个特殊变量,Ploomber 将编排执行。 为了获得更大的灵活性,您可以使用 YAML 指定您的pipeline,对于高级用例,请使用 Python API。
开发实践 3 工作流可以在单个进程或多个进程(并行)中本地执行。 提供增量构建。
调试 3 pdbipdb 集成,您可以在任何任务上启动逐行调试会话,或者让管道运行并在任务崩溃时启动事后分析会话。
测试 3 在任务执行时使用on_finish 钩子执行集成测试。管道是常规的Python对象,您可以导入它们并使用您选择的测试框架进行测试。
部署 1 支持将工作流导出到 Airflow 和 Argo (Kubernetes),然而,此功能仅提供基本功能,但正在积极开发中。 Python批处理管道可以导出到内存中审阅观察结果,此对象可与任何 Web 框架一起使用,以创建 API 端点。
编程语言 2 支持任何带有 Python 连接的数据库。 完整的 R 支持。 对具有 Jupyter 内核的语言(例如 Julia)的支持有限。
可维护性 3 任务可以是脚本 (Python/R/SQL)、notebook或 Python 函数,您可以选择对您的项目更有用的任何内容。 任务库(公开统一的 API)为常见任务(例如运行 SQL 脚本、转储数据库表)提供了功能。以减少样板代码。
Jupyter notebooks 支持 3 可以使用 Jupyter 以交互方式开发脚本和notebooks,然后以编程方式执行。

资料

Prefect

评估部分 分数 评价
易用性 2 基于函数的工作流是用干净的Python API编写的。任务库包含各种各样的任务,然而,只有少数与数据科学/机器学习项目相关。
开发实践 2 工作流可以在本地执行。不支持增量构建。
调试 3 您可以查看每个任务的输出和状态。还有使工作流调试变得简单的工具。
测试 NA 不支持集成测试。不支持pipeline测试。
部署 1 可以使用web界面部署(调度)工作流,但该界面只能执行Prefect工作流。不支持在其他系统中运行工作流。Prefect server有一个非标准开源许可证
编程语言 1 虽然支持一些SQL数据库(例如postgressnowflakesqlite),但每个模块都有不同的API。不支持R和Julia。
可维护性 3 很棒的API和最小的样板代码。
Jupyter notebooks 支持 1 支持以编程方式执行notebooks。 不支持以交互方式开发任务。

资料

Tensorflow Extended (TFX)

评估部分 分数 评价
易用性 1 该API非常复杂,它要求您在开始使用之前熟悉几个模块。
开发实践 2 可以在本地执行管道。不支持增量构建。
调试 NA 没有调试工具。
测试 1 技术上可行,因为您可以在本地运行工作流,但是,本地工作流必须显式启用交互模式,当在测试框架下运行时,这是否会引起麻烦还不清楚。不支持管道测试。
部署 3 共有三个部署选项:Airflow、Kubeflow Pipelines 和 Apache Beam,但是,示例仅针对 Google Cloud 提供。可以使用Tensorflow serving将工作流公开为API。
编程语言 NA 仅限Python。
可维护性 NA TFX 是一个 Tensorflow 独有的框架,这意味着你不能带其他库,比如 numpy 或 pandas。 还有大量样板代码使不熟悉 Tensorflow 生态系统的人难以理解管道。
Jupyter notebooks 支持 1 您可以交互式地开发pipelines,并在单个notebook中运行它们。不支持以编程方式执行notebooks。

资料

评价标准

1.易用性

对于任何软件工具来说,拥有一个允许用户快速入门的干净API都是必不可少的,而对于数据分析工具来说更是如此,因为用户的编程熟练程度各不相同。

通常情况下,数据分析项目是实验性的/探索性的,并会经历初始的“原型设计”阶段。实践者往往远离“生产工具”,因为他们通常有一个陡峭的学习曲线,这会减慢进度。因此,许多数据科学家将整个数据pipelines写在一个notebook上。这是一个糟糕的实践,因为它创建了不可维护的软件。

避免这种糟糕实践的唯一方法是提供添加最小开销的生产工具,使它们更吸引人,并且实践者从第一天开始就使用它。这是一种糟糕的做法,因为它会创建无法维护的软件。

避免这种糟糕做法的唯一方法是提供增加最小开销的生产工具,使它们更具吸引力,从业者从一开始就使用它。

2. 开发实践

数据科学/机器学习是高度迭代的,特别是在”原型“阶段。

我们首先粗略地了解我们必须进行什么样的分析,并随着我们对数据了解的加深而进一步完善。数据科学家花费大量时间修改代码的一小部分,然后重新运行分析,看看这些更改如何影响结果(例如添加一个新特性)。

增量构建是促进这个迭代过程的关键。当数据科学家在单个任务中修改几行代码时,不需要从端到端(从头到尾)重新执行管道,只需要执行被修改/受影响的任务

部署的数据流水线(Pipeline)通常由生产系统(如:Airflow 调度器或 Kubernetes)管理,然而,能够在不需要任何额外基础设施的情况下进行本地开发对于促进快速开发至关重要

3. 调试

众所周知,数据流水线(Pipeline)很难调试,因为错误可能来自不正确的代码或出乎意料的数据属性。能够启动一个交互式会话来调试我们的代码比查看一堆打印(或日志)语句更有效。

工作流管理器经常以特定的方式执行我们的代码(例如,multiprocessing、远程workers等),这可能会导致标准的Python调试工具无法工作。我们评估是否有可能使用标准工具来调试工作流。

4. 测试

出乎意料的数据会以多种方式破坏流水线(Pipeline)。

最好的情况是,下游任务因为架构兼容性而崩溃,最坏的情况是:管道成功地运行,但产生不正确的结果(例如,一个性能很差的模型)。

为了防止这种隐蔽的bug,在任务执行之后测试制品变得越来越普遍,这被称为集成测试或数据测试。例如,在对数据集应用转换后,检查数据集中是否没有“NULL”值。我们评估对集成测试的支持。

第二个(经常被忽略的)特性是测试我们的工作流的能力。工作流是复杂的,因为它们包含了多个阶段的过程,这些过程之间存在依赖关系。能够在测试环境中运行和检查我们的工作流有助于在开发而不是生产期间检测bug。考虑使用诸如“pytest”之类的测试工具测试工作流的能力。

5. 部署

数据工作流的两种最常见的部署模式是批处理和在线服务。

批量部署的一个例子是一个工作流,它处理新的观察结果(通常按计划进行),做出预测并将其上传到数据库。

在线服务场景涉及到将流水线公开为API(例如:REST/RPC),该API接受输入数据并返回预测结果。

当服务期间的预处理代码与训练期间的预处理代码不同时,部署期间就会发生一个常见错误(训练服务倾斜)。我们评估重用现有训练代码的能力,以消除这个问题。

我们还评估了部署方案是否支持与其他开源部署工具(如:Airflow、Kubernetes)集成。

6. 编程语言

虽然由于深度学习,使用非结构化数据训练ML模型变得越来越普遍,但表格数据和经典 ML 算法仍然是最常见的应用类型(见本报告第19页)。

表格数据通常存储在SQL数据库中,这意味着我们的流水线通常是SQL和Python的组合。我们还评估了将SQL脚本作为工作流一部分的能力。最后,我们还评估了对其他流行的数据分析语言(如R和Julia)的支持

7. 可维护性

主要评估项目的可维护性。

要考虑的第一个方面是声明流水线所需的代码量(更少的代码更好)。

第二个方面是代码组织,我们确定库是否施加了限制,从而限制了我们在单独的函数/模块中组织代码的能力。

还评估了可能影响代码可维护性的特定工具的特性。

8. Jupyter notebooks 支持

在生产流水线(pipelines)中使用notebooks总是会引发激烈的争论,但我认为问题来自于糟糕的开发实践,而不是notebooks本身。

notebooks是探索工作的绝佳环境,这正是我们在学习数据时所需要的。能够交互式地开发工作流对生产力有很大的积极影响

notebooks的第二个重要用途是作为输出格式。 .ipynb 格式支持在单个文件中嵌入表格和图表,无需任何额外的代码。这是一个巨大的时间节省,因为当我们可以用图表查看数据时,调试工作流会容易得多,而使用基于文本的日志查找错误严重限制了这个过程。

拥有一个 .ipynb 文件作为执行工作流任务的结果,类似于有丰富的日志,以方便调试。

相关文章
|
5月前
|
机器学习/深度学习 数据可视化 搜索推荐
Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。
【7月更文挑战第5天】Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。流程包括数据获取、预处理、探索、模型选择、评估与优化,以及结果可视化。示例展示了用户行为、话题趋势和用户画像分析。Python的丰富生态使得社交媒体洞察变得高效。通过学习和实践,可以提升社交媒体分析能力。
87 1
|
2月前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
55 2
|
7月前
|
机器学习/深度学习 人工智能 PyTorch
《人工智能专栏》专栏介绍 & 专栏目录 & Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程
《人工智能专栏》专栏介绍 & 专栏目录 & Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程
192 1
|
6月前
|
机器学习/深度学习 边缘计算 TensorFlow
Python机器学习工具与库的现状,并展望其未来的发展趋势
【6月更文挑战第13天】本文探讨了Python在机器学习中的核心地位,重点介绍了Scikit-learn、TensorFlow、PyTorch等主流库的现状。未来发展趋势包括自动化、智能化的工具,增强可解释性和可信赖性的模型,跨领域融合创新,以及云端与边缘计算的结合。这些进展将降低机器学习门槛,推动技术在各领域的广泛应用。
79 3
|
5月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
7月前
|
机器学习/深度学习 数据采集 分布式计算
机器学习流水线的六个步骤
【5月更文挑战第30天】机器学习应用通过构建流水线实现,简化大数据需求和学习任务的处理,使用户能专注核心任务而非基础设施。
|
7月前
|
机器学习/深度学习 边缘计算 TensorFlow
【Python机器学习专栏】Python机器学习工具与库的未来展望
【4月更文挑战第30天】本文探讨了Python在机器学习中的关键角色,重点介绍了Scikit-learn、TensorFlow和PyTorch等流行库。随着技术进步,未来Python机器学习工具将聚焦自动化、智能化、可解释性和可信赖性,并促进跨领域创新,结合云端与边缘计算,为各领域应用带来更高效、可靠的解决方案。
74 0
|
7月前
|
存储 机器学习/深度学习 人工智能
基于Megatron-Core的稀疏大模型训练工具:阿里云MoE大模型最佳实践
随着大模型技术的不断发展,模型结构和参数量级快速演化。大模型技术的应用层出不穷。大模型展现惊人效果,但训练和推理成本高,一直是巨大挑战。模型稀疏化能降低计算和存储消耗。近期以Mixtral为代表的MoE(多专家混合)大模型证明了稀疏MoE技术能大幅降低计算量、提升推理速度,模型效果甚至超过同规模稠密模型。阿里云PAI和NVIDIA团队深入合作,基于Megatron-Core MoE框架,解决了MoE大模型训练落地时会遇到的可拓展性、易用性、功能性以及收敛精度等核心问题,在下游任务上取得了很好的模型效果。
|
7月前
|
JSON 自然语言处理 对象存储
|
7月前
|
JSON 自然语言处理 对象存储
通义千问开源模型在PAI灵骏的最佳实践
本文将展示如何基于阿里云PAI灵骏智算服务,在通义千问开源模型之上进行高效分布式继续预训练、指令微调、模型离线推理验证以及在线服务部署。