微軟在//build 2020大會上宣布,適用於Linux的Windows子系統WSL 2(Windows Subsystem for Linux 2)開始支援GPU硬體加速,簡單來說,微軟發布了一個虛擬GPU驅動程式,將虛擬化的GPU暴露給Windows主機上,在虛擬機器中執行的使用者模式應用程式,而這樣可以讓WSL 2環境中的Linux虛擬機器,能夠和Windows主機共享GPU,實現GPU硬體加速。

WSL是一個可以在Windows上執行Linux應用程式的環境,因此當開發者要開發在雲中部署的Linux容器應用程式,則可以先在Windows上進行本地開發和測試,而為了要支援更廣泛的應用,現在微軟讓Linux應用程式和工具,也可以在WSL中獲得GPU加速。

微軟在過去一段時間,發展了客戶端GPU虛擬化技術,而這項技術現在已經整合到了Windows顯示驅動程式模型(WDDM)中,所有WDDM v2.5以及更高版本的驅動程式,都原生支援GPU虛擬化。微軟提到,這項技術被稱為WDDM GPU半虛擬化(GPU Paravirtualization),已經是Windows基礎的一部分,被用在Windows Defender、Application Guard、Windows Sandbox和Hololens 2模擬器等使用案例,不過目前這項技術還僅限於Windows訪客使用,像是在Windows中執行的虛擬機器以及容器。

將GPU加速帶入WSL 2,是透過WDDM將GPU半虛擬化擴展到Linux訪客,而這仰賴新的Linux核心驅動程式實作,該驅動程式利用半虛擬化協定將GPU暴露給用戶模式的Linux,GPU投射抽象遵循WDDM GPU抽象模型,並將針對該抽象所建構的API和驅動程式,移植到Linux環境中使用。

Dxgkrnl是一個全新的Linux核心驅動程式,會將/dev/dxg裝置暴露給使用者模式Linux,微軟提到,當主機上有多個GPU,則所有GPU都會提供給Linux環境使用,在Linux環境中執行的應用程式,其對GPU存取權限和在Windows上的主機應用程式相同,Linux和Windows之間沒有資源分區,也沒有對Linux應用程式設下限制,資源共享是完全動態的,取決於當下哪個程式需要什麼資源。微軟強調,共享GPU的兩個Windows應用程式,和共享GPU的Linux和Windows應用程式沒有差別,當只有Linux應用程式需要GPU,那該應用程式將占用所有GPU資源。

由於要在Linux投射相容WDDM的抽象,因此微軟便重新編譯圖形API DirectX,使其可以在WSL環境中的Linux上運作,微軟提到,這個是真正完整的D3D12 API,並非模擬或是重新實作,libd3d12.so是使用Windows上d3d12.dll相同的程式碼編譯而來,在不考慮虛擬化造成的影響,其提供與Windows相同等級的功能和效能。唯一例外是Present(),D3D12 API目前可用於螢幕外渲染和運算,但尚未支援Swapchain將畫素直接複製到螢幕上。

除此之外,微軟還移植了機器學習API DirectML,現在DirectML可在WSL中的Linux上運作,因此開發者將可以在Linux執行高效能機器學習訓練和預測功能。DirectML建立在D3D12 API之上,提供最佳化的機器學習工作負載運算集合,為了簡化開發者使用DirectML的工作,微軟還發布整合DirectML後端的TensorFlow預覽套件,加速初學者上手。

而且WSL也將會支援Nvidia CUDA加速功能,CUDA是跨平臺API,可以藉由Windows上的WDDM GPU抽象,或Linux上的Nvidia GPU抽象和GPU溝通,微軟和Nvidia合作建置Linux的CUDA版本,該版本針對/dev/dxg暴露的WDDM抽象,微軟提到,這是libcuda.so的完整功能版本,可以用來加速cuDNN、cuBLAS、TensorRT等CUDA-X函式庫。

另外,WSL還支援Nvidia的Docker工具,讓原本在雲端中執行的容器化GPU工作負載,也可以搬到WSL上執行,微軟提到,他們不會在使用者電腦上預裝Nvidia Docker工具,而是跟目前一樣,讓用戶選擇安裝軟體套件包,只是新的軟體套件相容WSL並且提供硬體加速功能。


Advertisement

更多 iThome相關內容