《一文读懂大模型并行的三种姿势:DP、PP、TP》

0 阅读3分钟

image-20260414173814140

这张图描述的是分布式计算中经典的 3D 并行策略。为了让你更直观地理解,我将逻辑重新梳理为基础架构水平扩展(拆数据)垂直扩展(拆模型) 三个层级:


1. 基础单卡模式 (Base Case)

  • 配置DP=1,PP=1,TP=1DP=1, PP=1, TP=1
  • 状态:模型和数据都完整地承载于单张 GPU(gpu0)。
  • 痛点:当模型参数量达到千亿级时,单张显卡的显存(VRAM)无法容纳完整的模型权重。

2. 水平扩展:数据并行 (Data Parallelism, DP)

核心逻辑:模型不动,拆分数据。

  • 配置DP=4DP=4

  • 工作方式

    • 冗余存储:每张显卡都拥有一个完整的模型副本。
    • 分工:将一批数据(Batch)平分成 4 份,每张卡处理一份。
  • 应用场景:模型权重可容纳于单卡显存,但面对海量训练数据,需通过多卡并行以提升计算吞吐量,缩短迭代周期。

  • 同步机制:各计算节点在反向传播阶段产生本地梯度后,通过 All-Reduce 算法(如 Ring All-Reduce)与邻居节点进行通信。该过程将全网梯度进行求和并重新分发,确保所有 GPU 在更新权重前获得完全一致的平均梯度,从而维持各副本模型参数的同步。


3. 垂直扩展:模型并行 (Model Parallelism)

当模型太大,单卡装不下时,就需要将模型“拆散”到不同显卡上。图中展示了两种切分维度:

A. 流水线并行 (Pipeline Parallelism, PP)

核心逻辑:纵向切分,按“层”拆分。

  • 配置PP=4PP=4

  • 工作方式

    • 将模型的不同层(Layers)分布在不同 GPU 上。
    • 串行执行:数据先在 gpu0 执行前几层,结果传给 gpu1 执行中间层,以此类推。
  • 前向传播:GPU 0 计算完它的层(如 Layer 1-8),将输出的激活值通过 send 发送给 GPU 1 的 recv。此时 GPU 1 必须等待 GPU 0 的数据到达才能开始计算。

  • 反向传播:GPU 1 计算完梯度,再反向 send 给 GPU 0。

  • 核心挑战(Bubble) : 为了保证同步,下游节点必须等待上游。这会产生“流水线气泡(Bubble)”。现代框架(如 GPipe 或 Megatron-LM)通过将数据切成更小的 Micro-batches(微批次)来让多张卡同时工作,减少等待时间。

B. 张量并行 (Tensor Parallelism, TP)

核心逻辑:横向切分,按“矩阵算子”拆分。 张量并行是在“算子内部”动刀,因此同步极其频繁,通常发生在每一个 Transformer 层内部。

  • 配置TP=4TP=4

  • 工作方式

    • 同一个网络层内部进行切分。例如一个 4096×40964096 \times 4096 的矩阵乘法,被拆成四个 4096×10244096 \times 1024 的小块。
    • 并行计算:4 张显卡同时计算这一层的不同部分,然后通过高速互联(如 NVLink)进行同步。
    • 在进入下一层之前,两张卡必须立即交换彼此的结果并相加(All-Reduce),合成最终的 YY
  • 核心挑战硬件要求

    由于每一层都要进行两次全网同步,通信频率极高。如果卡间带宽(如 NVLink 或 HCCS)不够快,TP 会导致计算单元大幅度空转。


总结:如何选择并行方案?

维度策略名称拆的是什么?解决什么问题?
数据维度DP (Data Parallelism)训练样本嫌计算太慢(增加吞吐量)
模型深度PP (Pipeline Parallelism)模型的层 (Layers)显存放不下(模型太长)
模型宽度TP (Tensor Parallelism)矩阵内部 (Tensors)显存放不下(单层太宽)

在实际的大模型训练中(如 GPT-4 或 Llama 3),通常会将这三种模式结合使用,称为 3D 并行