Pytorch distributed 多卡并行载入模型操作


Posted in Python onJune 05, 2021

一、Pytorch distributed 多卡并行载入模型

这次来介绍下如何载入模型。

目前没有找到官方的distribute 载入模型的方式,所以采用如下方式。

大部分情况下,我们在测试时不需要多卡并行计算。

所以,我在测试时只使用单卡。

from collections import OrderedDict
device = torch.device("cuda")
model = DGCNN(args).to(device)  #自己的模型
state_dict = torch.load(args.model_path)    #存放模型的位置

new_state_dict = OrderedDict()
for k, v in state_dict.items():
    name = k[7:] # remove `module.`
    new_state_dict[name] = v
    # load params
model.load_state_dict (new_state_dict)

二、pytorch DistributedParallel进行单机多卡训练

One_导入库:

import torch.distributed as dist
from torch.utils.data.distributed import DistributedSampler

Two_进程初始化:

parser = argparse.ArgumentParser()
parser.add_argument('--local_rank', type=int, default=-1)
# 添加必要参数
# local_rank:系统自动赋予的进程编号,可以利用该编号控制打印输出以及设置device

torch.distributed.init_process_group(backend="nccl", init_method='file://shared/sharedfile',
rank=local_rank, world_size=world_size)

# world_size:所创建的进程数,也就是所使用的GPU数量
# (初始化设置详见参考文档)

Three_数据分发:

dataset = datasets.ImageFolder(dataPath)
data_sampler = DistributedSampler(dataset, rank=local_rank, num_replicas=world_size)
# 使用DistributedSampler来为各个进程分发数据,其中num_replicas与world_size保持一致,用于将数据集等分成不重叠的数个子集

dataloader = DataLoader(dataset, batch_size=batch_size, num_workers=1,drop_last=True, pin_memory=True, sampler=data_sampler)
# 在Dataloader中指定sampler时,其中的shuffle必须为False,而DistributedSampler中的shuffle项默认为True,因此训练过程默认执行shuffle

Four_网络模型:

torch.cuda.set_device(local_rank)
device = torch.device('cuda:'+f'{local_rank}')
# 设置每个进程对应的GPU设备

D = Model()
D = torch.nn.SyncBatchNorm.convert_sync_batchnorm(D).to(device)
# 由于在训练过程中各卡的前向后向传播均独立进行,因此无法进行统一的批归一化,如果想要将各卡的输出统一进行批归一化,需要将模型中的BN转换成SyncBN
   
D = torch.nn.parallel.DistributedDataParallel(
D, find_unused_parameters=True, device_ids=[local_rank], output_device=local_rank)
# 如果有forward的返回值如果不在计算loss的计算图里,那么需要find_unused_parameters=True,即返回值不进入backward去算grad,也不需要在不同进程之间进行通信。

Five_迭代:

data_sampler.set_epoch(epoch)
# 每个epoch需要为sampler设置当前epoch

Six_加载:

dist.barrier()
D.load_state_dict(torch.load('D.pth'), map_location=torch.device('cpu'))
dist.barrier()
# 加载模型前后用dist.barrier()来同步不同进程间的快慢

Seven_启动:

CUDA_VISIBLE_DEVICES=1,3 python -m torch.distributed.launch --nproc_per_node=2 train.py --epochs 15000 --batchsize 10 --world_size 2
# 用-m torch.distributed.launch启动,nproc_per_node为所使用的卡数,batchsize设置为每张卡各自的批大小

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python开发windows GUI程序入门实例
Oct 23 Python
python概率计算器实例分析
Mar 25 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
书单|人生苦短,你还不用python!
Dec 29 Python
浅谈python可视化包Bokeh
Feb 07 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
python 决策树算法的实现
Oct 09 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 Python
PyTorch中permute的使用方法
Apr 26 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 #Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 #Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 #Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 #Python
OpenCV全景图像拼接的实现示例
opencv 分类白天与夜景视频的方法
You might like
星际争霸中的对战模式介绍
2020/03/04 星际争霸
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
PHP制作用户注册系统
2015/10/23 PHP
php 数据结构之链表队列
2017/10/17 PHP
php curl发送请求实例方法
2019/08/01 PHP
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
详解package.json版本号规则
2019/08/01 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
详解python字节码
2018/02/07 Python
Python实现TCP通信的示例代码
2019/09/09 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
大学生职业生涯设计书
2014/01/02 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
企业后勤岗位职责
2014/02/28 职场文书
挂牌仪式主持词
2014/03/20 职场文书
咖啡店创业计划书
2014/08/15 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
党校学习个人总结
2015/02/15 职场文书
2016公司年会主持词
2015/07/01 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
canvas绘制折线路径动画实现
2021/05/12 Javascript
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis