安装warp-ctc的问题、DataParallel的问题

基本和这篇博客说的一样:
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)

猜你喜欢

转载自blog.csdn.net/xnmc2014/article/details/86632404
CTC