我在PyTorch中有以下虚拟代码
class inside(nn.Module):
def __init__(self):
super(inside, self).__init__()
self.weight_h = nn.Parameter(SOMETHING GOES HERE) # send to CPU or GPU
self.weight_v = nn.Conv2d(SOMETHING GOES HERE) # send to CPU or GPU
def forward(self, x):
...
return x
class main_class(nn.Module):
def __init__(self):
super(main_class, self).__init__()
self.paramA = nn.Conv2d(...)
self.paramB = nn.Conv2d(...)
self.in_class = inside()
def forward(self, x):
...
return x
device = #Define what GPU device to use or CPU
object = main_class()
object = object.to(device)假设在这段代码中,device是GPU2。然后我知道参数self.paramA和self.paramB肯定已经加载到GPU2上,而不是加载到CPU或任何其他GPU上。但是对self.weight_h和self.weight_v又能说些什么呢?它们是否保证在GPU2上,或者我需要为inside类的参数显式声明这一点吗?
我使用的是PyTorch 1.8.1,但可能建议使用一种非常通用的方法,该方法适用于任何PyTorch version>=1.0
发布于 2021-09-16 04:26:00
我猜当你说这段代码的时候--这个术语可以更清晰一些。有两个东西可以放在GPU中。其中一件事是关于数据。你可以把你的数据保存在GPU之类的地方。
它还有一个部分,模型可以转移到GPU上。在这种情况下,当你做final_model.to(...)时,它内部的所有模块作为最终模型的一部分将被转移到图形处理器。
我之所以区分这两个,是因为有时很容易把这两个事情搞混。
所以最后的答案是,是的,他们保证在GPU上。(属于大型模型一部分的模型权重)。
https://stackoverflow.com/questions/69202259
复制相似问题