ZF4444 / MMAL-Net

This is a PyTorch implementation of the paper "Multi-branch and Multi-scale Attention Learning for Fine-Grained Visual Categorization (MMAL-Net)" (Fan Zhang, Meng Li, Guisheng Zhai, Yizhao Liu).
249 stars 57 forks source link

训练速度的问题 #3

Closed wickai closed 4 years ago

wickai commented 4 years ago

您好,我在跑你的代码。cub200用v100卡跑需要20分钟才能完成一个epoch的训练,而且gpu利用率很低,有办法提高速度么?

ZF4444 commented 4 years ago

@wickai你好,由于训练过程中存在不同branch之间依序传递各自的特征图,所以会减缓训练速度。我用的是P100,GPU利用率在70%以上,每个epoch七分钟过一点,你可以尝试在代码 https://github.com/ZF1044404254/TBMSL-Net/blob/f5b442d1226b0a3afa365c09895ec025b578de15/utils/train_model.py#L76 前添加if epoch>100:,并将# eval testset 和 # tensorboard 代码块放在if语句里,这样前100epoch不会评估test数据,能节省一些时间。

我简单查了一下,貌似v100应该比p100性能更强,应该更快。

wickai commented 4 years ago

谢谢,我们开始训得慢可能是由于机器原因,目前换了环境同时把训练改成4卡并行的版本,大概1分钟一个epoch。目前这边在cub200上用你的默认配置,实现了一个多卡版本,但是目前local acc1精度只有83%左右。我想知道你有没有试过多卡训练,是否能对齐? image 现在我的pytoch版本是1.1 ,多卡并行使用的是torch.nn.parallel.DistributedDataParallel

我在跑单卡版本,想对齐log,给下微信联系方式,想要看下你训练的log

ZF4444 commented 4 years ago

从我的试验经验来说,batch size 6 结果最好,调大调小,都有些许下降,由于tensorboard log文件较大,我上传截图你看一下,欢迎分享你的训练结果

截屏2020-05-06 12 45 16
wickai commented 4 years ago

谢谢~

wickai commented 4 years ago

单卡训练精度我复现指标是89.1%,应该算对齐了~

还有个问题,我在尝试改多卡训练。我想尝试比较简单的方法,直接加入这句: model = torch.nn.DataParallel(model,device_ids=range(torch.cuda.device_count())) 但是会报错:assert all(map(lambda i: i.is_cuda, inputs))

image

看样子是有些参数没有移动到gpu上,我pytorch不是很熟,能帮忙debug下么?

IMJerryChen commented 4 years ago

单卡训练精度我复现指标是89.1%,应该算对齐了~

还有个问题,我在尝试改多卡训练。我想尝试比较简单的方法,直接加入这句: model = torch.nn.DataParallel(model,device_ids=range(torch.cuda.device_count())) 但是会报错:assert all(map(lambda i: i.is_cuda, inputs))

image

看样子是有些参数没有移动到gpu上,我pytorch不是很熟,能帮忙debug下么?

您好,您单卡batch设的多大呀 共耗多少显存?

使用torch.nn.DataParallel模块 要注意model.cuda() dataset.cuda() 你检查下的code 望对你有帮助

ZF4444 commented 4 years ago

单卡训练精度我复现指标是89.1%,应该算对齐了~ 还有个问题,我在尝试改多卡训练。我想尝试比较简单的方法,直接加入这句: model = torch.nn.DataParallel(model,device_ids=range(torch.cuda.device_count())) 但是会报错:assert all(map(lambda i: i.is_cuda, inputs)) image 看样子是有些参数没有移动到gpu上,我pytorch不是很熟,能帮忙debug下么?

您好,您单卡batch设的多大呀 共耗多少显存?

使用torch.nn.DataParallel模块 要注意model.cuda() dataset.cuda() 你检查下的code 望对你有帮助

单卡batch建议6,显存消耗在14G左右。

ZF4444 commented 4 years ago

单卡训练精度我复现指标是89.1%,应该算对齐了~

还有个问题,我在尝试改多卡训练。我想尝试比较简单的方法,直接加入这句: model = torch.nn.DataParallel(model,device_ids=range(torch.cuda.device_count())) 但是会报错:assert all(map(lambda i: i.is_cuda, inputs))

image

看样子是有些参数没有移动到gpu上,我pytorch不是很熟,能帮忙debug下么?

https://github.com/ZF1044404254/TBMSL-Net/blob/f5b442d1226b0a3afa365c09895ec025b578de15/train.py#L45 改为model = nn.DataParallel(model) model = model.cuda() 由于现在身边没有多显卡,暂时无法测试,欢迎你的反馈。谢谢

chaomaer commented 4 years ago

@ZF1044404254 你好, 改为 model = nn.DataParallel(model) model = model.cuda()之后还是报同样的错误,有没有什么调试方法?我现在完全不知道哪里有问题。

chaomaer commented 4 years ago

@wickai 你好,想问以下你们多卡的代码是怎么改的啊,谢谢。

zjuqiushi commented 4 years ago

谢谢,我们开始训得慢可能是由于机器原因,目前换了环境同时把训练改成4卡并行的版本,大概1分钟一个epoch。目前这边在cub200上用你的默认配置,实现了一个多卡版本,但是目前local acc1精度只有83%左右。我想知道你有没有试过多卡训练,是否能对齐? image 现在我的pytoch版本是1.1 ,多卡并行使用的是torch.nn.parallel.DistributedDataParallel

我在跑单卡版本,想对齐log,给下微信联系方式,想要看下你训练的log

请问多卡的代码是如何修改的,可以分享下吗