当网络需要共享(常量)"张量"时,使用"DataParallel"



我想使用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只是为了完成一些事情(。

我认为不需要另一个函数来做到这一点,尽管名称可能会有点令人困惑。

相关内容

  • 没有找到相关文章

最新更新