EP02-vLLM源码讲解直播笔记-分布式通信与并行策略
[FIXME][EP02] vLLM 源码讲解直播笔记
EP02: 分布式通信与并行策略
直播回看链接:https://www.youtube.com/watch?v=W83Zgbg8SkE&t=4s
特别鸣谢:月球大叔,Du Kuntai,Cheng Yihua 大佬带来的精彩讲解
📌 1. GroupCoordinator 类解析
‘vllm/distributed/parallel_state.py’
# 可以把GroupCoordinator想象成一个群聊 |
⚡ 2. 并行策略详解
TP(张量并行)
- 需要allreduce,通信量大,对于通信需求较高
- Infra端
- 通信设备
- NVLink: GPU之间的直接通信,常用于节点内通信
- InfiniBand: 本质上也是硬件,常用于节点间通信
- RDMA: RDMA网卡,最大的好处是跳过操作系统 / zero copy, RoCE
- 通信库:’vllm/distributed/device_communicators’
- PyNccl: Nvidia 之间的通信
- Shared memory: 操作系统中不同进程之间数据共享
- Custom allreduce: 专为all reduce操作的kernel
- torch.distributed: 广泛支持一系列的通信库
- 通信设备
- 算法端
- 想了解任何通信方式可以了解:’vllm/model_executor/models/llama.py’,llama系模型支持各种并行方式,适合初学者学习架构
- ‘get_tp_group()’
PP(流水线并行)
- 通信量相对较小,对device–device通信需求较低
- 不能降低延迟,但能提高吞吐
- 算法端
- 每个worker负责一个layers的子集
- ‘vllm/model_executor/models/llama.py’ 中 self.start_layer –> self.end_layer
- 在worker之间: communicate IntermediateTensor
- ‘vllm/worker/model_runner.py’: 搜索 ‘get_pp_group()’
- 每个worker负责一个layers的子集
EP(专家并行)& DP(数据并行)
为什么要有EP?
- Mistral / Mixtral / Deepseek 都是用MOE
- MOE具有计算稀疏性,每个request只激活一小部分的expert
将不同的expert放在不同的device上–>专家并行
算法端
- Shuffle (DeepEP communication kernel)
- Forward
- Shuffle back
在Attention模块做TP,在FFN模块做EP
share expert负载较高,要做冗余
DP (数据并行)
- 最大的TP << 所需要的EP(EP=320)
- TP < # attention head
- TP * DP == EP(通过请求并行的方式去拉满计算资源)
- 在实践中难以应用
- 对请求进行padding避免造成死锁
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cheung's Blog!
评论