Press "Enter" to skip to content

“ML流水线架构设计模式(附带10个真实世界的示例)”

每个机器学习从业者都会意识到,在Jupyter Notebook中训练模型只是整个项目的一小部分。构建一个可以将原始数据转化为预测结果的工作流程,同时保持响应性和灵活性,才是真正需要解决的问题。

在这一点上,数据科学家或机器学习工程师会变得好奇,并开始寻找相关实现。许多关于构建机器学习流水线和系统的问题已经得到了回答,并源自行业最佳实践和模式。但其中一些问题仍然经常出现并没有得到很好的解释。

机器学习流水线应该如何运作?如何实现以适应可扩展性和适应性,并同时保持易于故障排除的基础架构?

机器学习流水线通常由相互连接的基础架构组成,使得组织或机器学习团队能够采用一致、模块化和结构化的方法构建、训练和部署机器学习系统。然而,这种高效的系统并不是独立运行的,它需要全面的架构方法和周到的设计考虑。

但是,这些术语——机器学习设计和架构——究竟是什么意思?一个复杂的软件系统,比如机器学习流水线机制,如何能够高效地工作?本文将通过探讨以下内容来回答这些问题:

  • 1
    什么是流水线架构和设计考虑,了解它的优势有什么好处?
  • 2
    探索知名科技公司中的标准机器学习流水线/系统设计和架构实践
  • 3
    解释常见的机器学习流水线架构设计模式
  • 4
    介绍机器学习流水线的常见组件
  • 5
    介绍用于实现和维护机器学习流水线的工具、技术和软件
  • 6
    机器学习流水线架构示例
  • 7
    设计和开发机器学习流水线时要考虑的常见最佳实践

那么,让我们开始吧!

什么是机器学习流水线架构设计模式?

这两个术语通常可以互换使用,但它们具有不同的含义。

机器学习流水线架构就像交响乐的高层乐谱一样。它概述了机器学习流水线中的组件、阶段和工作流程。架构考虑主要集中在组件之间的安排、涉及的流程和阶段。它回答了这个问题:“流水线中将包括哪些机器学习过程和组件,它们的结构是怎样的?”

相反,机器学习流水线设计则深入探讨了机器学习流水线的构成,涉及用于实现流水线及其组件的工具、范例、技术和编程语言。它是作曲家的触动,回答了这个问题:“流水线中的组件和过程将如何实现、测试和维护?”

尽管有许多关于机器学习流水线设计和架构模式的技术信息,但本文主要涵盖以下内容:

了解机器学习流水线架构的优势

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第1张
机器学习流水线架构的四个支柱 | 来源:作者

机器学习工程师、数据科学家和机器学习从业者应该了解机器学习流水线架构和设计中存在的模式的几个原因,其中一些原因如下:

  • 效率:了解机器学习流水线架构和设计中的模式可以帮助从业者确定快速项目交付所需的技术资源。
  • 可扩展性:机器学习流水线架构和设计模式使您能够优先考虑可扩展性,从而使从业者能够以可扩展性为先的方式构建机器学习系统。这些模式介绍了处理大量数据模型训练、低延迟模型推断等问题的解决方案。
  • 模板化和可重复性:典型的流水线阶段和组件在团队中变得可复制,利用熟悉的模式,使成员能够高效地复制机器学习项目。
  • 标准化:一个组织如果在机器学习流水线架构和设计中采用相同的模式,就能够更容易地更新和维护整个组织的流水线。

常见的机器学习流水线架构步骤

在介绍了了解机器学习流水线架构和设计模式的重要性之后,下面的章节将介绍在机器学习流水线的各个阶段或组件中发现的常见架构和设计方法。

ML管道被分为称为阶段的部分,由一个或多个组件或进程组成,它们一起工作以产生ML管道的输出。多年来,ML管道中涉及的阶段已经增加。

不到十年前,当机器学习行业主要是研究为主时,像模型监控、部署和维护这样的阶段是不存在或优先级较低的考虑因素。快进到当前时代,ML管道中的监控、维护和部署阶段已经成为优先考虑的内容,因为生产系统中的模型需要维护和更新。这些阶段主要属于MLOps(机器学习运维)领域。

