我想要一个代码量最小的方法,这样脚本中的所有内容都可以在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相比如何?
做ü做'D型= torch.cuda.FloatTensor'把戏? –
我不知道。我并没有真正解决这个问题。 “maybe_cuda”有用的是你可以传递任何种类的张量(FloatTensor,LongTensor,ByteTensor等)或变量。两者都实现'.cuda()'。另一方面,如你所说的使用dtype要求i)具有全局dtype变量或将它传递到任何地方,ii)通常不解决问题,即对于其他类型的问题 – pltrdy
我认为我困惑的是如果至少有一个张量已经被指定为生活在GPU中,这是否意味着每一个未来的张量都会自动生成GPU?这就是我相信MATLAB的工作原理,但我不明白GPU计算的模型是在pytorch中(还是与其他流行的框架如TensorFlow相比)。 –