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

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

译者 | 布加迪

审校 | 重楼

近年来,我们见证了两个反复出现的趋势:发布的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块。使用这个部分块执行计算以获得部分输出。这些部分输出从所有设备收集而来,然后组合。

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

你可能已经注意到了,张量并行性能上的瓶颈是GPU到GPU之间的网络速度。由于每个请求将在不同的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

之间)

中(路由器通信

和专家选择)

负载均衡

如果数据均匀分配,通常均衡

操作内均衡

具有挑战性,需要

认真设计阶段

可能很困难,需要有效的路由

延迟

对大批量而言,低

对小批量而言,可能会增加

由于管道深度,较高

如果路由高效,可能很低

吞吐量

对大批量而言,高

对大模型而言,高

高,尤其对深度模型而言

对不同的输入而言,可能很高

典型用例

大批量推理,并行任务

无法装入到单个设备上的超大模型

有顺序依赖项的

深度模型

有不同子任务或

专门化的模型

挑战

受批量大小限制,内存使用量大

实施复杂,潜在的通信瓶颈

管道气泡,阶段划分难以实现最佳

负载均衡、路由

开销以及训练不稳定

输入大小

的适应性

适应性强

适应性较差,

固定的张量划分

适应性差,固定管道

适应性强,不同的

输入有不同的专家

合适的模型类型

大多数类型的模型

基于Transformer

的模型,超大神经网络

深度顺序模型

多任务模型,拥有

不同知识的语言模型

支持的推理后端

TensorRT-LLM、

vLLM和TGI

TensorRT-LLM、

vLLM和TGI

TensorRT-LLM、

vLLM和TGI

TensorRT-LLM、

vLLM和TGI

并行技术的组合

现在你可能已经在想,如果使用上述并行方法意味着可以减少GPU的总体消耗或利用率,那么我们何不组合或复制这些方法来增加GPU的总体吞吐量?组合推理并行方法可以获得更高效、更易于扩展的系统,特别是对于庞大而复杂的模型。

在下表中,你可以看到四种可能的选项,但在基于你拥有的GPU数量的实际场景中,这种组合可能会增加到非常大的数量。

数据并行

+

管道并行

张量并行

+

管道并行

专家并行

+

数据并行

张量并行

+

专家并行

将模型分割成

阶段(管道并行)

将模型分割成

阶段(管道并行)

将专家分配到设备

上(专家并行)

在设备上分割大型

专家模型(张量并行)

在多个设备上复制

每个阶段(数据

并行)

在设备上分割每个

阶段内的大张量

(张量并行)

并行处理多个输入

(数据并行)

在设备上分割大型

专家模型(张量并行)

比如说,假设你有64个可用的GPU,计划在上面部署llama3-8b或Mistral 8*7B模型。下面是并行方法的一些可能的组合。这些只是理解并行组合策略的示例;针对实际用例,你还需要考虑并横向比较其他选项。

LLaMA 3-8B(64个GPU)

策略

GPU分配

优点

缺点

PP8TP8

64=8(管道)x8

(张量)

平衡分配

减少通信

管道气泡

延迟增加

PP4TP4DP4

64=4(管道)x4

(张量)x 4(数据)

更高吞吐量

对批量大小而言,很灵活

复杂的集成

需要大批量

DP8TP8

64=8(数据)x8

(张量)

更高吞吐量

没有管道气泡

需要大批量

每个GPU高内存

Mistral 8*7B (64 GPU)

策略

GPU分配

优点

缺点

EP8TP8

64=8(专家)x8(张量

/专家)

平衡的内存分配

高效的内存使用

复杂的负载均衡

计算利用率可能低

EP8TP4DP2

64=8(专家)x4

(张量)x 2(数据)

更高吞吐量

平衡的利用率

需要认真的负载均衡

需要大批量

EP8PP2TP4

64=8(专家)x2

(管道)x 4(张量)

支持更深的专家

灵活扩展

延迟增加

复杂的同步

如何选择一种?

现在我们已经探讨了推理并行的四种方法,还有这些方法的多种组合,所以你可能会提到的一个常见问题是如何选择或确定使用哪种方法。因此,推理并行方法的选择大体上依赖以下因素:

  • 模型架构
  • 用例需求(延迟vs吞吐量)
  • 硬件配置

模型架构

模型架构在确定最有效的推理并行策略方面起着至关重要的作用。你需要确定你的模型架构,然后选择适合的并行方法或组合。不同的模型结构适用于不同的并行技术:

1. 大型深度模型(如GPT-4、PaLM 2):

  • 受益于管道并行
  • 可以跨多个GPU分割阶段
  • 适用于有许多顺序层的模型

2. 拥有大层尺寸的宽模型(LLaMA 2和BLOOM):

  • 很适合张量并行
  • 允许在GPU上分割单个层
  • 对矩阵操作非常大的模型很有效

3. 集成模型或专家混合(Mixtral 8*7B和转换Transformers):

  • 非常适合专家并行
  • 不同的专家可以分配在不同的GPU上
  • 对于使用不同子网络来完成不同任务的模型很有用