今天,不论行业或业务功能如何,构建满足技术、工业和业务要求的ML管道都存在不同的阶段。本节将深入探讨大多数ML管道中的常见阶段。

  • 1
    数据摄取(例如,Apache Kafka,Amazon Kinesis)
  • 2
    数据预处理(例如,pandas,NumPy)
  • 3
    特征工程和选择(例如,Scikit-learn,Feature Tools)
  • 4
    模型训练(例如,TensorFlow,PyTorch)
  • 5
    模型评估(例如,Scikit-learn,MLflow)
  • 6
    模型部署(例如,TensorFlow Serving,TFX)
  • 7
    监控和维护(例如,Prometheus,Grafana)

现在我们了解了标准ML管道中的组件,以下是您在整个ML管道中将遇到的子管道或系统。

  • 数据工程管道
  • 特征工程管道
  • 模型训练和开发管道
  • 模型部署管道
  • 生产管道

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第2张

构建ML管道:6个问题和解决方案

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第2张

10个ML管道架构示例

让我们更深入地了解一些最常见的架构和设计模式,并详细探讨它们的示例、优点和缺点。

单一领导者架构

什么是单一领导者架构?

对常见的机器学习管道架构和模式的探索始于一种模式,它不仅存在于机器学习系统中,还存在于数据库系统、流式平台、Web应用程序和现代计算基础设施中。单一领导者架构是一种在开发大规模机器学习管道时利用的模式,旨在提供可管理的各个组件基础设施。

单一领导者架构利用主从范式;在该架构中,领导者或主节点了解系统的整体状态,根据资源可用性管理任务的执行和分配,并处理写操作。

从者或从节点主要执行读操作。在ML管道的上下文中,领导者节点负责编排各种任务的执行,根据资源可用性将工作负载分配给从者节点,并管理系统的整体状态。

同时,从者节点执行领导者节点分配的任务,例如数据预处理、特征提取、模型训练和验证。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第4张
ML管道架构设计模式:单一领导者架构 | 来源:作者

单一领导者架构的真实世界示例

为了看到单一领导者架构在机器学习管道中大规模使用,我们必须看一下提供个性化视频推荐给全球数百万用户的最大流媒体平台之一,Netflix。

在Netflix的工程团队内部,他们构建了Meson来管理、编排、调度和执行ML/数据管道中的工作流。Meson管理ML管道的生命周期,提供推荐和内容分析等功能,并利用单一领导者架构。

Meson拥有70,000个已调度的工作流,每天执行超过500,000个作业。在Meson内部,领导者节点跟踪和管理分配给从者节点的每个作业执行的状态,通过识别和纠正失败的作业提供容错能力,并处理作业执行和调度。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第5张
单主节点架构的实际例子 | 来源

单主节点架构的优点和缺点

为了了解何时在机器学习流水线组件中利用单主节点架构,有助于探索其关键优点和缺点。

  • 单主节点架构的显著优点包括容错性、可扩展性、一致性和去中心化。
  • 在工作流操作和管理中,单个节点或系统的一部分负责,因此可以直接识别采用单主节点架构的流水线中的故障点。
  • 它通过重定向/重新分配作业的执行来有效处理意外的处理故障,提供整个ML流水线中的数据和状态的一致性,并作为所有流程的单一真实来源。
  • 采用单主节点架构的ML流水线可以通过增加追随者节点的数量来水平扩展,以进行额外的读操作。
“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第6张
ML流水线架构设计模式:单主节点架构的扩展 | 作者:来源

然而,尽管具有这些优点,单主节点架构对于ML流水线可能存在一些问题,如扩展性、数据丢失和可用性。

  • 单主节点架构中的写扩展性受限,这种限制可能成为整体作业/工作流编排和管理速度的瓶颈。
  • 所有写操作都由架构中的单个主节点处理,这意味着虽然读操作可以进行水平扩展,但由主节点处理的写操作无法按比例或根本无法扩展。
  • 如果主节点发生故障,单主节点架构可能会有较长的停机时间,这会导致流水线的可用性问题,并由于架构对主节点的依赖而导致整个系统失败。

随着Meson管理的工作流程数量的增加,单主节点架构开始显示出规模问题的迹象。例如,在高峰流量时会出现速度缓慢的问题,并且在非工作时间需要密切监控。随着使用量的增加,系统必须进行垂直扩展,接近AWS实例类型的限制。

