基本和这篇博客说的一样:
https://blog.csdn.net/yuanlulu/article/details/85462997
pytorch 0.4.1的地址在:
https://github.com/SeanNaren/warp-ctc/releases/tag/0.4.1
下载源代码,解压即可。
然后还要 pip install cffi 的包
用 Dataparallel的话,是存在GPU利用不平衡的。
但如果 调用 m.module(即子函数),会出现严重的不平衡,只用 GPU 0
https://discuss.pytorch.org/t/run-pytorch-on-multiple-gpus/20932/20
正如这个回答所说,最好封装在 forward 里面,不调用 module
criterion = nn.DataParallel(nn.CrossEntropyLoss(),device_ids=[0,1,2]).cuda()
损失函数,最后 用 loss.mean()吧,交叉熵一般最后也是求的均值。
对于不平衡,这篇似乎有更好的解决:
https://discuss.pytorch.org/t/dataparallel-imbalanced-memory-usage/22551/12
知乎上的讨论:
https://www.zhihu.com/question/67726969
关于加载:
作者:qiao
链接:https://www.zhihu.com/question/67726969/answer/389980788
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
def load_network(network):
save_path = os.path.join('./model',name,'net_%s.pth'%opt.which_epoch)
state_dict = torch.load(save_path)
# create new OrderedDict that does not contain `module.`
from collections import OrderedDict
new_state_dict = OrderedDict()
for k, v in state_dict.items():
namekey = k[7:] # remove `module.`
new_state_dict[namekey] = v
# load params
network.load_state_dict(new_state_dict)
return network
#----------单GPU训练读取模型的代码,single gpu training-----------------
def load_network(network):
save_path = os.path.join('./model',name,'net_%s.pth'%opt.which_epoch)
network.load_state_dict(torch.load(save_path))
return network
代码中因为又封装了一层字典,故
new_state_dict = OrderedDict()
for k,v in checkpoint['state_dict'].items():
namekey = k[7:]
new_state_dict[namekey] = v
model.load_state_dict(new_state_dict)