4. 小型计算图的模型(GPT-3.5 turbo和Falcon-7B):

  • 常常与简单的数据并行很兼容
  • 可以跨GPU复制整个模型
  • 当模型完全加载到GPU内存中时,很有效

5. 基于注意力的模型(比如Transformers):

  • 能受益于注意力切片或多头并行
  • 允许跨GPU分配注意力计算

用例需求(延迟与吞吐量的权衡)

你需要熟悉你的业务需求或用例,即对业务更重要的是什么、用户请求的延迟或GPU的利用率。或者你可以确定应用程序的模式,即它是一个实时应用程序(对用户请求的响应时间是影响用户体验的主要因素),还是一个离线系统(对用户请求的响应时间不是关注的主要因素)。

我们需要意识到这一点的原因是延迟和GPU吞吐量之间的权衡。如果你想缩短用户请求的延迟,就需要为每个请求分配更多的GPU资源,所选择的并行方法将依此判断。你可以进行优化批量,以便请求并不难以获得GPU资源、从而增加总体延迟。

然而,如果延迟不是考虑因素,那么你的目标应该是选择合适的并行方法和适当的批量大小,以便在确保最大吞吐量的情况下利用GPU资源,从而获得GPU上的最大吞吐量。

用例

优先的并行

延迟vs吞吐量考量

实时聊天机器人

数据并行或张量并行

低延迟优先级,适当的吞吐量

批量文本处理

管道并行

高吞吐量优先级,延迟不太重要

内容推荐

专家并行

为不同输入确保高吞吐量,适当

的延迟

语义分析

数据并行

高吞吐量;延迟对批量处理不太重要

语音助理

张量并行或管道并行

超低延迟优先级,适当的吞吐量

硬件配置

硬件配置常常决定了切实可行的并行策略,应针对特定的推理工作负载和模型架构优化这一选择。以下是一些硬件部件选择,影响整体的并行选择。

硬件部件

对并行选择的影响

例子

GPU内存容量

决定了数据并行的可行性,影响了模型切片的程度

英伟达A100(80GB)允许比

A100(40GB)更大的模型分块

GPU数量

影响可能适用所有策略的

并行程度

8个GPU支持比4个GPU更高的并行

GPU互连带宽

影响张量和管道并行的效率

NVLink提供了比PCIe更高的

带宽,有利于张量并行

CPU功能

影响并行策略中的数据预处理和后处理

多核CPU可以更好地处理数据并行开销

系统内存

影响为数据并行存储庞大

数据库的能力

1TB系统内存允许大于256GB的批量大小

存储速度

影响数据并行中的数据加载速度

NVMe SSD提供了比SATA SSD更快的数据加载速度

网络带宽

对多个节点上的分布式推理很重要

基于Infiniband和RoCE的网络比面向GPU结构的传统网络速度更快

专门化硬件

支持特定的优化

谷歌TPU针对张量操作进行了优化

结论

AI推理并行对高效运行大型AI模型而言意义重大。我们研究了不同的方法来划分工作负载,比如数据并行、张量并行、管道并行和专家并行。每种方法都有其优缺点,选择正确的方法取决于你的具体要求和环境。看到TensorRT-LLM、vLLM和Hugging Face的文本生成推理等工具使这些高级技术更容易被更多的人使用,这确实令人兴奋。随着AI模型变得越来越大、越来越复杂,知道如何使用这些并行技术将非常重要。它们不仅仅旨在处理更大的模型,还旨在更智能化、更高效地运行AI。如果合理运用这些方法,我们可以用AI实现壮举,使它对于各种应用而言更快速、更便宜、更强大。

AI的未来不仅仅是更大的模型,而是找到在现实世界中使用它们的巧妙方法。借助这些并行技术,我们为曾经认为不可能的AI应用打开了大门。

原文标题:What is Inference Parallelism and how it works,作者:Aman Juneja

相关资讯

如何在安卓手机上本地安装和运行LLM?

译者 | 布加迪审校 | 重楼了解如何将AI的力量径直带入到你的安卓手机上:没有云,没有互联网,只有纯粹的设备端智能! 在安卓手机上本地运行大语言模型(LLM)意味着你可以在不依赖云服务器或互联网连接的情况下访问人工智能(AI)模型。 这种本地环境通过确保数据安全、并在设备端来确保隐私。

全面超越GPT-4?一文详解Google新模型Gemini

大家好我是花生~ 最近 Google 发布了一个新的多模态大模型 Gemini,在 AI 模型领域掀起了一轮新的讨论热潮,风头一时间甚至盖过了 GPT-4。那么 Gemini 的具体功能有哪些,相比其他大模型又有何特点呢?今天我们就一起来看看。 了解 GPT-4:一、 Gemini 的功能 Google 称 Gemini 是其历史上最强大、最通用的模型,在许多基准测试中都具有最先进的性能。Google DeepMind 的 CEO Demis Hassabis 称 Gemini 可以像人类一样理解我们周围的世界,并