Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Expert Parallelism

专家并行将混合专家层中的专家分布到多个 GPU 上,并通过全互连通信将每个 token 路由到对应专家。

专家并行(EP)是一种用于分布式训练和推理的策略,适用于混合专家(MoE)模型;该策略会将不同的专家放置在不同的GPU上,并将每个词元发送到存放该词元所选专家的设备。MoE 层会用许多更小的专家网络和一个路由器,替换 Transformer 中的一个大型前馈模块;路由器对每个词元只激活少数几个专家,因此总参数量的增长速度可以远远超过每个词元计算开销的增长速度。专家并行使这些参数能够放入内存:每块 GPU 无需存储所有专家,只需存储其中一部分。Google 的 Noam Shazeer 及其同事早在 2017 年就在其稀疏门控 MoE 层中将专家分布到不同设备上,每个专家各保留一个共享副本;GShard 于 2020 年 6 月进一步扩展了这一方法,将一个拥有 6000 多亿个参数的翻译模型中的专家分布到 2,048 个 TPU v3 加速器上。如今,专家并行已成为训练和部署大型 MoE 语言模型和视觉语言模型的标准方法。

Token 如何在 GPU 之间传输#

每个 MoE 层分四步运行:

  1. 路由:路由器根据每个 token 对每个专家进行评分,并保留得分最高的 k 个专家,通常为一个、两个或八个。
  2. 分发:全互连集合通信会将每个 token 的隐藏状态发送到负责其所选专家的 GPU。
  3. 计算:每个 GPU 使用本地专家处理收到的 token。
  4. 合并:第二次全互通通信会将输出送回每个 token 原本所在的 GPU,然后根据路由器分数对输出加权并求和。

下面的代码片段模拟一个层中的路由和分发步骤:8 个专家分布在 4 个 GPU 上,每个 GPU 有两个专家:

import torch

torch.manual_seed(0)
num_experts, num_gpus, top_k = 8, 4, 2
tokens = torch.randn(4096, 512)  # 4,096 个 token 的隐藏状态
router = torch.nn.Linear(512, num_experts)

# 路由:每个 token 根据路由器分数选择得分最高的 2 个专家
with torch.no_grad():
    _, experts = router(tokens).topk(top_k, dim=-1)

# 专家并行:专家 0-1 位于 GPU 0,专家 2-3 位于 GPU 1,依此类推
gpu = experts // (num_experts // num_gpus)

# 分发:统计每个专家和 GPU 收到的 token-专家分配数量
print(torch.bincount(experts.flatten(), minlength=num_experts).tolist())
print(torch.bincount(gpu.flatten(), minlength=num_gpus).tolist())

第一行输出显示各专家的负载:分配数量在 948 至 1,087 之间,而平均值为 1,024;第二行显示 4 个 GPU 各自接收了 8,192 项分配中的 1,968 至 2,139 项。即使路由器是随机初始化的,工作分配也会不均衡;经过训练的路由器还会形成热门专家,使负载偏斜得更加严重。

负载均衡与容量#

一层只有在负载最重的 GPU 完成后才能结束,因此路由不均衡会直接导致硬件闲置。MoE 训练会通过三种方式缓解这一问题:

  • 辅助负载均衡损失:在损失函数中增加一项,鼓励路由器将 token 均匀分配给各个专家。
  • 容量因子:每个专家每批次最多接收固定数量的 token,例如均匀分配份额的 1.25 倍;超出容量的 token 会跳过该专家。
  • 基于偏置的均衡:DeepSeek-V3 会在路由器分数上为每个专家添加偏置,这只会影响专家选择。每一步结束后,系统会降低负载过高专家的偏置,并提高空闲专家的偏置,从而均衡负载,而无需让辅助损失与主要目标相互竞争。

在容量受限的情况下,每个 token 的路径取决于其专家的繁忙程度:

被跳过的 token 会原样通过该层的残差连接,因此大量丢弃 token 会损害质量。DeepSeek-V3 在训练期间不会丢弃任何 token,而是依靠基于偏置的均衡机制。

通信是另一项成本。每个 MoE 层都会进行两次全互连交换,因此专家并行最适合在节点内运行,因为节点内 GPU 通过高速 NVLink 连接;跨节点使用速度较慢的链路则成本较高。DeepSeek-V3 使用 64 路专家并行,将每层 256 个路由专家分布到 8 个节点上;每个 token 最多只会发送到 4 个节点上的专家,并且通信交换会与计算重叠进行。

组合并行策略#

专家并行是将训练拆分到多个设备上的几种方法之一:

  • 数据并行:在每个 GPU 上复制完整模型,并拆分每个批次,在每一步之后同步梯度。
  • 张量并行:将单个权重矩阵拆分到多个 GPU 上,因此每个 GPU 都会参与每一层的计算。
  • 流水线并行:将连续的层分配给不同 GPU,并让微批次依次流经这些 GPU。
  • 上下文并行:将一个长输入序列拆分到多个 GPU 上。

能够装入单块 GPU 显存的稠密模型只需采用数据并行;传入 device=[0, 1] 这样的设备列表并启用训练模式时,Ultralytics YOLO26 就会以这种方式在多块 GPU 上训练。大型 MoE 模型会结合多种并行方式:DeepSeek-V3 使用 16 路流水线并行、64 路专家并行和分片数据并行训练其 6710 亿个参数(每个 token 激活 370 亿个),且没有使用张量并行。推理引擎(例如 vLLM)在为模型提供服务时也会采用相同的拆分方式,因此,如果一个 MoE 模型的专家无法全部装入单块 GPU 的显存,该模型就会跨多块 GPU 运行,每块 GPU 仅存放分配给该 GPU 的那部分专家。

Explore solutions

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来