当前位置: 首页 > news >正文

一文讲清:AI大模型推理并行策略:DP、TP、PP、SP、EP的基本原理

在做大模型推理部署的时候,经常会碰到模型参数量太大,一块GPU的显存装不下,或者单块GPU的算力跟不上推理速度的情况,这时候就需要用并行策略来解决这些问题。

因为计算的流程不一样,推理和训练用到的并行策略在实现上也不一样。

这篇文章就是帮大家快速搞懂常见并行策略的基本原理。推理里主要用到的并行方式有数据并行(DP)、序列并行(SP/CP)、张量并行(TP)、层并行(PP)。

我们可以根据输入激活值的切分维度来区分不同的并行策略,一般来说,切分batch的是数据并行DP,切分序列的是序列并行SP/CP,切分隐藏层尺寸的是张量并行TP。

1 DP策略

1.1 基本原理

DP(Data Parallel)数据并行,是用来应对数据并发量比较大的一种策略。DP的做法是在不同的GPU上跑LLM模型的多个副本,每个模型副本都独立去处理对应的用户请求组。

它的原理跟开多个推理实例并发处理是一样的,区别在于,开DP的时候多个模型副本共用一个推理实例,由这个推理实例里的调度器来把请求分配给不同DP的模型副本。

2 TP策略

2.1 基本原理

Tensor Parallelism,也就是张量并行,简单说就是把模型的每一层拆分开,放到不同的GPU上去跑,用户输入的数据会在这些GPU之间传递处理,每个GPU算出的局部结果最后再拼到一起,形成完整的输出。

张量并行的计算依据是矩阵的分块运算,这种运算方式不会影响最终的计算结果。

张量并行在大模型推理里用得特别多,主要就是为了减少单张显卡的显存占用,同时也能分担计算压力。

3 SP策略

3.1 基本原理

SP(Seqeunce Parallel)序列并行指的是把长序列拆成多个片段,分到不同的GPU设备上同时处理,属于一种模型并行的策略。示意图如下:

3.2 SP与其它策略结合

Megatron中TP与SP结合的例子:

负载均衡中SP与DP结合案例:

4 PP策略

4.1 基本原理

PP(Pipeline Parallel)流水线并行,是把模型按层拆分到不同设备上,数据像流水线一样在各个设备之间依次流转处理。

这种并行方式最早是在模型训练中得到广泛应用的,相关可以参考Megatron2。

在PP的前向和后向计算过程中,会产生空泡问题,训练时需要想办法把这些空泡消除掉。

而在推理任务里,流水线并行虽然只需要做前向传播,但实际能用的场景并不多,一般只有在GPU显存实在装不下对应的模型权重时,才会考虑使用。

5 EP策略

5.1 基本原理

EP(Expert Parallel)是MoE模型里用到的一种并行策略,简单说就是把不同的专家网络分到不同的GPU上。

每张GPU只存一部分专家参数,一张卡上可以放一个或者多个专家。

输入的数据会通过路由机制,分到对应的专家所在的GPU上做计算,最后再把计算结果汇总到一起。

这样做能明显扩大模型的总参数量,同时还能控制好单个GPU的内存占用,很适合用来训练超大的稀疏模型。

现在比较常见的做法是把EP和DP结合起来用,一般Attention部分用DP,FFN部分用EP。

不过用EP做切分的时候,容易出现负载不均衡的情况,这个问题可以通过EPLB来解决。

6 其它策略

6.1 CP策略

CP(Context Parallel)上下文并行和序列并行SP,都是从序列维度来做划分的并行策略,而且这两种方式最早都是在训练并行的场景里被提出来的。

它们的发展过程是这样的:最先出现的是SP策略,主要用来处理模型前向和反向传播过程里,除了Attention计算之外,因为序列切分产生的内存和计算消耗问题。

之后为了进一步解决Attention模块本身的序列并行难题,Megatron框架就引入了CP策略。这两种策略的原理比较接近,只是针对的计算阶段不一样。

6.2 Ulysses并行

Ulysses的全称是DeepSpeed‑Ulysses,它的核心逻辑是这样的:打开序列并行之后,在多头Attention运算开始之前,多个GPU设备之间会先做数据交换,这样单个GPU就能拿到完整的序列。

等Attention计算结束之后,再通过集合通信把序列恢复成原来被切分的样子。

总结

在做大模型推理的时候,现在主流的推理框架基本都支持好几种并行策略。这些策略各有各的优势和不足,主要是为了解决不同层面上的性能和资源问题。

实际挑选用哪种的时候,要结合具体场景来综合判断,比如模型参数量、PD/AF分离的需求、硬件拓扑的特点这些因素都要考虑进去。

http://www.cnnetsun.cn/news/1457623.html

相关文章:

  • 5个关键维度深度解析APatch:Android内核补丁技术的终极指南
  • Spring总结(上)
  • 【LeetCodehot100】T114:二叉树展开为链表 T105:从前序与中序遍历构造二叉树
  • 为什么你家WiFi满格,网却很慢?90%的人都理解错了
  • Google Hacking 高级搜索技巧与实战案例解析
  • Win11Debloat开源工具:系统性能优化的全方位解决方案
  • YOLOv11实战:用C3K2和C2PSA模块提升你的目标检测模型(附PyTorch代码)
  • 海宁市停车设施专项规划 2024
  • IsaacLab 训练范式探索(一):让机器人拥有“记忆”的 RNN 策略
  • 基数排序笔记
  • mmdetection实战:从混淆矩阵到精准评估,手把手计算P、R、F1
  • 安装flash-attn
  • TFT LCD屏幕硬件解析:从TN到IPS,如何选择适合你项目的显示技术?
  • Shardingsphere-Proxy 5.5.0数据迁移实战:从单机到集群的平滑过渡
  • 告别臃肿控制软件:GHelper让你的华硕笔记本性能飙升
  • 【Qt视频实战】基于QMediaPlayer与QVideoWidget的RTSP流媒体播放器开发指南
  • 【递归算法】找出所有子集的异或总和再求和
  • nlp_structbert模型API的流式调用与异步处理模式详解
  • 为什么你的LangChain服务每48小时必崩?——用我们自研的MemTrace-Py工具10分钟定位GC失效根源
  • 第十八篇:【硬件工程师筑基系列 4-1】原理图设计入门与工具全指南 | 从工程搭建到绘制全流程(AD24 版)
  • mPLUG视觉问答:本地图片分析神器,支持jpg/png,英文提问秒回答案
  • UndertaleModTool全流程指南:GameMaker游戏深度定制与扩展解决方案
  • Wan2.1-umt5快速开始:使用CSDN星图平台镜像一键启动
  • ITU-R BT.2124建议书标准解读和应用指南-读懂如何“称”出颜色差了多少
  • 构建卡证处理自动化流水线:模型与传统图像处理技术结合
  • RAG数据清洗三大关键
  • 科技成果转化被纳入高校评价体系后,青年教师怎么办?
  • VSCode 接入 Codex(基于 sub2api 的完整实战指南)
  • 高效AI论文工具合集,支持智能降重与自然语言润色,减少重复内容
  • 977. 有序数组的平方