因此,开发了Maestro,它使用无共享架构进行水平扩展并同时管理数百万个工作流和步骤实例的状态。

Maestro在由机器学习功能支持的现代应用程序中结合了几种架构模式。这些包括无共享架构、事件驱动架构和有向无环图(DAG)。每种架构模式在增强机器学习流水线的效率方面发挥着关键作用。

下一节将深入探讨这些架构模式,探索它们在机器学习流水线中的应用,以简化数据摄取、处理、模型训练和部署。

有向无环图(DAG)

什么是有向无环图架构?

有向图由节点、边和方向组成。节点表示进程;图中的边表示进程之间的关系,边的方向表示进程执行或数据/信号传输的流向。

对图应用约束条件可以表达和实现具有顺序执行流的系统。例如,图中禁止顶点或节点之间的循环。这种类型的图被称为无环图,意味着一个或多个节点之间没有循环关系(有向循环)。

无环图通过避免两个节点之间的循环消除了节点、点或进程之间的重复。通过将有向边和节点之间的非循环关系相结合,我们得到了有向无环图。

有向无环图(DAG)以一种表示活动的方式,将活动表示为节点,将节点之间的依赖关系表示为指向另一个节点的边。特别地,在DAG中,避免了边之间的循环或循环。

DAG具有拓扑属性,这意味着DAG中的节点按线性顺序排序,节点按顺序排列。

在此排序中,连接到其他节点的节点位于其指向的节点之前。这种线性排列确保了有向边只能向前移动,防止发生任何循环。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第7张
机器学习流水线架构设计模式:有向无环图(DAG)| 来源:作者

有向无环图架构的实际例子

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第8张
有向无环图架构的实际例子 | 来源:作者

使用有向无环图(DAG)的一个适合的实际例子是类似Uber或Lyft这样的打车应用程序中的流程。在这个上下文中,DAG代表了作为节点的活动、任务或作业的顺序,而连接每个节点的有向边表示执行顺序或流程。例如,用户必须通过应用程序请求司机,然后司机才能前往用户的位置。

此外,Netflix的Maestro平台使用DAG来编排和管理机器学习/数据流水线中的工作流。在这里,DAG代表了包含用于操作的作业定义的工作流,这些作业定义被称为步骤。

想要在机器学习流水线和项目中利用DAG架构的从业者可以利用DAG的架构特性,以可预测和高效的方式实施和管理一系列操作的描述。

DAG的这个主要特性使得在复杂的机器学习流水线中定义工作流的执行更加可管理,特别是在机器学习流水线内的过程、作业或操作之间存在高度依赖性的情况下。

例如,下面的图像描绘了一个标准的机器学习流水线,包括数据摄取、预处理、特征提取、模型训练、模型验证和预测。流水线中的阶段按顺序执行,当前一个阶段标记为完成并提供输出时,下一个阶段开始执行。流水线中的每个阶段都可以被定义为DAG中的节点,有向边表示流水线阶段/组件之间的依赖关系。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第9张
标准的机器学习流水线 | 来源:作者

有向无环图架构的优点和缺点

  • 使用DAG可以高效地执行各种应用程序中的进程和任务,包括大数据分析、机器学习和人工智能,其中任务之间的依赖关系和执行顺序至关重要。
  • 在打车应用程序的情况下,每个活动的结果都有助于完成打车流程。DAG的拓扑排序确保活动的正确顺序,从而促进流程的顺畅进行。
  • 对于像Netflix的Maestro中的机器学习流水线那样的流水线,DAG提供了一种逻辑方式来说明和组织过程操作的顺序。DAG中的节点对应于标准组件或阶段,例如数据摄取、数据预处理、特征提取等。
  • 有向边表示过程之间的依赖关系和过程执行的顺序。此特性确保所有操作按正确的顺序执行,并且还可以识别并行执行的机会,从而减少总体执行时间。

虽然DAG提供了可视化任务之间相互依赖关系的优势,但在由大量节点和任务之间的依赖关系组成的复杂机器学习流水线中,这个优势可能变得不利。

  • 对于最终变得非常复杂并由DAG模型建模的机器学习系统,管理、理解和可视化都变得具有挑战性。
  • 在现代机器学习流水线中,这些流水线预期具有适应性并在动态环境或工作流中运行时,DAG不适合对这些系统或流水线进行建模和管理,主要是因为DAG适用于具有预定义依赖关系的静态工作流。

