PyTorch 提供了强大的工具和库,用于分布式训练和部署模型。
分布式训练的优势加速训练:利用多个 GPU 或多个机器并行处理数据,加快训练速度。处理大规模数据:能够处理单台机器无法容纳的大规模数据集。提高模型性能:通过分布式训练,可以训练更复杂的模型,提高模型性能。分布式训练核心方法数据并行(Data Parallelism)
原理:将数据分片到多个GPU,每个GPU计算局部梯度,全局同步后更新模型。工具:DistributedDataParallel (DDP):高效多进程同步,推荐用于单机/多机训练。DataParallel (DP):单进程多线程,存在GIL瓶颈,适合简单场景。模型并行(Model Parallelism)
原理:将模型拆分到不同GPU,适用于超大模型(如LLM)。工具:torch.nn.parallel或自定义拆分逻辑。混合并行
结合数据与模型并行,如DeepSpeed、Megatron-LM。分布式训练实战步骤(DDP)1.初始化进程组
import torch.distributed as distdef setup(rank, world_size): dist.init_process_group( backend="nccl", # GPU训练选NCCL,CPU可选gloo init_method="env://", rank=rank, world_size=world_size ) torch.cuda.set_device(rank)2.配置分布式数据加载器
from torch.utils.data.distributed import DistributedSamplertrain_dataset = ... # 定义数据集sampler = DistributedSampler(train_dataset, shuffle=True)dataloader = DataLoader(train_dataset, batch_size=64, sampler=sampler)3.封装模型为DDP
from torch.nn.parallel import DistributedDataParallel as DDPmodel = MyModel().to(rank)model = DDP(model, device_ids=[rank])4.启动训练脚本
单机多卡启动命令:torchrun --nproc_per_node=4 train.py多机启动:需指定--nnodes、--node_rank及主节点IP。