我想要一個代碼量最小的方法,這樣腳本中的所有內容都可以在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相比)。 –