我想使用DataParallel
沿批处理维度在多个 GPU 上分配我的计算。我的网络在内部需要一个Tensor
(我们称之为A
(,它是恒定的,不会通过优化而改变。似乎DataParallel
不会自动将此Tensor
复制到所有有问题的 GPU,因此网络会抱怨它看到的输入数据块x
驻留在与A
不同的 GPU 上。
有没有办法DataParallel
自动处理这种情况?或者,有没有办法将Tensor
复制到所有GPU?还是我应该为每个 GPU 保留一个Tensor
,并根据forward
看到的块所在的位置手动确定要使用的副本?
你应该用torch.nn.Parameter
包裹你的张量,并在创建过程中设置requires_grad=False
。
torch.nn.Parameter
并不意味着张量必须是可训练的。
它仅仅意味着它是模型的一部分,如果需要,应该转移(例如多个GPU(。
如果不是这种情况,torch
就无法知道__init__
中的哪个张量是模型的一部分(你可以对张量做一些操作并添加到self
只是为了完成一些事情(。
我认为不需要另一个函数来做到这一点,尽管名称可能会有点令人困惑。