一文看懂推理并行的定义及其工作原理

#新闻 ·2025-01-09

译者 | 布加迪

审校 | 重楼

近年来,我们见证了两个反复出现的趋势:发布的GPU功能越来越强大,以及拥有数十亿、乃至数万亿个参数和加长型上下文窗口的大语言模型(LLM层出不穷。许多企业正在利用这些LLM,或进行微调,或使用RAG构建具有特定领域知识的应用程序,并将其部署在专用GPU服务器上。现在说到在GPU上部署这些模型,需要注意的一是模型大小,即相比GPU上可用内存,将模型加载到GPU内存所需的空间(用于存储参数和上下文token实在了。

模型大小 vs. GPU内存

有一些方法可以通过使用量化、修剪、蒸馏和压缩等优化技术来缩减模型大小。但是如果注意到下面70B模型(FP16量化)的最新GPU内存和空间需求的比较表,几乎不可能同时处理多个请求,或者在些GPU中,模型甚至无法装入到内存中

GPU

FP16(TFLOPS)

带稀疏性

GPU内存(GB)

B200

4500

192

B100

3500

192

H200

1979

141

H100

1979

80

L4

242

24

L40S

733

48

L40

362

48

A100

624

80

这都是已经运用的FP16量化,导致一些精度损失(这在许多普通的用例中通常是可以接受的)。

模型

参数所需的KV缓存(FP16)

Llama3-8B

16GB

Llama3-70B

140GB

Llama-2-13B

26GB

Llama2-70B

140GB

Mistral-7B

14GB

就引出了这篇博文的背景,即企业如何在这些现代数据中心GPU上运行数十亿或万亿参数的大型LLM模型。是否有办法将这些模型分割成更小的部分,只运行眼下所需的部分或者我们是否可以将模型的部分分到不同的GPU上?在这篇博文中,我将尝试用当前可用于执行推理并行的一系列方法来回答这些问题,并尝试重点介绍一些支持这些并行方法的工具/库。

推理并行

推理并行Inference Parallelism)旨在将AI模型(特别是深度学习模型)的计算工作负载分配到多个处理单元(如GPU。这种分配可以加快处理、缩短延迟以及能够处理超出单个设备内存容量的模型。

已开发了四种主要方法来实现推理并行,每种方法都有其优势和应用:

  • 数据并行
  • 张量并行
  • 管道并行
  • 专家并行

数据并行

在数据并行方面,我们在不同的GPU或GPU集群上部署模型的多个副本。模型的每个副本都独立处理用户请求。打个简单的比方,这好比拥有一个微服务的多个副本。

现在,一个常见的问题可能是它如何解决模型大小装入到GPU内存的问题简短的回答是装不了方法仅推荐可以装入GPU内存的较小模型。在这情况下,我们可以使用部署在不同GPU实例上的模型的多个副本,并将请求分到不同的实例,从而为每个请求提供足够的GPU资源,增加服务的可用性。这还将为系统提升总体请求吞吐量,因为现在有更多的实例来处理流量。

张量并行

在张量并行方面,我们将模型的每一层分割到不同的GPU上。单个用户请求将跨多个GPU共享,每个请求的GPU计算结果通过GPU到GPU的网络重新组合。

为了更好地理解张量并行,顾名思义,我们沿着特定的维度将张量分割几块,这样每个设备只容纳张量的1/N块。使用这个部分块执行计算以获得部分输出。这些部分输出从所有设备收集而来,然后组合。

可能已经注意到,张量并行的瓶颈是GPUGPU之间的网络速度。由于每个请求将在不同的GPU上进行计算然后组合,因此我们需要高性能网络来确保低延迟。

管道并行

管道并行方面,我们将一组模型层分配到不同的GPU上。基于层的划分是管道并行的基本方法。模型的层被分组成连续的块,形成阶段(Stage)。这种划分通常通过网络的架构纵向进行。计算平衡是一个关键的考虑因素。理想情况下,每个阶段都应该有大致相等的计算负载,以防止瓶颈。这通常需要对不同复杂性的层进行分组以达到平衡。内存使用优化是另一个关键因素。阶段旨在符合单个设备的内存限制,同时最大限度地提高利用尽量降低通信开销也很重要。划分的目的是减少各阶段之间传输的数据量,因为设备间通信可能是一个严重的性能瓶颈。

所以比如说,如果在4个GPU实例上部署有32层的LLaMA3-8B模型,可以在每个GPU上分割分配模型的8层。请求的处理按顺序进行,计算从一个GPU开始,并通过点对点通信继续到下一个GPU。

同样,由于涉及多个GPU实例,如果我们在GPU之间没有高速网络通信,网络可能成为一瓶颈。这种并行可以增加GPU的吞吐量,因为每个请求将需要来自每个GPU的更少资源,应该很容易获得,但它最终会增加总体延迟,因为请求顺序处理,任何GPU计算或网络部件方面的延迟都会导致延迟总体激增。

专家并行

专家并行常常作为专家混合(MoE)实现,技术允许在推理过程中高效使用大模型。它没有解决将模型装入到GPU内存中的问题,但提供了一个基于请求上下文处理请求的广泛功能模型的选项。在该技术中,模型划分为多个专家子网。每个专家通常都是经过训练的神经网络,用于处理更广泛问题领域内特定类型的输入或子任务。门控网络决定对每个输入使用哪个专家。对于任何给定的输入,只有一部分专家被激活。不同的专家可以分配到不同的GPU上。路由器/门控网络和活跃的专家可以并行运行。不活跃的专家不消耗计算资源。这大大减少了每个请求必须与之交互的参数数量,因为些专家跳过。但与张量并行和管道并行一样,总体请求延迟严重依赖GPU到GPU的通信网络。在专家处理后,请求必须重新构造回其原始GPU通过GPU到GPU互连结构构成高网络通信。

与张量并行相比,这种方法可以更好地利用硬件,因为不必将操作分割成更小的块。

下面总结和比较了我们讨论的几种方法。当计划为自己的用例选择一种方法时,可以使用它作为参考。

方面

数据并行

张量并行

管道并行

专家并行

基础概念

在多个设备上分割输入数据

在设备上分割单个张量/层

在设备上将模型分割成多个顺序阶段

将模型分割成多个专家子网络

工作原理

同一模型复制到每个设备上,处理不同数据块

单个层/操作分配到多个设备上

模型管道的不同部分在不同设备上

路由器为每个输入选择特定的专家

并行单位

输入批量

单个张量/层

模型阶段

专家(子网络)

可扩展性

相对批量大小而言扩展性良好

对超大模型而言扩展性良好

对深度模型而言扩展性良好

对宽模型而言扩展性良好

内存效率

低(每个设备上

有标准模型)

高(每个设备上

只有每个层的

一部分)

高(每个设备上

只有模型的一部

分)

中到高(专家分配在设备上)

通信开销

中到高

低(只有邻近Stages

之间)

中(路由器通信

相关标签:

如有任何疑问 请随时与我们联系

  • 13004184443

  • 上海市青浦区虹泾鑫汇园-9号楼6层607

  • gcfai@dongfangyuzhe.com

  • 咨询微信客服

  • 微信公众号

© 2025 旷泰姆(上海)人工智能科技有限公司 版权所有 备案号:沪ICP备2025113240号-1 免责声明 隐私协议

友情链接