分布式训练模型(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状态命令:
可查看 GPU 占用率、显存使用、进程信息等。
🔹 Prefill / Decode 分离(PD分离)
-
P(Prefill)阶段:处理输入 Prompt 的阶段,通常计算密集。
-
D(Decode)阶段:处理生成 Token 的阶段,依赖性强但计算量小。
-
分离原因:Prefill 与 Decode 特性差异大,将两者调度到不同GPU或不同时间资源利用更高。
🔹 其他相关概念
双向注意力(Bidirectional Attention)
-
常用于 Embedding 模型(如BERT),即对上下文的所有方向都进行建模。
-
与 GPT 的单向注意力(只考虑左侧Token)不同。