然而,在当今动态的机器学习流水线中,可能存在更好的选择。例如,想象一个实时检测网络流量异常的流水线。这个流水线必须适应网络结构和流量的不断变化。静态的DAG可能无法建模这样的动态依赖关系。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第2张

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第2张

从 Stitch Fix 构建的 ML 平台中学到的经验以及与 Stefan Krawczyk(DAGWorks)的更多讨论

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第2张

foreach 模式

什么是 foreach 模式?

机器学习流水线中的架构和设计模式可以在流水线阶段的操作实现中找到。实现的模式在机器学习流水线内被利用,以实现对数据集进行操作的顺序和高效执行。其中一种模式就是 foreach 模式。

foreach 模式是一种代码执行范式,它会针对集合或数据集中的项出现的次数循环执行一段代码。这种模式在顺序和递归执行的机器学习流水线中的过程、组件或阶段中特别有用。这意味着在提供输出并进入下一个过程或阶段之前,同一个过程可以被执行多次。

例如,标准数据集包含多个数据点,必须通过相同的数据预处理脚本进行转换以得到所需的数据格式。在这个例子中,foreach 模式被用作重复调用处理函数 ‘n’ 次的方法。通常情况下,’n’ 对应于数据点的数量。

foreach 模式的另一个应用可以在模型训练阶段中观察到,其中模型会反复接触数据集的不同分区进行训练,以及其他分区进行指定时间的测试。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第13张
ML 流水线架构设计模式:foreach 模式 | 来源:作者

foreach 模式的一个现实世界的例子

foreach 模式在 Netflix 的 ML/数据流水线协调器和调度器 Maestro 中有一个现实世界的应用。Maestro 的工作流由包含按 DAG(有向无环图)架构定义的顺序执行的步骤/作业的作业定义组成。在 Maestro 中,foreach 模式在内部被用作由定义的步骤/作业组成的子工作流,其中步骤会被重复执行。

正如之前提到的,foreach 模式可以在机器学习流水线的模型训练阶段中使用,其中模型会反复接触数据集的不同分区进行训练,以及其他分区在指定时间内进行测试。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第14张
在机器学习流水线的模型训练阶段中使用的 foreach ML 流水线架构模式 | 来源:作者

foreach 模式的优缺点

  • 在 ML 流水线中利用 DAG 架构和 foreach 模式可以实现强大、可扩展和可管理的 ML 流水线解决方案。
  • 然后可以在每个流水线阶段内利用 foreach 模式以重复方式执行操作,例如在数据预处理场景中多次调用处理函数。
  • 这种设置提供了对复杂工作流在 ML 流水线中的高效管理。

下面是一个利用 DAG 和 foreach 模式的 ML 流水线示例。流程图表示一个机器学习流水线,其中每个阶段(数据收集、数据预处理、特征提取、模型训练、模型验证和预测生成)被表示为一个有向无环图(DAG)节点。在每个阶段内,”foreach” 模式被用于对集合中的每个项应用特定操作。

例如,在数据预处理期间,每个数据点都会被清理和转换。阶段之间的有向边表示依赖关系,表示一个阶段在前一个阶段完成之前不能开始。该流程图演示了使用 DAG 架构和 foreach 模式来高效管理机器学习流水线中复杂工作流的方法。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第15张
利用 DAG 和 foreach 模式的 ML 流水线 | 来源:作者

但是它也有一些缺点。

在数据或特征处理阶段中使用 foreach 模式时,所有数据必须加载到内存中才能执行操作。这可能导致计算性能较差,特别是在处理可能超过可用内存资源的大量数据时。例如,在数据集非常大(数千亿字节)的用例中,如果尝试同时加载所有数据,系统可能会耗尽内存、减慢运行速度甚至崩溃。

foreach模式的另一个限制在于数据集中元素的执行顺序。foreach模式不能保证执行顺序的一致性,或者与加载数据时的顺序相同。

在foreach模式中执行顺序的不一致可能在数据或特征处理的顺序对理解趋势或模式至关重要的场景中带来问题。例如,如果处理时间序列数据集,数据点的顺序对于理解趋势或模式至关重要,无序执行可能导致模型训练和预测不准确。

