什么是分布式机器学习?

作者

Ivan Belcic

Staff writer

Cole Stryker

Staff Editor, AI Models

IBM Think

什么是分布式机器学习?

分布式机器学习 (ML) 是一种处理大规模 ML 任务的方法,其中工作负载分布在多个设备或处理器上,而非在单台计算机上运行。分布式 ML 最常用于训练计算需求特别高的大型复杂模型,例如深度神经网络。 

随着人工智能 (AI) 模型的规模和复杂性不断扩大,训练所需的计算资源可能会超出单个设备的容量。同样,复杂的大规模任务可能要求太高,或者需要的内存超出一台设备所能提供的范围。分布式系统将数据集AI 模型 分区到多个设备或节点,以提高性能、准确性和效率。 

分布式 ML 是分布式计算的一个子集,分布式计算涵盖跨多个处理系统扩展计算的更广泛努力。

专家为您带来最新的 AI 趋势

获取有关最重要且最有趣的 AI 新闻的精选洞察分析。订阅我们的每周 Think 时事通讯。请参阅 IBM 隐私声明

谢谢!您已订阅。

您的订阅将以英语提供。您会在每份时事通讯中找到一个取消订阅链接。您可以在此处管理您的订阅或取消订阅。有关更多信息,请参阅我们的 IBM 隐私声明

分布式机器学习的类型

分布式机器学习的方法包括: 

  • 数据并行:将数据集拆分到多个设备上 

  • 模型并行性:将模型分区到多个设备上 

  • 混合并行:结合数据和模型并行的各个方面

分布式 ML 的参数服务器框架使用一个或多个服务器节点来维护模型参数更新,而工作节点则处理数据和计算。

数据并行

数据并行将用作训练数据的大型数据集划分为数量等于系统节点数的若干组。每个节点托管 AI 模型的副本,并为其提供分布式数据的子集。数据并行操作可以同步或异步运行。同步训练在深度学习模型中更常见,因为它能确保一致性,但代价是速度较慢。 

由于每个节点运行模型的完整副本,硬件必须具有足够的内存来托管它。然而,由于每个节点只处理部分数据集,每个节点的 AI 工作负载会减少。

联邦学习

联邦学习类似于数据并行,即多个节点在数据子集上训练模型副本。但是,数据分区不是从集中式数据池创建,而是由每个节点的本地数据组成。模型更新在节点之间聚合,而数据永远不会离开其原始来源。 

因为每个数据集都是本地化的,数据科学家经常将联邦学习用于涉及高数据安全性或法规的分布式深度学习应用程序。集中式数据池可能会在传输过程中意外泄露个人身份信息 (PII)。联邦学习通过将每个数据集隔离到其自身的节点来降低这种风险。

AI 学院

成为 AI 专家

获取相关知识,以确定 AI 投资的优先级,从而推动业务增长。立即开始观看我们的免费 AI 学院视频,引领 AI 在组织中的未来应用。

模型并行

在模型并行中,模型被拆分为可以独立且同时在不同节点上运行的组成部分,例如深度神经网络的层。模型的每个部分都使用相同的数据。模型并行也称为网络并行。 

当单个 ML 模型太大而无法由单台机器处理时,模型并行允许模型在多个节点上运行。每个节点处理模型的一部分,因此其计算和内存要求低于单台机器必须运行完整模型的情况。 

模型并行通常比数据并行更难实现。所选的分布式机器学习直接影响方法的可扩展性,其中一些比其他算法更适合该技术。系统的构建方式必须尽可能减少节点间的数据共享量。高性能模型并行系统需要专家级的设计和优化。 

模型并行通常与数据并行相结合,以便模型的每个部分处理输入数据的不同部分。结果将在整个网络中进行汇总。

管道并行 

管道并行是一种按顺序分区模型的模型并行。模型的每个阶段都托管在各自的节点上。批量数据在各个阶段按顺序处理——类似于老式消防队将一桶水从一个人传到另一个人,从水源传到火场。 

管道并行可以提高吞吐量,即模型一次可以处理的数据量。然而,这种提升是以增加延迟为代价的,延迟是指收到输入后生成结果所需的时间。 

延迟的增加是由于在启动阶段,初始微批次数据需要依次通过整个序列。机器学习管道中后续阶段必须等到第一批微批次数据通过前面的阶段后才能初始化。

张量并行

当深度神经网络的单个层所需的计算能力过大或占用的空间对于单个设备来说太大时,张量并行就发挥作用。自注意力层和嵌入层( 转换器架构的两个基石)可能会变得非常大,这意味着几乎所有大型语言模型 (LLM) 开发都涉及张量并行。如果没有张量并行,几乎不可能训练 LLM,因为层太大,任何单个设备都无法容纳。 

