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,

2222

被折叠的 条评论
为什么被折叠?



