学习笔记:分布式训练模型

分布式训练模型(Distributed Training)

分布式训练是一种将深度学习模型的训练过程分布在多个设备(如GPU)上的技术,用于提升训练速度、处理更大的模型和数据集。


🔹 分布式训练的四种主要方式

1. Data Parallelism(DP) – 数据并行

  • 原理:将数据切分为多个子集,每个GPU处理一部分数据,模型副本相同。

  • 优点:实现简单,适用于大多数模型。

  • 缺点:每个GPU都保留模型完整副本,内存开销大。

  • 适用场景:中小规模模型或多GPU的训练。

2. Tensor Parallelism(TP) – 张量并行

  • 原理:将模型的单个层(如矩阵乘法)中的张量进行切分,并行计算。

  • 优点:减少每张卡的内存压力。

  • 缺点:实现复杂,通信频繁。

  • 粒度:粒度较大,按张量维度切分。

3. Pipeline Parallelism(PP) – 流水线并行

  • 原理:将模型按层分成多个阶段,每个GPU处理一部分层,输入数据通过流水线方式依次流过。

  • 优点:适用于超大模型训练,显存需求平均分配。

  • 缺点:需要微批次处理,存在流水线启动延迟。

  • 粒度:比TP更小,按模型层级切分。

4. Expert Parallelism(EP) – 专家并行

  • 原理:用于 MoE(Mixture of Experts)模型,将不同“专家模块”部署在不同设备。

  • 优点:显著减少计算量,提升扩展性。

  • 缺点:路由机制复杂,需要动态激活专家模块。


🔹 分布式训练常用技术

DeepSpeed ZeRO (Zero Redundancy Optimizer)

  • 结合了数据并行 + 张量并行的优势

  • 按照粒度分为:

    • ZeRO-1:优化器状态分布式

    • ZeRO-2:+梯度分布式

    • ZeRO-3:+参数分布式

  • 目的:最大化模型训练的可扩展性,降低内存使用

DDP(Distributed Data Parallel)

  • PyTorch 提供的分布式训练接口

  • 每个GPU运行一个进程,模型参数同步

  • 通常基于 NCCL 通信库实现


🔹 分布式训练中的通信方式

NCCL(NVIDIA Collective Communications Library)

  • NVIDIA 提供的高性能通信库

  • 支持 AllReduce、Broadcast、AllGather 等通信操作

  • 专为GPU间通信优化,常用于DDP、ZeRO等方案中


🔹 训练中的重要术语

  • epoch:训练数据完整遍历一次

  • 梯度传输:模型在多个设备中训练时,需要同步参数梯度。 —— 负的梯度越大,约接近正确值。它是损失函数的“斜率”——也就是数学中常说的导数。梯度告诉你,这个“点”往哪个方向走,损失会下降得最快,越接近争取值。梯度就是“损失函数在当前位置的变化方向”,它告诉我们:如果你朝某个方向调整模型的参数,损失就会变小。

  • 优化器状态:如动量、学习率等,也可能需要在多卡中同步。—— 优化器(Optimizer)就是一个“帮你调整模型参数的方法”,让你慢慢走到最佳点(也就是最小误差的位置)。


🔹 GPU 监控

查看GPU状态命令:

nvidia-smi

可查看 GPU 占用率、显存使用、进程信息等。


🔹 Prefill / Decode 分离(PD分离)

  • P(Prefill)阶段:处理输入 Prompt 的阶段,通常计算密集。

  • D(Decode)阶段:处理生成 Token 的阶段,依赖性强但计算量小。

  • 分离原因:Prefill 与 Decode 特性差异大,将两者调度到不同GPU或不同时间资源利用更高。


🔹 其他相关概念

双向注意力(Bidirectional Attention)

  • 常用于 Embedding 模型(如BERT),即对上下文的所有方向都进行建模。

  • 与 GPT 的单向注意力(只考虑左侧Token)不同。

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据