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相比)。 –

相關問題