3

我想要一个代码量最小的方法,这样脚本中的所有内容都可以在GPU中自动运行(或者pytorch的标准方式)。例如:如何确保Pytorch中的所有内容都自动运行在GPU上?

torch.everything_to_gpu() 

然后它“正常工作”。我不在乎手动将东西放入GPU等。我只是想让它自动完成它的工作(有点像tensorflow那样吗?)。我确实看到了a related question in the pytorch forum,但它似乎并没有直接解决我的问题。

现在在我看来,(从我经历过的例子),人们可以通过指定一个简单的类型,每一个火炬变量这样做我想要什么/张量如下:

dtype = torch.FloatTensor 
# dtype = torch.cuda.FloatTensor # Uncomment this to run on GPU 

所以只要变量/张量是以某种方式需要dtype例如

Variable(torch.FloatTensor(x).type(dtype), requires_grad=False) 

那么我们可以使用那个单一的变量来控制GPU中的内容而不是。如果使用torch.nn.Module软件包,我遇到的这个问题对我来说会变得模糊不清。例如,当使用

l = torch.nn.Linear(D_in,D_out) 

或服装NN类(从它继承)。这样的情况似乎是处理它的最好方式是使用:功能/方法。然而,这似乎暗示了我可能还有其他隐藏的功能,我可能不知道确保所有的功能确实在GPU中运行。

因此:是否有一个集中的方式来确保的一切运行在一些(理想情况下自动)分配GPU?


在反思中,我认为让我困惑的一件事是,我不明白pytorch载体在GPU上的计算方式。例如,我很确定,MATLAB的工作方式是,如果至少有一件事情在GPU上,那么所有进一步的计算将在GPU上进行。所以我想,我想知道,pytorch是如何工作的?如果可能的话,它与TensorFlow相比如何?

回答

2

我认为没有这样的事情。

从我看到的人们通常创建的类:
我)从nn.Module继承。 ii)具有描述模型参数的属性(例如self.opt);以及ii)具有描述模型参数的属性(例如,self.opt)。
iii)将每个变量/参数设置为属性(例如self.my_var
iv)如果设置了一种-use_gpu参数,则在其上调用.cuda()

我也在我的类中使用maybe_cuda(variable)函数来创建变量更容易(传递变量,如果opt.cuda为真,则返回variable.cuda()

其实,我做了这样的事情(也许不是完美的,但发现它实用):

class MyModule(nn.Module): 
    def __init__(self, opt): 
     super(MyModule, self).__init__() 
     self.opt = opt 

    def maybe_cuda(self, variable): 
     if self.opt.cuda: 
      return variable.cuda() 
     return variable 

class Model(MyModule): 
    def __init__(self, opt, other_arg): 
     super(Model, self).__init__(opt) 

     self.linear = nn.Linear(opt.size1, opt.size2) 
     self.W_out = nn.Parameter(_____) 

    def forward(self, ____): 
     # create a variable, put it on GPU if possible 
     my_var = self.maybe_cuda(Variable(torch.zeros(___))) 
+0

做ü做'D型= torch.cuda.FloatTensor'把戏? –

+0

我不知道。我并没有真正解决这个问题。 “maybe_cuda”有用的是你可以传递任何种类的张量(FloatTensor,LongTensor,ByteTensor等)或变量。两者都实现'.cuda()'。另一方面,如你所说的使用dtype要求i)具有全局dtype变量或将它传递到任何地方,ii)通常不解决问题,即对于其他类型的问题 – pltrdy

+0

我认为我困惑的是如果至少有一个张量已经被指定为生活在GPU中,这是否意味着每一个未来的张量都会自动生成GPU?这就是我相信MATLAB的工作原理,但我不明白GPU计算的模型是在pytorch中(还是与其他流行的框架如TensorFlow相比)。 –

相关问题