嵌入

什么是嵌入设计模式?

嵌入是传统和现代机器学习流程中的一种设计模式,定义为高维数据的低维表示,捕捉数据固有结构的关键特征、关系和特性。

嵌入通常表示为浮点数向量,可以使用各种距离测量技术推断两个嵌入向量之间的关系或相似性。

在机器学习中,嵌入在模型训练、计算效率、模型可解释性和降维等方面起着重要作用。

嵌入设计模式的一个现实世界例子

谷歌和OpenAI等知名公司在机器学习流程中的多个任务中都使用嵌入。谷歌的旗舰产品Google搜索引擎和推荐引擎利用嵌入将高维向量转换为低维向量,捕捉文本中单词的语义含义,从而提高搜索结果与搜索查询的相关性。

另一方面,OpenAI一直在先进的生成式AI模型(如GPT-3)方面处于领先地位,这些模型严重依赖于嵌入。在这些模型中,嵌入表示输入文本中的单词或标记,捕捉单词之间的语义和句法关系,从而使模型能够生成连贯和上下文相关的文本。OpenAI还在强化学习任务中使用嵌入,其中它们表示环境的状态或代理的动作。

嵌入设计模式的优缺点

嵌入方法在机器学习流程中的数据表示方面具有多个优点,适用于多个机器学习任务和流程组件。嵌入被用于计算机视觉任务、自然语言处理任务和统计学等领域。具体而言,嵌入使神经网络能够以允许从数据中提取特征的格式消耗训练数据,这在自然语言处理(NLP)或图像识别等任务中特别重要。此外,嵌入在模型可解释性方面起着重要作用,这是可解释AI的基本方面,用于揭示模型的内部过程,从而加深对模型决策过程的理解。它们还作为一种数据表示形式,保留关键信息、模式和特征,为高维数据提供了一个保留关键模式和信息的低维表示。

在机器学习的背景下,嵌入在许多领域起着重要作用。

  1. 模型训练:嵌入使神经网络能够以允许从数据中提取特征的格式消耗训练数据。在自然语言处理(NLP)或图像识别等机器学习任务中,数据的初始格式(无论是文本中的单词或句子,还是图像和视频中的像素)并不直接有助于训练神经网络。这就是嵌入发挥作用的地方。通过将高维数据转换为实数的密集向量,嵌入提供了一种允许网络参数(如权重和偏差)适应数据集的格式。
  2. 模型可解释性:模型生成预测结果并提供相关的洞察力,详细说明这些预测是如何根据模型的内部参数、训练数据和启发式推理得出的,这可以大大提高对AI系统的采用。可解释AI的概念围绕着开发能够提供推理结果和详细解释过程的模型。模型可解释性是可解释AI的基本方面,作为一种策略用于揭示模型的内部过程,从而加深对模型决策过程的理解。这种透明度对于建立用户和利益相关者之间的信任、促进模型的调试和改进以及确保符合监管要求至关重要。嵌入提供了一种模型可解释性的方法,特别是在NLP任务中,其中可视化句子之间或句子中单词之间的语义关系可以理解模型如何理解所提供的文本内容。
  3. 降维:嵌入形成保留关键信息、模式和特征的数据表示。在机器学习流程中,数据中包含大量以不同维度捕捉的信息。这意味着大量数据增加了计算成本、存储需求、模型训练和数据处理等方面的复杂性,这些都是维度灾难场景中的问题。嵌入提供了高维数据的低维表示,保留了关键的模式和信息。
  4. 机器学习流程中的其他领域:迁移学习、异常检测、向量相似性搜索、聚类等

尽管嵌入是许多机器学习任务中有用的数据表示方法,但在稀疏数据和数据集中缺乏内在模式的情况下,嵌入的表示能力有限。这被称为“冷启动”问题,嵌入是通过识别数据集元素内的模式和相关性生成的数据表示方法,但在模式稀缺或数据不足的情况下,嵌入的表示优势可能会丧失,从而导致推荐和排名系统等机器学习系统的性能下降。

低维数据表示的一个预期缺点是信息丢失;从高维数据生成的嵌入有时可能会在降维过程中丢失信息,从而导致机器学习系统和流水线的性能下降。

