添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

PyTorch深度学习框架可以利用GPU加速网络训练,网络太深,参数太多的话,很可能在利用GPU训练网络的时候导致GPU显存不够,无法继续训练。GPU的显存大小几乎与其价格成正比,显存越大,也就越贵。但是为了利用GPU训练深度学习网络模型,可能需要大显存的显卡,比如直接买一个1080ti,显存为11G,但是也可以退而求其次,买两个1070ti,总显存为16G,似乎更划算。那么,单机多卡(一台机器配置多个GPU)情况下,在PyTorch框架下怎样训练模型呢?在PyTorch 1.0之后,可以利用多GPU进行网络模型训练。

1. 第一种情况,利用单机多卡对模型进行并行GPU处理(本人当时的需求为一个gtx 1070ti显存为8G,训练模型时出现超出显存的错误,所以又加装了一个gtx 1070ti显卡,这样总显存为16G,够用啦)。

model = torch.nn.DataParallel(model, device_ids=[0, 1]).cuda()
output = model(input)

class torch.nn.DataParallel(module, device_ids=None, output_device=None, dim=0),通过device_ids参数可以指定在哪些GPU上进行优化,output_device指定输出到哪个GPU上。

DataParallel并行的方式,是将输入一个batch的数据均分成多份,分别送到对应的GPU进行计算,各个GPU得到的梯度累加。与Module相关的所有数据也都会以浅复制的方式复制多份,在此需要注意,在module中属性应该是只读的。

if torch.cuda.device_count() > 1:
  model = nn.DataParallel(model)
if torch.cuda.is_available():
   model.cuda()

2,。 第二种情况,利用多机多卡进行分布式训练。torch.nn.parallel.DistributedDataParallel可以实现单机多卡和多机多卡的分布式训练。对于单机多卡,利用torch.nn.parallel.DistributedDataParallel对模型进行训练,每个GPU独立执行一个BatchSize的数据,如果单卡显存太小,仍然会出现显存不够的错误,导致模型无法继续训练。启动方式如下:

torch.distributed.init_process_group(backend='nccl', world_size=4, rank=, init_method='...') 
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[i], output_device=i)

下面是关于torch.nn.DataParallel与torch.nn.parallel.DistributedDataParallel的启动对比:

    if args.distributed:
        # For multiprocessing distributed, DistributedDataParallel constructor
        # should always set the single device scope, otherwise,
        # DistributedDataParallel will use all available devices.
        if args.gpu is not None:
            torch.cuda.set_device(args.gpu)
            model.cuda(args.gpu)
            # When using a single GPU per process and per
            # DistributedDataParallel, we need to divide the batch size
            # ourselves based on the total number of GPUs we have
            args.batch_size = int(args.batch_size / ngpus_per_node)
            model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.gpu])
        else:
            model.cuda()
            # DistributedDataParallel will divide and allocate batch_size to all
            # available GPUs if device_ids are not set
            model = torch.nn.parallel.DistributedDataParallel(model)
    elif args.gpu is not None:
        torch.cuda.set_device(args.gpu)
        model = model.cuda(args.gpu)
    else:
        # DataParallel will divide and allocate batch_size to all available GPUs
        if args.arch.startswith('alexnet') or args.arch.startswith('vgg'):
            model.features = torch.nn.DataParallel(model.features)
            model.cuda()
        else:
            model = torch.nn.DataParallel(model).cuda()

1. pytorch 多GPU训练总结(DataParallel的使用)

2. PyTorch使用并行GPU处理数据

3. Pytorch中多GPU训练指北

4. [深度学习] 分布式Pytorch 1.0介绍(三)

5. PyTorch分布式训练简介

PyTorch深度学习框架可以利用GPU加速网络训练,网络太深,参数太多的话,很可能在利用GPU训练网络的时候导致GPU显存不够,无法继续训练。GPU的显存大小几乎与其价格成正比,显存越大,也就越贵。但是为了利用GPU训练深度学习网络模型,可能需要大显存的显卡,比如直接买一个1080ti,显存为11G,但是也可以退而求其次,买两个1070ti,总显存为16G,似乎更划算。那么,单机多卡(一台机器配... 构建神经网络的数据集 1)数据增强:torchvision中transforms模块自带功能,将数据集中照片进行旋转、翻折、放大…得到更多的数据 2)数据预处理:torchvision中transforms也帮我们实现好了,直接调用即可 3)处理好的数据集保存在DataLoader模块中,可直接读取batch数据 网络模型训练操作: 迁移pytorch官网中models提供的resnet模型,torchvision中有很多经典网络架构,调用起来十分方便,并且可以用人家训练好的权重参数来继续训练,也就是所谓的迁移学习 选择GPU计算、选择训练哪些层、优化器设置、损失函数设置… 训练全连接层...... 详细介绍见:https://blog.csdn.net/zhaohaobingniu/article/details/119922606?spm=1001.2014.3001.5501
文章目录1. 单机单卡1.1 环境配置1.2 模型拷贝1.3 数据拷贝1.4 模型保存1.5 模型的加载1.6 注意事项2. 单机多卡2.1 环境配置 1. 单机单卡 1.1 环境配置 判断显卡是否可用 import torch # 判断环境中是否有cuda print(f"torch.cuda.is_available()={torch.cuda.is_available()}") # torch.cuda.is_available()=True # 通用编程语句 device = torch.d
pytorchGPU训练总结(DataParallel的使用) 这里记录用pytorchGPU训练 踩过的许多坑仅针对单服务器多gpu 数据并行 而不是 多机器分布式训练 一、官方思路包装模型 这是pytorch 官方的原理图按照这个官方的原理图修改应该参照 https://blog.csdn.net/qq_19598705/article/details/8039...
文章目录torch.cudatorch.cuda.is_available()torch.cuda.set_device(device)class torch.cuda.device(idx)torch.cuda.device_count()torch.cuda.get_device_name(0)torch.cuda.current_device()torch.device('cuda')torch.device('cpu') torch.cuda 该包增加了对CUDA张量类型的支持,实现了与CPU张量
要提高PyTorchGPU利用率,有以下几种方法: 1. 批量化数据:将多个样本合并成一个批次,以便在GPU上并行处理。这可以通过在 DataLoader 中设置 batch_size 参数来实现。 2. 使用GPU加速的操作:PyTorch已经内置了许多GPU加速的操作,例如torch.matmul()和torch.nn.functional.conv2d()等。尽可能使用这些操作可以提高GPU利用率。 3. 优化模型:通过优化模型的结构和参数,可以减少GPU的负载。例如,使用更小的模型、减少层数、减少参数量等。 4. 减少数据传输:将数据传输到GPU的时间也会降低GPU利用率。因此,尽可能减少数据传输的次数和数据传输的大小,可以提高GPU利用率。例如,在数据预处理中使用torch.utils.data.Dataset和torch.utils.data.DataLoader等功能可以减少数据传输。 5. 使用异步数据加载:使用异步数据加载可以减少GPU的等待时间。例如,使用torch.utils.data.DataLoader 的 num_workers 参数来启用异步数据加载。 这些方法可以提高PyTorchGPU利用率,从而加速深度学习模型的训练和推理。