在本教程中,我們將學習如何使用多個GPU: DataParallel 的用法.
與PyTorch壹起使用GPU非常容易。您可以將模型放在GPU上:
請註意,只要調用 my_tensor.to(device) ,就會在GPU上返回 my_tensor 的新副本,而不是重寫 my_tensor 。 您需要將它分配給壹個新的tensor,並在GPU上使用該tensor。
在多個GPU上執行前向、後向傳播是很自然的。但是,PYTORCH默認只使用壹個GPU。 妳可以輕松地在多個GPU上運行您的操作,方法是讓妳的模型使用 DataParallel 並行運行:
這是本教程的核心。我們將在下面更詳細地探討它。 導入 與 參數 ———————-
導入 PyTorch 模塊和定義參數
設備
虛擬數據集
制造壹個 虛擬的(隨機產生) 數據集。妳只需要實現 Python 的 魔法函數 getitem :
簡單模型
對於演示,我們的模型只獲得壹個輸入,執行壹個線性操作,並給出壹個輸出。 但是,您可以在任何模型(CNN、RNN、Capsule Net等)上使用 DataParallel 。
我們在模型中放置了壹個print語句來監視輸入和輸出張量的大小。 請註意批次0的打印內容。
創建模型和數據並行
這是本教程的核心部分。首先,我們需要創建壹個模型實例,並檢查我們是否有多個GPU。 如果我們有多個GPU, 我們可以使用 nn.DataParallel 來包裝我們的模型。 然後我們可以通過模型 model.to(device) 將我們的模型放在GPU上
運行模型
現在我們可以看到輸入和輸出張量的大小。
結果
如果您沒有GPU或壹個GPU,當我們批處理30個輸入和30個輸出時,模型得到30,輸出與預期相同。 但是如果妳有多個GPU,那麽妳可以得到這樣的結果。
總結
DataParallel 會自動拆分數據,並將作業訂單發送到多個GPU上的多個模型。 在每個模型完成它們的工作之後,DataParallel 在將結果返回給妳之前收集和合並結果。