数据并行

什么是数据并行?

数据并行是一种机器学习流水线策略,可以访问多个计算资源(如CPU和GPU)和大型数据集。该策略涉及将大型数据集分成较小的批次,每个批次在不同的计算资源上进行处理。

在训练开始时,相同的初始模型参数和权重被复制到每个计算资源上。当每个资源处理其数据批次时,它们独立地更新这些参数和权重。在处理完每个批次后,这些参数的梯度(或变化)计算并在所有资源之间共享。这确保了模型的所有副本在训练过程中保持同步。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第16张
ML流水线架构设计模式:数据并行 | 来源:作者

数据并行的一个实际例子

数据并行原则在现实应用中体现的一个真实场景是Facebook AI Research(FAIR)工程团队的开创性工作,他们的新系统——Fully Sharded Data Parallel(FSDP)系统。

这个创新性的系统的唯一目的是增强大规模AI模型的训练过程。它通过在数据并行运算符上分散AI模型的变量,并可选择将部分训练计算转移到CPU上来实现。

FSDP通过其独特的参数分片方法与众不同。它采用更平衡的方法,从而实现更优越的性能。这是通过允许训练相关的通信和计算重叠来实现的。 FSDP的令人兴奋之处在于它如何优化训练更大规模的模型,同时使用较少的GPU。

这种优化在自然语言处理(NLP)和计算机视觉等专业领域尤为重要和有价值。这些领域通常需要大规模的模型训练。

FSDP的实际应用在Facebook的运营中是显而易见的。 他们在一些NLP和视觉模型的训练过程中采用了FSDP,这证明了其有效性。此外,它还是FairScale库的一部分,提供了简单的API,使开发人员和工程师能够改进和扩展他们的模型训练。

FSDP的影响扩展到许多机器学习框架,如用于语言模型的fairseq,用于计算机视觉模型的VISSL以及用于各种其他应用的PyTorch Lightning。这种广泛的整合展示了数据并行在现代机器学习流水线中的适用性和可用性。

数据并行的优点和缺点

  • 数据并行的概念提供了一种降低机器学习模型训练时间的有力方法。
  • 基本思想是将数据集细分,并同时在各种计算平台上处理这些细分,无论是多个CPU还是GPU。这样可以充分利用可用的计算资源。
  • 将数据并行集成到流程和机器学习流水线中具有挑战性。例如,跨不同计算资源同步模型参数会增加复杂性。特别是在分布式系统中,这种同步可能会产生额外的开销,因为可能会出现通信延迟问题。
  • 此外,值得注意的是,数据并行的效用仅适用于某些机器学习模型或数据集。某些具有顺序依赖性的模型,如某些类型的循环神经网络,可能与数据并行方法不太匹配。

模型并行化

什么是模型并行化?

模型并行化在机器学习流水线中用于在深度学习模型过大无法在单个GPU或CPU实例上存储时,高效利用计算资源。通过将初始模型分割为子部分,并将这些部分存储在不同的GPU、CPU或机器上,实现了计算效率的提高。

模型并行化策略将模型的不同部分托管在不同的计算资源上。此外,模型梯度和训练的计算在每个机器上针对其所拥有的初始模型的相应部分执行。这种策略诞生于深度学习时代,其中模型足够大,包含数十亿个参数,因此无法在单个GPU上保存或存储。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第17张
ML流水线架构设计模式:模型并行化 | 来源:作者

模型并行化的实际例子

当前的深度学习模型在内部参数数量上具有天然的庞大特性,这导致在机器学习流水线的训练和推理阶段需要可扩展的计算资源来保存和计算模型参数。例如,GPT-3拥有1750亿个参数,需要800GB的内存空间,而其他基础模型,如Meta创建的LLaMA模型,其参数范围从70亿到700亿不等。

在训练阶段,这些模型需要大量的计算资源。模型并行化提供了一种在不同计算资源上训练模型的方法,其中每个资源在训练数据的小批量上训练模型,并为其分配的原始模型部分计算梯度。

模型并行化的优势和劣势

在机器学习流水线中实施模型并行化会带来独特的挑战。

  • 在持有初始模型部分的机器之间需要不断的通信,因为模型的一部分的输出被用作另一部分的输入。
  • 此外,理解要将模型的哪一部分分割成段,需要对复杂的深度学习模型有深入的理解和经验,大多数情况下还需要对特定模型本身有了解。
  • 一个关键优势是高效利用计算资源来处理和训练大型模型。

