WSL2 未來的 GPU 支援


之前在《Windows Subsystem for Linux 2 + Docker》一文,大概介紹了微軟在 Windows 10 2004 推出的 WSL2 的功能,算是介紹了 WSL 已經可以用的功能(不過要切到 Windows Insider)。

而這篇,則是來簡單紀錄一下 WSL2 還在開發,以後才能用的功能了~

在 Heresy 來看,WSL2 已經讓 Heresy 在跨平台作業時,省了很多功夫了。
不過,以現在來看,他還缺少了一個很重要的功能,那就是實際硬體的存取;尤其是 GPU 的部分,基本上現行的 WSL1、WSL2 都是無能為力的。

但是,現在深度學習的東西,基本上大多是在 Linux 上開發、運作,Windows 雖然不是說不能跑,但是大多相對麻煩。也因此,如果可以透過 WSL2 來跑相關的套件,其實是會很方便的!

而微軟也知道這個狀況,所以也正在努力地將 GPU 的功能帶到 WSL 內。


在《DirectX ❤ Linux》一文中,微軟就說明了他們在這方面的發展、以及規劃。

首先,在 WDDM((Windows Display Driver Model) 2.5 開始(Windows 10 1809),就已經有支援 GPU 虛擬化的技術了~而微軟也已經把 WDDM 的 GPU-PV(GPU Paravirtualization)應用在 Sandbox 以及 HoloLens2 模擬器等應用上了。

而微軟目前也計畫將在 WDDM 2.9,將 GPU-PV 的功能擴展到 WSL2、讓 WSL 內的 Linux 環境也可以使用 GPU!不過這東西預計是 Windows 10 21H1 才會出來,所以應該是還得等個一整年了。

而他的設計概念,基本上是會在 Linux 的 user mode 中提供一個 /dev/dxg 的虛擬顯示卡,來提供 GPU 的功能。在 Linux kernel 中,則是提供了 drivers/gpu/dxgkrnl,來和 Windows 的 dxgkrnl 做對應、針對實體顯示卡做操作。

而在多 GPU 的系統上,也都會個別投影到 Linux 環境中,讓使用者使用。

之後呢,微軟則是提供了 libd3d12 和 libdxcore,讓使用者針對 dxg 這個虛擬顯卡做操作。

其中,libd3d12 號稱提供了真正、完整的 Direct3D 12 的 API(官方文件、微軟宣稱和 Windows 版是同一份原始碼)、並提供了同等級的功能與效能!
不過,這個 D3D12 API 並不沒有 swapchain 可以直接把內容顯示到螢幕上,所以基本上只能用來進行 offscreen 繪製、或是計算而已就是了。

不過,真的要在 WSL 下使用 D3D12,還需要有廠商提供的 user mode driver (UMD) 才行;這部分也是預期在 WDDMv2.9 的時候支援的。

而 libdxcore 則是簡化版的 dxgi、提供了和 Windows 上的 DxCore(官方文件)同樣的功能。

不過,這兩個函式庫微軟並沒有開放原始碼的打算,而是僅提供預先建置好的 binary,放在「/usr/lib/wsl/lib」讓使用者使用。

由於這部分應用主要應該會是計算、深度學習的應用,所以微軟也打算把 DirectML(官方文件)這個基於 Direct3D 的機器學習方案移植到 WSL2 內。

而進一步的,整個相關的 ML Framework 也都會移植到 WSL2 內,方便開發者來使用。


OpenCL、OpenGL、Vulkan

但是老實說,在 Linux 環境中,應該沒有人在用 Direct3D,真要用 Graphics API 基本上都是 Khronos 的 OpenGL 或 Vulkan 了(計算則是用 OpenCL)。

而讓人訝異的是,微軟似乎也有打算處理這一塊!?

目前看來,微軟應該是想透過 Mesa(官網)來提供一個「mapping layer」,將 OpenCL、OpenGL 對應到 Direct 3D 12;預計初期會支援 OpenCL 1.2 和 OpenGL 3.3,並不會是最新版本。

而 Vulkan 的部分,應該是有打算支援,不過目前應該還沒有明確的規劃。

在《In the works: OpenCL™ and OpenGL® mapping layers to DirectX》這篇文章,有稍微多一點的說明。


NVIDIA CUDA

不過要講到用 GPU 來計算,目前最大宗的,應該還是 NVIDIA CUDA(官網)了!

畢竟,目前主要的深度計算在 GPU 加速的部分,也幾乎都是靠 NVIDIA CUDA 來做 GPU 計算的(某些框架的確有透過 OpenCL 支援 AMD 的 GPU,但是印象中都…),如果 WSL2 的 GPU 支援不能支援 CUDA,感覺好像也就只有半吊子了?

所以,目前微軟也有在和 NVIDIA 合作,要把 CUDA 帶到 WSL 裡!

這邊的支援,也一樣是預計是透過 WDDMv2.9 來支援,讓 libcuda 可以透過 /dev/dxg 來操作實際的 GPU。而這邊的 libcuda.so 也會是完整版的功能,可以支援 CUDA-X 的所有函式庫。

同時,NVIDIA-docker 也將會可以在 WSL 中使用,所以要透過 Docker 來執行需要 CUDA 的東西,就會變得非常方便了!

目前在 NVIDIA 官網,也已經有一個《CUDA on Windows Subsystem for Linux – Public Preview》頁面了,不過目前應該還沒辦法試用就是了。


Linux GUI

此外,在《The Windows Subsystem for Linux BUILD 2020 Summary》一文中也有提到,微軟也有規劃要讓使用者可以在 WSL 中執行有圖形介面的 Linux 應用程式。

目前的初期展示,應該是透過 Windows 的 RDP 連接到 WSL 內的 wayland(GitLab)server 來完成的。

如此一來,要進行 Linux 環境下的開發、測試,就更簡單了~


個人對 WSL2 的這些新功能都還滿期待的!不過基本上,這些功能主要應該還是針對開發人員,而不是一般使用者就是了。

而要真的能用到這些功能,除非是打算切到 Windows 10 Insider 的測試版本,否則大概就只能等到明年的 Windows 10 21H1 了~


額外參考:

對「WSL2 未來的 GPU 支援」的想法

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.