NCCL
大模型分布式训练上千上万GPU卡进行超大规模并行训练
计算密集-通信密集
数据并行(数据集划分) 适用数据集大而模型小
每个GPU运行相同的模型代码
数据集拆分分配给不同的GPU
每轮迭代-通过all-reduce同步
优化:数据并行的all-reduce拆分为reduce-scatter和all-gather两部分
Forward Pass:通过 all-gather 将模型参数聚集到每个 GPU进行前向计算。
Backward Pass:同样通过 all-gather 将模型参数聚集到每个 GPU,计算出本地梯度后,通过 reduce-scatter 将平均后的梯度分摊到各自的 GPU 上,然后进行本地的权重更新。
if torch.cuda.device_count() > 1:print(f"使用 {torch.cuda.device_count()} 个GPU进行数据并行!")model = nn.DataParallel(model)
模型并行(模型拆分)比如GPT-3 模型很大
每个GPU只负责一部分的参数和计算,流水并行通过按层切分,张量并行通过分解模型张量来进行。
管道并行(模型按层划分成多阶段) 深度很深相对均衡
将模型按层划分为多个阶段,不同阶段的层分配到不同的设备上。
张量并行(模型的张量进行分割) 大量张量操作
序列并行
针对张量并行的补充,对于那些需要全局统计信息不能按 Tensor 维度拆分的,序列并行则按照序列进行切分,使得计算被进一步分摊,减少每个 GPU 的显存占用。
专家并行(expert分配到不同设备) 动态分配
选择性激活一部分参数来处理不同的数据,用来解决模型规模增大训练成平方级别的增长问题。
专家并行的思路是将不同的专家分配到不同的 GPU 上,这有助于减少内存消耗并提高训练效率。计算前需要根据路有规则将 Token 通过 All-to-All 通信发送给不同的 Experts 所在的 GPU 进行运算。
MoE(Mixture of Experts,混合专家模型)是一种机器学习模型架构,特别适用于处理大规模数据和复杂任务。它的核心思想是将一个大模型拆分成多个小模型(称为“专家”),每个专家专门处理输入数据的一部分,然后通过一个“路由机制”来决定哪些专家应该处理哪些数据。
MoE的基本概念:
-
专家(Experts):
- 每个专家是一个独立的子模型,通常是一个小型神经网络。
- 每个专家负责处理输入数据的某一部分,类似于“分工合作”。
-
路由机制(Router):
- 路由机制的作用是决定输入数据的哪部分应该交给哪个专家处理。
- 路由机制通常也是一个小的神经网络,它会根据输入数据的特征,动态选择最合适的专家。
-
稀疏激活:
- 在MoE中,并不是所有的专家都会同时被激活。对于每个输入数据,只有少数几个专家会被选中来处理它。
- 这种稀疏激活的特性使得MoE模型在计算上非常高效,尤其是在处理大规模数据时。
MoE的工作流程:
- 输入数据:模型接收到输入数据(例如一段文本或一张图片)。
- 路由决策:路由机制根据输入数据的特征,决定哪些专家应该处理这些数据。
- 专家处理:被选中的专家分别处理输入数据,并生成各自的输出。
- 结果整合:将所有专家的输出进行加权组合,得到最终的模型输出。
MoE的优点:
-
高效性:
- 由于每个输入只会激活少数专家,MoE模型的计算量比传统的大模型要小很多。
- 这使得MoE在处理大规模数据时非常高效。
-
可扩展性:
- MoE模型可以很容易地扩展,通过增加更多的专家来提升模型的容量,而不需要大幅增加计算成本。
-
灵活性:
- 每个专家可以专门处理不同类型的输入数据,这使得MoE模型在处理多样化任务时表现更好。
MoE的应用场景:
-
大规模语言模型:
- 例如,Google的GShard和Switch Transformer就是基于MoE架构的大规模语言模型。
- 这些模型通过MoE架构实现了高效的训练和推理,能够处理超大规模的数据集。
-
多任务学习:
- MoE可以用于多任务学习,每个专家专门处理一个特定的任务,从而提高模型的整体性能。
-
推荐系统:
- 在推荐系统中,MoE可以根据用户的不同行为特征,动态选择不同的专家来生成个性化推荐。
通俗解释:
MoE就像是一个“团队合作”的模型。假设你有一个复杂的任务,比如翻译一篇文章。MoE模型会把任务拆分成多个小任务,每个小任务由一个“专家”负责。这些专家各自擅长不同的领域(比如有的擅长翻译动词,有的擅长翻译名词)。然后,一个“路由器”会根据文章的内容,决定哪些专家来参与翻译。最后,所有专家的翻译结果会被整合起来,形成最终的翻译结果。
MoE的好处是,它不需要所有的专家都参与每一个任务,而是只调用最相关的专家,这样既高效又灵活,特别适合处理大规模和复杂的任务。
集合通信
并行计算中的通信模式
all-reduce:将所有设备上的数据进行操作,并结果分发到每个设备上
reduce-scatter:数据从多个设备手机一部分信息,分摊到不同的设备上
all-gather:将分散在不同的设备的数据收集起来,聚集到每个设备上。
broadcast:一个设备上的数据发送到其他所有设备。训练开始时做的。
scatter:一个设备上的数据分发给多个设备,数据集拆分
gather:多个设备上的数据收集到一个设备上。