[ PROMPT_NODE_27192 ]
distributed_training
[ SKILL_DOCUMENTATION ]
# 分布式训练 - 综合指南
## 概述
PyTorch Lightning 提供了多种策略,用于在多个 GPU、节点和机器上高效训练大型模型。根据模型大小和硬件配置选择合适的策略。
## 策略选择指南
### 何时使用每种策略
**常规训练(单设备)**
- 模型大小:任何适合单 GPU 内存的大小
- 使用场景:原型设计、小型模型、调试
**DDP (Distributed Data Parallel)**
- 模型大小:<500M 参数(例如 ResNet50 ~80M 参数)
- 何时使用:权重、激活值、优化器状态和梯度都适合 GPU 内存
- 目标:跨多个 GPU 扩展批处理大小和速度
- 最适合:大多数标准深度学习模型
**FSDP (Fully Sharded Data Parallel)**
- 模型大小:500M+ 参数(例如 BERT-Large, GPT 等大型 Transformer)
- 何时使用:模型不适合单 GPU 内存
- 推荐:模型并行新手或从 DDP 迁移的用户
- 功能:激活检查点、CPU 参数卸载
**DeepSpeed**
- 模型大小:500M+ 参数
- 何时使用:需要尖端功能或已经熟悉 DeepSpeed
- 功能:CPU/磁盘参数卸载、分布式检查点、细粒度控制
- 权衡:配置更复杂
## DDP (Distributed Data Parallel)
### 基本用法
python
# 单 GPU
trainer = L.Trainer(accelerator="gpu", devices=1)
# 单节点多 GPU(自动 DDP)
trainer = L.Trainer(accelerator="gpu", devices=4)
# 显式 DDP 策略
trainer = L.Trainer(strategy="ddp", accelerator="gpu", devices=4)
### 多节点 DDP
python
# 在每个节点上运行:
trainer = L.Trainer(
strategy="ddp",
accelerator="gpu",
devices=4, # 每个节点的 GPU 数
num_nodes=4 # 总节点数
)
### DDP 配置
python
from lightning.pytorch.strategies import DDPStrategy
trainer = L.Trainer(
strategy=DDPStrategy(
process_group_backend="nccl", # GPU 使用 "nccl",CPU 使用 "gloo"
find_unused_parameters=False, # 如果模型有未使用的参数,设为 True
gradient_as_bucket_view=True # 更节省内存
),
accelerator="gpu",
devices=4
)
### DDP Spawn
当 `ddp` 导致问题时使用(速度较慢但兼容性更好):
python
trainer = L.Trainer(strategy="ddp_spawn", accelerator="gpu", devices=4)
### DDP 最佳实践
1. **批处理大小:** 乘以 GPU 数量
python
# 如果使用 4 个 GPU,有效批处理大小 = batch_