联邦学习

什么是联邦学习架构?

联邦学习是一种分布式学习方法,旨在在考虑到隐私和敏感数据的不断演变的视角的同时,实现机器学习所带来的创新进展。

作为一种相对较新的方法,联邦学习将模型训练过程分散在设备或机器上,使得数据无需离开设备所在的位置。相反,只有使用存储在设备上的独特用户数据副本对模型的内部参数进行训练所产生的更新被传输到中央服务器。中央服务器会收集来自其他本地设备的所有更新,并将这些更改应用于驻留在中央服务器上的模型。

联邦学习架构的实际例子

在联邦学习的分布式机器学习方法中,用户的隐私和数据得到保护,因为它们永远不会离开存储数据的用户设备或机器。这种方法是机器学习流水线中的一种战略性模型训练方法,高度重视数据的敏感性和访问性。它实现了机器学习功能,而无需在设备之间或向云存储解决方案等集中系统传输用户数据。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第18张
ML流水线架构设计模式:联邦学习架构 | 来源:作者

联邦学习架构的优势和劣势

联邦学习通过确保用户隐私和数据的安全性将组织引向一个更加数据友好的未来。然而,它也存在一些限制。

  • 联邦学习仍处于起步阶段,意味着可用于促进高效联邦学习流程实施的工具和技术数量有限。
  • 在具备标准化机器学习流水线的成熟组织中采用联邦学习需要大量的努力和投资,因为它引入了一种新的模型训练、实施和评估方法,需要对现有的机器学习基础设施进行完全重构。
  • 此外,中央模型的整体性能依赖于多个以用户为中心的因素,如数据质量和传输速度。

同步训练

什么是同步训练架构?

同步训练是一种机器学习流水线策略,当复杂的深度学习模型被分割或分布在不同的计算资源上,并且在训练过程中对一致性有增加的需求时,它就会发挥作用。

在这种情况下,同步训练涉及到所有独立计算单元(称为“工作者”)之间的协调工作。每个工作者持有模型的一个分区,并使用其分布均匀的数据部分来更新其参数。

同步训练的关键特点是所有工作者都在同步中操作,这意味着每个工作者在进入下一个操作或训练步骤之前必须完成训练阶段。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第19张
ML流水线架构设计模式:同步训练 | 来源:作者

同步训练架构的实际例子

同步训练与需要将训练数据均匀分布在计算资源上、所有资源具有均匀的计算能力以及这些独立资源之间的低延迟通信的场景或用例相关。

同步训练架构的优缺点

  • 同步训练的优点包括一致性、均匀性、提高准确性和简单性。
  • 所有工作者在进入下一步之前都会完成自己的训练阶段,从而保持所有单元模型参数的一致性。
  • 与异步方法相比,同步训练通常能够取得更好的结果,因为工作者的同步和均匀操作减少了每步参数更新的差异。
  • 一个主要的缺点是同步训练中训练阶段的持续时间。
  • 同步训练可能存在时间效率问题,因为它要求所有工作者在进入下一步之前完成任务。
  • 这可能会引入低效性,尤其是在具有异构计算资源的系统中。

参数服务器架构

什么是参数服务器架构?

参数服务器架构旨在解决分布式机器学习问题,如工作者之间的依赖关系、策略实施的复杂性、一致性和同步。

该架构基于服务器-客户端关系的原则运作,其中客户端节点(称为“工作者”)被分配特定的任务,如处理数据、管理模型分区和执行定义的操作。

另一方面,服务器节点在管理和汇总更新的模型参数方面起着核心作用,并负责将这些更新通知给客户端节点。

参数服务器架构的实际例子

在分布式机器学习系统的背景下,参数服务器架构用于促进高效和协调的学习。该架构中的服务器节点确保分布式系统中模型参数的一致性,使其成为处理需要在多个节点或工作者之间仔细管理模型参数的大规模机器学习任务的可行选择。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第20张
ML流水线架构设计模式:参数服务器架构 | 来源:作者

