pytorch 踩坑记录

其他坑一些别人踩过的坑知乎上的回答

1.Broadcast function not implemented for CPU tensors

     这是因为model不在gpu上所致。model.to(device)。DataParallel会对模型参数所在的gpu位置进行检查,见源码

   DataParallel是每次forward时对模型进行broadcast,当模型不在第一个GPU上时,就会出现错误

   https://github.com/pytorch/pytorch/issues/17065

 

2.all tensors must be on devices[0]

   这是因为model不在DataParallel设置的ids中的第一个上。输入的变量可以随便放在一个GPU上,而模型必须在你设置DataParallel的ids中的第一个

 

3. 多GPU模型转换到cpu上

   通过DataParallel包装的model会再加一层module。所以state_dict会多一个module前缀。假设net1 是通过DataParallel包装的模型Net的实例,我们要把它装换到cpu上。方法就是重新建一个对象,把参数迁移过去
       

    state_dict = net.module.state_dict()
    net = Net()
    net.load_state_dict(state_dict)

4.使用DataParallel包装模型时,如果gpu>1且模型是多输出的,会出现梯度为None的错误

            参数的梯度永远都是None,这个是pytorch 1.0 的一个bug 或见FloWaveNet issues,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值