Pytorch中的to方法——数据类型转换、GPU使用方法及注意点、单机多GUP并行执行任务

一、转换数据为浮点数

# (张量不执行inplace操作,因此要重新赋值)
tensorX = torch.ones((3,3))
tensorX.to(torch.float64)

二、将张量放至gpu

    # (张量不执行inplace操作,因此要重新赋值)
    tensorX = tensorX.to('cuda')
    # 指定gpu
    tensorX = tensorX.to('cuda:0')
    @以下是另一种方法
    device = torch.device('cuda:0')
    tensorX = tensorX.to(device)

三、将模型放至gpu

    # (模型执行inplace操作,因此不需要重新赋值)
    net.to('cuda')
    # 指定gpu
    net.to('cuda:0')
    @以下是另一种方法
    device = torch.device('cuda:0')
    net.to(device)

四、注意点

    1.1 gpu数量尽量为偶数,避免异常中断
    1.2 数据量比较小时,多gpu没有单gpu好,而单gpu没有cpu好
    1.3 若内存不够大,使用多gpu训练时可设置pin_memory=False
    1.4 在只有cpu的电脑中加载gpu下的模型时要设置map_location='cpu'
        net = torch.load(f,map_location='cpu')
        state_dict_load = torch.load(f,map_location='cpu')
    1.5 多gpu训练的模型需要特别的加载形式
        '''
        'module.linears.0.weight','module.linears.1.weight',
        'module.linears.2.weight','module.linears.3.weight'
        '''
        from collections import OrderedDict
        # 构建有序字典
        new_state_dict = OrderedDict()
        for k,v in state_dict_load.items():
            # 如果k以'module.'开头则取第七个开始的
            namekey = k[7:] if k.startswith('module.') else k
            new_state_dict[namekey] = v

五、前期准备

    # 判断gpu是否可用
    torch.cuda.is_available()
    # 获取可使用的gpu数量
    torch.cuda.device_count()
    # 查看gpu具体配置
    nvidia-sim
    # 获取gpu名称
    torch.cuda.get_device_name()
    
    # 为当前gpu设置随机种子
    torch.cuda.manual_seed()
    # 为所有可见可用的gpu设置随机种子
    torch.cuda.manual_seed_all()
    # gpu的选择
    '''按顺序选2号gpu和3号gpu'''
    os.environ.setdefault('CUDA_VISIBLE_DEVICES','2,3')
    '''按顺序选0号、3号和2号gpu'''
    os.environ.setdefault('CUDA_VISIBLE_DEVICES','0,3,2')

六、多gpu运算的分发并行机制(单主机多gpu)

    # 先分发(分配任务),再并行(并行运行)
    @每个gpu中的数据量为batchsize除参与分发的gpu数量
    # model:需要包装分发的模型
    # device_ids:可分发的gpu,默认分发到所有可见可用的gpu
    # output_device:结果输出设备
    torch.nn.DataParallel(model,device_ids=None,output_device=None,dim=0)  
    model.to(device)

 


版权声明:本文为qq_25841513原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>