? 数据并行(Data Parallelism)— 在不同的GPU上运行同一批数据的不同子集;
? 流水并行(Pipeline Parallelism)— 在不同的GPU上运行模型的不同层;
? 张量并行(Tensor Parallelism)— 将单个数学运算(如矩阵乘法)拆分到不同的 GPU上运行; ? 混合专家系统(Mixture-of-Experts)— 只用模型每一层中的一小部分来处理数据。
GPU并行方式 — 数据并行
将整个模型放在一块GPU里,再复制到每一块GPU上,同时进行正向传播和反向误差传 播,相当于加大了batch_size。 每个GPU都加载模型参数,被称为“工作节点(workers)”,为每个GPU分配分配不同的 数据子集同时进行处理,分别求解梯度,然后求解所有节点的平均梯度,每个节点各自 进行反向传播。 各节点的同步更新策略: ① 单独计算每个节点上的梯度; ② 计算节点之间的平均梯度(阻塞,涉及大量数据传输,影响训练速度); ③ 单独计算每个节点相同的新参数。 Pytorch对于数据并行有很好的支持,数据并行也是最常用的GPU并行加速方法之一。
GPU并行方式 — 流水线并行
将模型按层分割,不同的层被分发到不同的GPU上运行。每个GPU上只有部分参数,因 此每个部分的模型消耗GPU的显存成比例减少,常用于GPU显存不够,无法将一整个模 型放在GPU上。layer的输入和输出之间存在顺序依赖关系,因此在一个GPU等待其前一个GPU的输出 作为其输入时,朴素的实现会导致出现大量空闲时间。这些空闲时间被称作“气泡”, 而在这些等待的过程中,空闲的机器本可以继续进行计算。
GPU并行方式 — 张量并行
如果在一个layer内“水平”拆分数据,这就是张量并行。许多现代模型(如 Transformer)的计算瓶颈是将激活值与权重相乘。 矩阵乘法可以看作是若干对行和列的点积:可以在不同的 GPU 上计算独立的点积,也可 以在不同的 GPU 上计算每个点积的一部分,然后相加得到结果。 无论采用哪种策略,都可以将权重矩阵切分为大小均匀的“shards”,不同的GPU负责 不同的部分,要得到完整矩阵的结果,需要进行通信将不同部分的结果进行整合。
GPU并行方式 — 混合专家系统
混合专家系统(MoE)是指,对于任意输入只用一小部分网络用于计算其输出。在拥有多组 权重的情况下,网络可以在推理时通过门控机制选择要使用的一组权重,这可以在不增加计 算成本的情况下获得更多参数。 每组权重都被称为“专家(experts)”,理想情况是,网络能够学会为每个专家分配专门 的计算任务。不同的专家可以托管在不同的GPU上,这也为扩大模型使用的GPU数量提供 了一种明确的方法。 混合专家系统(MoE)是一种人工智能系统,结合了多个专家系统的优点和能力,以解决复 杂问题和提供高质量决策的方法。它基于集成多个专家系统的思想,每个专家系统都是针对 特定领域或任务进行优化和训练的。
混合专家系统的核心思想是将多个专家系统的输出进行融合,以得到更准确、全面的结果。 每个专家系统都有其独特的知识和规则,可以处理特定领域的问题。通过将这些专家系统集 成在一起,MoE可以利用各个专家系统的优势,提供更全面、准确的决策和解决方案。 混合专家系统通常包括以下组成部分: ? 知识库:存储专家系统所需的知识和规则。每个专家系统都有自己的知识库,根据不同领 域的专业知识进行优化。 ? 推理引擎:负责根据用户输入和知识库中的规则进行推理和决策。推理引擎可以根据不同 的情况调用适当的专家系统进行处理。 ? 融合模块:用于整合多个专家系统的输出。融合模块可以采用各种技术和方法,如加权平 均、投票、模型融合等,以得到最终的决策或解决方案。
混合专家系统的优势在于可以充分利用每个专家系统的专业知识和经验,解决复杂问题时可 以提供更准确、全面的结果。它还可以根据实际情况动态选择和调整专家系统,以适应不同 的问题和场景。 总之,混合专家系统(MoE)是一种集成多个专家系统的人工智能系统,通过融合各个专家 系统的输出,可以提供更准确、全面的决策和解决方案。它的设计目的是解决复杂问题和提 供高质量决策。