在WSL2啟用cuda進行深度學習嘗鮮

2022-04-30 20:36:09 字數 1670 閱讀 2641

在做深度學習相關實驗時,我一般會直接在本機 linux 環境下進行,因為我需要基於 cuda 來啟用 gpu 運算。考慮到經常還要遷移到面向客戶pc機的智慧型服務,所以我偶爾也會選擇在 windows 上進行。在 windows 10 中自從有了 wsl,我的選擇是使用 wsl 遠端連線高效能伺服器,這樣才能保持研發體驗的一致性,我特別期望能擺脫這樣的麻煩,如果能在windows 10 本地切換乙個 linux系統又能使用 cuda 就好了,幸運的訊息是,最新的 windows 10 的更新推出 wsl2 對 cuda 的支援,我迫不及待地做了一下基準測試,想比較一下不同環境的效能表現。

我選擇的幾個系統環境是這樣:

主要硬體配置是這樣:

測試用的深度學習模型我使用的是最經典的mnist,我比較熟悉pytorch所以**我採用了這個示例倉庫,我修改了部分**如下,讓網路模型更大以獲得更準確的讀數。

class

net(nn.module):

def__init__

(self):

super(net, self).

__init__

() self.conv1 = nn.conv2d(1, 128, 3, 1)

self.conv2 = nn.conv2d(128, 128, 3, 1)

self.conv3 = nn.conv2d(128, 128, 3, 1)

self.dropout1 = nn.dropout2d(0.25)

self.dropout2 = nn.dropout2d(0.5)

self.fc1 = nn.linear(15488, 15488//2)

self.fc2 = nn.linear(15488//2, 10)

defforward(self, x):

x =self.conv1(x)

x =f.relu(x)

x =self.conv2(x)

x =f.relu(x)

x =self.conv3(x)

x =f.relu(x)

x = f.max_pool2d(x, 2)

x =self.dropout1(x)

x = torch.flatten(x, 1)

x =self.fc1(x)

x =f.relu(x)

x =self.dropout2(x)

x =self.fc2(x)

output = f.log_softmax(x, dim=1)

return output

其中batch size我設為512,epochs設為14,以precision為fp32執行,結果對比如下:

哈哈,老實說結果還湊合!wsl2 在啟用 cuda 支援後比本機 ubuntu 環境下多消耗了18%,要知道這是在 nvidia rtx 2080 ti 上訓練模型。目前 wsl2 對 cuda 的支援仍處於早期預覽模式,期待各路工程師、研究員大神們,以及微軟和 nvidia 再打磨下,盡快達到接近本機 ubuntu 效能的水平。如果對訓練時長消耗特別嚴格的研究(比如海量影象、語料)來說,多花18%是很難接受的,但對我來說,訓練樣本資料都還比較小,一般也就到2g差不多了,所以我可以稍稍犧牲下作業系統層面的效能,採用非同步訓練來彌補一下,畢竟我換來的是能用 windows 10 和 wsl2 作為我的主研發環境,不用多系統或者遠端linux系統來回切換了。

WSL 2 使用說明

cpu啟動虛擬機器平台 在bios中設定 管理員許可權下設定 enable windowsoptionalfeature online featurename virtualmachineplatform enable windowsoptionalfeature online featurenam...

在Windows 10上安裝WSL2

toc wsl2 在windows10上安裝 wsl2 是基於hyper v的,所以windows 機器必須支援虛擬化。如果是虛機的那就要支援巢狀的虛擬化。網上一堆看bios的太麻煩了。簡單的方法就是檢視一下windows 的task manager 裡的cpu選項有沒有virtualization...

如何使用WSL2在Windows上執行Podman

想在windows 10上執行podman嗎?您可以,感謝最新的windows子系統linux wsl 2.0實現。借助最新的 windows 子系統 for linux wsl 2.0 實現,podman 現在可以開箱即用。對配置檔案的微小更改使 podman 更易於使用。在接下來的部分中,我將記...