参数服务器架构的优缺点

  • 参数服务器架构在机器学习流水线和工作流中提供了高度的组织性,主要是由于服务器和客户端节点具有明确的、定义好的责任。
  • 这种明确的区分简化了操作,优化了问题解决,并优化了流水线管理。
  • 在服务器节点上集中维护和保持模型参数的一致性,确保将最新的更新传输给所有客户端节点或工作者,增强了模型输出的性能和可靠性。

然而,这种架构方法也有其缺点。

  • 一个重大的缺点是其对服务器节点的依赖性,从而使系统容易受到完全系统故障的影响。
  • 因此,如果服务器节点发生任何故障,可能会导致整个系统瘫痪,凸显了该架构中单点故障的固有风险。

环形AllReduce架构

什么是环形AllReduce架构?

环形AllReduce架构是现代机器学习流水线中使用的一种分布式机器学习训练架构。它提供了一种方法来管理通过反向传播对大规模复杂机器学习模型在庞大数据集上进行的梯度计算和模型参数更新。

在这种架构中,每个工作者节点都提供了完整模型参数的副本和训练数据的子集。

工作人员在反向传播期间独立计算它们的梯度,每个工作人员都在自己的训练数据分区上进行。应用环状结构以确保每个设备上的工作人员都拥有包括所有其他独立工作人员的梯度更新的参数模型。

这是通过在环中将梯度总和从一个工作人员传递到下一个工作人员来实现的,然后将自己计算的梯度添加到总和中并传递给下一个工作人员。这个过程重复进行,直到所有工作人员都获得了从环中聚合的所有工作人员的梯度总和。

“ML流水线架构设计模式(附带10个真实世界的示例)” 四海 第21张
ML管道架构设计模式:环形全局约减架构 | 来源:作者

环形全局约减架构的实际应用示例

环形全局约减架构在各种涉及分布式机器学习训练的实际应用中发挥了重要作用,尤其是在处理大量数据集的情况下。例如,像Facebook和Google这样的领先技术公司成功地将这种架构整合到他们的机器学习管道中。

Facebook的AI研究(FAIR)团队利用环形全局约减架构进行分布式深度学习,有助于提高模型的训练效率,有效处理大规模复杂数据集。Google也将这种架构纳入其TensorFlow机器学习框架中,从而实现了深度学习模型的高效多节点训练。

环形全局约减架构的优点和缺点

  • 环形全局约减架构的优点是它是一种管理分布式机器学习任务的高效策略,特别是在处理大型数据集时。
  • 它通过确保计算资源的最佳利用来实现有效的数据并行ism。每个工作节点都持有完整的模型副本,并负责在其数据子集上进行训练。
  • 环形全局约减的另一个优点是它允许跨多个设备对模型参数更新进行聚合。虽然每个工作人员在数据子集上进行训练,但它也从其他工作人员计算的梯度更新中受益。
  • 这种方法加速了模型训练阶段,增强了机器学习管道的可扩展性,允许根据需求增加模型的数量。

结论

本文介绍了管道架构、设计考虑、领先技术公司的标准实践、常见模式和ML管道的典型组件等各个方面。

我们还介绍了构建和维护ML管道所必需的工具、方法和软件,并讨论了最佳实践。我们提供了架构和设计模式的图示概述,如单一领导架构、有向无环图和ForEach模式。

此外,我们还研究了各种分布策略,为分布式机器学习问题提供了独特的解决方案,包括数据并行ism、模型并行ism、联邦学习、同步训练和参数服务器架构。

对于专注于职业长寿的机器学习从业者来说,了解ML管道的运行方式以及如何在保持故障排除友好的基础设施的同时进行扩展和适应是至关重要的。希望本文为您带来了所需的清晰度。

参考文献

  • Netflix技术博客:Netflix推荐的Meson工作流编排
  • Netflix.(2022年1月18日)。Netflix推荐的Meson工作流编排。[在线]. 检索自https://netflixtechblog.com/meson-workflow-orchestration-for-netflix-recommendations-fc932625c1d9 
  • Facebook工程:fSDP:一种快速和可扩展的分布式并行编程框架
  • Facebook.(2021年7月15日)。fSDP:一种快速和可扩展的分布式并行编程框架。[在线]. 检索自https://engineering.fb.com/2021/07/15/open-source/fsdp/ 
Leave a Reply

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