深度学习pytorch训练trick

姓名:毕晓鹏

学号:19021210824

【嵌牛导读】自己平时积累了一些pytorch的训练trick,分享给大家

【嵌牛鼻子】pytorch

【嵌牛提问】你了解更多的trick吗?

【嵌牛正文】

pytorch随机种子

pytorch随机种子是随机初始化的,如果想复现一个比较好的结果,可以设置固定随机种子。

其中cudnn打开可以提高计算效率,但是会影响每次复现结果。另外如果图像预处理的时候用了随机切割,随机翻转需要对python的随机数生成器进行固定。

#增加运行效率

torch.backends.cudnn.benchmark = False        # if benchmark=True, deterministic will be False

torch.backends.cudnn.deterministic = True

#固定随机种子

np.random.seed(0)

torch.manual_seed(0)      #cpu设置随机种子

torch.cuda.manual_seed_all(0) #为所有gpu设置随机种子

random.seed(0)

pytorch混合精度训练

pytorch默认用fp32进行训练,如果用fp16做储存和乘法,用fp32做累加计算,fp16会节省显存占用,加快训练和推理的速度。但是也会带来一些问题,具体参考下面链接,所以用混合精度会更好一些。

Nicolas:【PyTorch】唯快不破:基于Apex的混合精度加速​zhuanlan.zhihu.com

我一开始用的pip进行安装,发现导入的时候报错,网上解决办法是用源码安装。

pip uninstall apex

git clone https://www.github.com/nvidia/apex

cd apex

python setup.py install

使用方法:

from apex import amp

(net,net_fc),optimizer = amp.initialize([net,net_fc], optimizer, opt_level= "O1")#这里多个net就用列表

with amp.scale_loss(loss_mean, optimizer) as scaled_loss:

scaled_loss.backward()

#bn同步

from apex.parallel import convert_syncbn_model

net = convert_syncbn_model(net)

net = net.to(device)

#多卡

from apex.parallel import DistributedDataParallel as DDP

net, opt = amp.initialize(net, opt, opt_level="O1")  # 字母小写o,不是零。

net = DDP(net, delay_allreduce=True)  # 必须在initialze之后

发现在我电脑上用1050ti对比,3030减小到2725M,速度有一定下降,可能因为我显卡的原因显存变化不明显。

2080ti可以节省一半显存,而且速度单卡混合精度要比之前双卡float32快一点。

多显卡训练

os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"

device_ids = [0,1]

net = nn.DataParallel(net, device_ids=[0,1])#指定显卡

net.to(device=device_ids[0])  #网络放到显卡0

单卡加载多卡训练权重

from collections import OrderedDict

state_dictBA = torch.load(opt.pth)

# create new OrderedDict that does not contain `module.`

new_state_dictBA = OrderedDict()

for k, v in state_dictBA.items():

    name = k[7:] # remove `module.`

    new_state_dictBA[name] = v

G_BA.load_state_dict(new_state_dictBA)

tensorboard使用

首先安装 pip tensorboard

在程序里调用,这里只是显示波形图

from torch.utils.tensorboard import SummaryWriter

import time

writer = SummaryWriter('./path/to/log')

for epoch in range(100):

    time.sleep(5)

    print(epoch)

    writer.add_scalar('loss', 100-epoch,epoch)

    writer.add_scalar('acc', epoch/100, epoch)

3、在命令窗口打开界面tensorboard --logdir=log,这里在log路径下打开,否则要指定log文件夹目录。

计算模型耗时:

正确测试代码在cuda运行时间,需要加上torch.cuda.synchronize(),使用该操作来等待GPU全部执行结束,CPU才可以读取时间信息。

torch.cuda.synchronize()#等待当前设备上所有流中的所有核心完成。

start = time.time()

result = model(input)

torch.cuda.synchronize()

end = time.time()

多线程读取数据

当gpu处理数据很快时,cpu读取数据的速度可能会成为瓶颈,导致显卡利用率一直在波动。

可以设置多线程(一般为4,8,16),打开pin_memory(需要内存大一些)

torch.utils.data.DataLoader(image_datasets[x],

                            batch_size=batch_size,

                            shuffle=True,

                            num_workers=8,

                            pin_memory=True)

参考:

英伟达APEX,多GPU分布式训练,同步Batchnorm,自动混合精度训练法宝指南_我的博客有点东西-CSDN博客_syncbatchnorm​blog.csdn.net深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析_人工智能_是否龍磊磊真的一无所有的博客-CSDN博客​blog.csdn.netPyTorch测试模型执行计算耗费的时间​www.jianshu.compytorch加载预训练网络权重,单GPU加载多GPU,CPU加载GPU权重_人工智能_YellowYi的博客-CSDN博客​blog.csdn.net

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343