在张量并行中,单个层的参数分布在多个 GPU(图形处理单元) 或 TPU(张量处理单元)上。每个设备计算单个层操作的一部分,然后聚合部分结果以产生该层的输出。 

与数据并行和许多其他类型的模型并行相比,张量并行工作流需要节点间更多的通信。高带宽网络有助于减少通信瓶颈。

混合并行

数据和模型并行技术通常不孤立使用。它们经常以各种混合并行配置组合在一起。开源深度学习框架PyTorchTensorFlow(两者都支持Python)通常用于构建分布式机器学习系统。 

包括GPT系列在内的大多数大规模语言模型都依赖混合并行来高效地进行大规模训练。

分布式机器学习如何工作

分布式 ML 可以增强 ML 管道的每个阶段:构建、训练和部署机器学习模型的过程。预处理、训练、微调、验证、推理和部署 

  • 分布式数据预处理 

  • 分布式训练

  • 分布式微调 

  • 分布式验证 

  • 分布式推理 

  • 分布式部署 

分布式数据预处理

分布式数据预处理使用链接的节点网络(多个处理器或设备,而不是神经网络的单个神经元,有时也被称为“节点”)来准备大型数据集,以供分析和进一步使用。 

中央控制节点管理工作流,将数据拆分并分配给工作节点。与使用单个设备的传统模型相比,通过并行处理分散工作可以提高可扩展性和效率。

分布式训练

分布式训练充分利用分布式 ML 技术,将模型训练分散到各个设备上。例如,这种技术常用于大型神经网络。当网络、训练数据集或两者对于单个处理器来说太大时,分布式训练会将工作负载分散到多个服务器、GPU 或机器上。 

随机梯度下降 (SGD) 是一种学习算法,它将数据集分成小批量,并在每个批次之后计算损失函数的梯度。使用小批量数据而不是完整数据集可以提高训练效率。 

损失函数衡量模型预测中的误差,SGD 的目标是降低梯度以最小化函数值。与标准模型训练一样,当模型达到收敛时,即当 SGD 算法成功最小化函数值时,训练过程被视为完成。 

节点可以并行处理小批量,这是因为在每次迭代中,每个批次都是独立处理的。每个节点计算其梯度,然后将更新的梯度值推送到网络中的其他节点。其他工作节点会将接收到的更新内容应用到自己的模型中,帮助确保模型的所有副本在整个训练过程中保持一致。 

AllReduce函数是一个集体通信操作,它使每个节点能够共享其结果,并将聚合结果通过网络传播。AllReduce 允许所有节点同步模型参数更新,保持一致性。AllReduce 长期用于高性能计算,后在 Horovod 等 ML 框架中得到普及。 

SGD 可以同步或异步运行。同步 SGD 在同一时间更新所有节点,这样可以保持一致性,但代价是如果某些节点落后则可能产生延迟。异步 SGD 会在更新准备就绪后立即更新参数,但有些节点可能会收到不包含最新值的更新。 

通过减少每台设备所需的计算资源,分布式训练可以加快训练时间。因为训练是计算密集型的,所以它是分布式 ML 的主要用例之一。

分布式微调 

分布式训练的原理和优势同样适用于分布式微调。微调进一步训练预训练模型,以专注于更具体的任务。应用分布式 ML 技术可以让过程变得更快、更高效、更可扩展。

分布式验证 

验证是评估已训练模型性能的过程。将验证数据集或大型模型分布在多个节点上,可以提供与分布式训练过程其他部分相同的优势。 

分布式推理

推理是经过训练的 AI 模型处理新数据以识别模式并生成输出或预测的过程。将工作负载分配到多个设备上,可以运行单台机器无法运行的大型 AI 模型。分布式推理还可以提高吞吐量并降低延迟。

分布式部署 

分布式部署管理软件应用程序在节点网络上的运行。跨工作节点的负载均衡有助于缓解瓶颈并优化资源效率,从而提高吞吐量并降低延迟。

分布式 ML 的优势

分布式机器学习的优势包括: 

  • 高效率 

  • 可扩展性

  • 冗余

高效

在多个设备之间自动化和分担工作负载减轻了任何单一设备的负担。节点可以并行工作,更快地完成长期任务,然后将其输出聚合到最终结果中。 

在 ImageNet(一个包含超过 1400 万张标注图像的数据集)上训练图像识别模型,在单个 GPU 上需要数周时间。借助分布式 ML,即使是小型初创公司也可以在几小时内完成此任务。

可扩展性

企业不需要投资超强功能的计算机来运行 LLM 和其他资源密集型系统。分布式计算使云服务提供商能够协调跨许多服务器和数据中心的庞大基础设施,并按需提供给企业客户。

密集型数据科学任务,如数据处理大数据,无需大量基础设施投资即可完成。大规模数据处理使得规模较小的初创公司也能向用户提供推荐系统聊天机器人等服务。

同时,超大规模数据中心位于可扩展性范围的另一端。在资源允许的情况下,组织正在构建大规模服务器集群来运行最先进的深度神经网络。如果没有分布式 ML,就不可能跨数千个 GPU 运行如此大的模型。

冗余

许多现实世界的系统依赖容错能力——即使单个节点发生故障也能继续运行的能力。模型提供商需要确保个体用户以及通过API连接的应用程序能够享受不间断的访问。在分布式ML中,冗余通过跨节点复制进程来保持正常运行时间,从而使得故障不会中断服务。

分布式 ML 的挑战

有效实施分布式 ML 的挑战包括: 

  • 网络瓶颈

  • 同步开销

  • 能源消耗

网络瓶颈

节点之间带宽不足是导致分布式 ML 网络出现瓶颈的一个常见原因。需要更多通信的方法(如张量并行)对带宽的需求最大。如果网络无法提供所需的带宽,分布式 ML 项目将面临训练时间增加和可扩展性降低的问题。

同步开销

同步开销是指一个任务必须等到另一个任务完成后才能开始而产生的延迟。在同步系统中,所有工作节点必须在上传共享数据后才能进入下一阶段的训练。这个时刻被称为同步屏障,因为直到所有节点同步后,下一阶段才会开始。 

拖延节点(即完成任务所需时间比其他节点更长的节点)会减慢整个过程。异步系统消除了这一障碍,但有些节点在运行时可能会采用过时的参数配置。

能耗

分布式网络可能是高能耗用户,不仅因为节点本身,还因为节点之间的通信。能耗可能因分布式 ML 系统的实现和架构而异。 

  • 计算需求:许多具有挑战性的 ML 任务所需的高性能 GPU 都是能源密集型的。 

  • 通信:节点需要高速网络来有效通信并最大限度地减少同步开销。 

  • 云或边缘计算:为领先的 AI 模型提供动力的集中式超大规模数据中心会消耗大量能源。边缘计算可以帮助降低网络成本。 

  • 算法和数据处理选择:选择正确的算法并遵循良好的数据处理实践(例如特征工程)可以提高模型效率。

分布式机器学习框架

分布式 ML 框架可在优化内存与计算资源使用的同时,实施机器学习。它们还可以帮助扩展 ML 实施、缩短训练时间并控制成本。

著名的分布式 ML 框架包括:

  • PyTorch Distributed
     

  • Apache Spark
     

  • TensorFlow Distributed
     

  • Ray Train
     

  • InstructLab

PyTorch Distributed

PyTorch Distributed 在流行的 PyTorch ML 框架中提供,是一组用于在多个设备上构建和扩展深度学习模型的工具。torch.distributed 包涵盖了节点内通信,例如使用 AllReduce。内置的数据并行和模型并行支持可实现一系列分布式训练方法。

Apache Spark

Apache Spark 是一个历史悠久的 ML 框架,支持分布式训练。用户可以构建端到端的 ML 管道,与更大的 Spark 生态系统集成,包括用于数据库操作的 Spark SQL。Spark 提供两个库:原始的 MLlib 和较新的 SparkML。

TensorFlow Distributed

TensorFlow 中的 tf.distribute.Strategy API 为分布式 ML 打开了大门,并包含对一系列方案的支持:一台机器上的多个 GPU、多台机器上的多个 GPU 等等。例如, ParameterServerStrategy 将参数存储在专用服务器上,工作节点从这些服务器访问参数。

Ray Train

Ray Train 是 Ray ML 分布式计算框架内的可扩展分布式训练和微调库。Ray Train 与 PyTorch 和 TensorFlow 兼容。Ray Tune 库支持跨多个设备的分布式超参数调整。

InstructLab

InstructLab 的分布式 ML 新方法摒弃了传统的 GPU 簇,转而采用基于社区的方法,几乎就像众包筹款一样。社区成员可以向中央存储库贡献参数更新,并可以在自己的个人设备上微调模型。

相关解决方案
IBM watsonx.ai

使用面向 AI 构建器的新一代企业级开发平台 IBM watsonx.ai,可以训练、验证、调整和部署生成式 AI、基础模型和机器学习功能。使用一小部分数据,即可在很短的时间内构建 AI 应用程序。

了解 watsonx.ai
人工智能 (AI) 解决方案

借助 IBM 业界领先的人工智能专业知识和解决方案组合,让人工智能在您的业务中发挥作用。

深入了解 AI 解决方案
AI 咨询与服务

通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策和商业价值。

深入了解人工智能服务
采取后续步骤

一站式访问跨越 AI 开发生命周期的功能。利用用户友好型界面、工作流并访问行业标准 API 和 SDK,生成功能强大的 AI 解决方案。

深入了解 watsonx.ai 预约实时演示