ubuntu

Ubuntu PyTorch如何进行多GPU训练

小樊
46
2025-09-03 01:18:12
栏目: 智能运维

在Ubuntu上进行PyTorch的多GPU训练,你需要确保你的系统配置了多个GPU,并且已经安装了支持多GPU的PyTorch版本。以下是进行多GPU训练的基本步骤:

  1. 检查GPU可用性: 在开始之前,你可以使用以下命令来检查是否有多个GPU可用:

    import torch
    print(torch.cuda.device_count())
    
  2. 数据并行: PyTorch提供了torch.nn.DataParallel类来实现简单的数据并行。这是一个快速的实现方式,但它有一些限制,比如不支持某些层的并行化。

    import torch
    import torch.nn as nn
    from torchvision import models
    
    # 假设你有一个模型和数据加载器
    model = models.resnet18(pretrained=True)
    model.cuda()  # 将模型发送到GPU
    
    # 如果有多个GPU,使用DataParallel
    if torch.cuda.device_count() > 1:
        print(f"Let's use {torch.cuda.device_count()} GPUs!")
        model = nn.DataParallel(model)
    
    # 现在你可以像平常一样训练模型
    # ...
    
  3. 分布式数据并行(DDP): 对于更复杂的场景,尤其是当你需要更大规模的并行化时,可以使用torch.nn.parallel.DistributedDataParallel。DDP提供了更好的性能和更多的功能,但它需要更多的设置。

    import torch
    import torch.nn as nn
    from torch.nn.parallel import DistributedDataParallel as DDP
    from torchvision import models
    import torch.distributed as dist
    from torch.utils.data import DataLoader
    from torch.nn.parallel import DistributedSampler
    
    # 初始化分布式环境
    dist.init_process_group(backend='nccl')  # 'nccl' is recommended for distributed GPU training
    
    # 假设你有一个模型、数据集和数据加载器
    model = models.resnet18(pretrained=True).cuda()
    model = DDP(model)
    
    # 创建一个分布式采样器
    dataset = ...  # 你的数据集
    sampler = DistributedSampler(dataset)
    loader = DataLoader(dataset, batch_size=..., sampler=sampler)
    
    # 训练模型
    # ...
    

    注意:使用DDP时,你需要为每个进程指定一个唯一的rank,并且通常会在命令行中使用-m参数来启动多个进程。

  4. 运行多GPU训练: 如果你使用的是DataParallel,你可以直接运行你的训练脚本,PyTorch会自动检测并使用所有可用的GPU。

    如果你使用的是DDP,你需要在命令行中使用torch.distributed.launchaccelerate库来启动你的训练脚本。例如:

    python -m torch.distributed.launch --nproc_per_node=NUM_GPUS_YOU_HAVE YOUR_TRAINING_SCRIPT.py
    

    或者,如果你使用accelerate库:

    accelerate launch YOUR_TRAINING_SCRIPT.py
    

确保你的PyTorch版本支持多GPU训练,并且你的硬件和驱动程序都是最新的。此外,多GPU训练可能需要大量的内存和带宽,因此确保你的系统资源足够。

0
看了该问题的人还看了