URL
TL;DR
- 目前大模型常用的三种并行:
DP
:Data Parallelism
,数据并行,将数据分成多份,每个GPU
处理一份数据PP
:Pipeline Parallelism
,管道并行,将模型分成多个阶段(连续一层或多层为一个阶段),每个GPU
处理一个阶段TP
:Tensor Parallelism
,张量并行,将模型分成多份(通常是一层/一个算子/一个张量分成多份,主要解决超长序列引起的超大张量问题),每个GPU
处理一部分张量
- 对于
MoE
结构,EP (Expert Parallelism)
是一种新的并行策略,将MoE
中的Expert
分配到不同的GPU
上 DeepEP
是一个 用cuda
实现的MoE
模型的并行库,重点在于对All-to-All
通信的优化
背景知识
节点内通信
- 通俗讲:一台服务器被称为一个节点,一个节点上的多个
GPU
之间的通信被称为节点内通信 - 通信协议:
PCIe
:比较通用的通信协议,目前最新的PCIe 6.0
的带宽为32GB/s
的双向带宽NVLink
:NVIDIA
自家的通信协议,目前最新的NVLink 5.0
的带宽约为800GB/s
的双向带宽
节点间通信
- 多台服务器组成一个集群,集群中的服务器之间的通信被称为节点间通信
- 通信协议:
InfiniBand
:HPC
领域常用的通信协议,目前最新的InfiniBand NDR
可达400Gbps
的双向带宽Ethernet
:通用的通信协议,速度低于InfiniBand
- 通信技术:
RDMA
:Remote Direct Memory Access
,远程直接内存访问,RDMA
通过DMA
直接访问远程内存,减少了CPU
的参与,提高了通信效率
通信视角下 MoE 结构的特殊性
MoE
结构的本质是超大规模参数量 + 小规模激活参数量(实际计算量)来让模型更强大同时推理效率高- 由于
MoE
结构在实际推理过程中,每个token
激活的专家id
是无法提前预测的,而是一个纯runtime
的行为 - 对此,为了降低
EP
通信压力,MoE
结构通常会限制每个token
实际激活的节点数量。例如,DeepSeek V3
有1
个共享专家和256
个路由专家,每个token
会激活1
个共享专家和8
个路由专家,但同时限制最多只能激活4
个节点,假如得分最高的8
个路由专家来自超过4
个节点,那么会牺牲部分高分专家,在节点数不超过4
的情况下,用贪心算法选择得分最高的4
个专家 - 虽然
DP / TP / PP
都存在通信问题,但都是可提前规划好的通信数据量和通信模式,只要调度得当,即可重叠计算和通信耗时,而MoE
结构的通信是无法提前规划的,因此MoE
结构的通信是最难优化的
关键特性和能力
DeepEP
的关键特性和能力包括:
- 高吞吐量节点内通信:使用
NVLink
优化节点内所有到所有通信的内核,实现高达155 GB/s
的带宽。 - 高吞吐量节点间通信:使用
RDMA
实现高效的跨节点所有到所有通信,在不同的EP
配置中保持大约45 GB/s
的带宽。 - 低延迟内核:专用推理解码内核,分发操作延迟低至
163
微秒,组合操作延迟低至318
微秒。 - FP8 支持:原生支持低精度操作,包括
FP8
分发,与大型模型中量化趋势一致。 - 灵活的 GPU 资源控制:可配置的
SM
使用,用于计算 - 通信重叠,允许精细调整性能优化。 - 自适应路由支持:在低延迟内核中支持自适应路由,使复杂拓扑中的网络利用更高效。
技术实现
DeepEP
是用 C++
和 CUDA
组件实现的,并带有 Python
接口。实现包括几个关键组件:
- 缓冲管理:核心
Buffer
类管理NVLink
和RDMA
的通信缓冲区,处理内存分配和同步。 - 通信内核:
- 训练和推理预填充的高吞吐量内核
- 推理解码的低延迟内核
- 支持节点内(
NVLink
)和节点间(RDMA
)通信
- 事件管理:
EventOverlap
类提供CUDA
事件处理和计算 - 通信重叠的工具。 - 分发和组合操作:
dispatch
:将令牌特征发送到跨GPU
的对应专家combine
:从专家收集处理后的特征并返回到原始位置
Thoughts
- 大模型,尤其是基座大模型,拼的是基建
- 大模型时代不会再出现小模型时代经常出现的 理论计算量低但实际很慢的算法 了,
GPU
上快才是真的快,不光要考虑计算,存储 / 通信也同时需要认真考虑 - 软硬件
co-design
是未来趋势,People who're serious about software should make their own hardware.
这句名言的含金量还在上升