PyTorch分布式训练方法
PyTorch多机多GPU并行训练方法及问题整理
参考MoCo训练源码:源码
torch.multiprocessing.spawn博客

单机多卡

初始化

torch.distributed.init_process_group()包含四个常用的参数
backend:后端,实际上是多个机器之间交换数据的协议
init_method:机器之间交换数据,需要指定一个主节点,而这个参数就是指定主节点的
world_size:介绍都是说是进程,实际就是机器的个数,例如两台机器一起训练的话,设置数值为2
rank:区分主节点和从节点,主节点为0,剩余的为了1-(N-1),N为要使用的机器的数量,即 world_size

  1. import torch.distributed as dist
  2. dist.init_process_group(backend=dist_backend, init_method=args.dist_url,
  3. world_size=world_size, rank=rank)

训练

  1. from torch.utils.data import Dataset, DataLoader
  2. from torch.utils.data.distributed import DistributedSampler
  3. from torch.nn.parallel import DistributedDataParallel
  4. dataset = your_dataset()
  5. datasampler = DistributedSampler(dataset, num_replicas=world_size, rank=rank)
  6. dataloader = DataLoader(dataset, batch_size=batch_size_per_gpu, sampler=datasampler)
  7. model = your_model()
  8. model = DistributedDataPrallel(model, device_ids=[local_rank], output_device=local_rank)