Microsoft將DriectX帶到Windows Subsystem for Linux,AI應用直接獲益

by

https://cdn2.techbang.com/system/excerpt_images/78707/inpage/bf7eac101d3001a4b7d61537237d2f36.jpg?1590330815
Microsoft在Build 2020開發者大會發表了支援Windows Subsystem for Linux 2的繪圖處理器加速功能,透過半虛擬化的技術,讓運作於Windows的Linux子系統也能直接存取顯示卡的資源,並且能支援DirectML與NVIDIA CUDA等API,將能大幅提升AI運算效能。


👉 歡迎加入T客邦telegram  ( https://t.me/TechbangNEWS )

透過GPU虛擬化加速WSL2

Windows Subsystem for Linux(以下簡稱WSL)為能夠在Windows作業系統原生執行Linux執行檔(ELF格式)的相容層,可讓開發人員接在Windows執行GNU/Linux環境中大部分的命令列工具、公用程式和應用程式,使用者也能將Linux容器部署於WSL並執行,簡化了程式開發與測試流程,而Microsoft也推出了改善執行效能的WSL2

在近期的Windows更新中,Microsoft花了許多心力於繪圖處理器(Graphics Processing Unit,以下簡稱GPU)虛擬化,並在WDDM(Windows Display Driver Model)2.5版之後支援原生GPU虛擬化,並將WDDM GPU半虛擬化(WDDM GPU Paravirtualization,以下簡稱GPU-PV)技術應用於Windows沙盒、Hololens 2模擬器等情境,但目前技術限制僅能支援在Windows環境中執行的虛擬機器或容器等Windows客戶機(Guest)。

為了能在WSL2中使用GPU加速功能,Microsoft在WDDM 2.9中將GPU-PV延伸至Linux客戶機,並由Linux核心中的Dxgkrnl驅動程式,透過虛擬機器的VM Bus連接至Windows宿主機(Host),如此一來Linux環境下的使用者模式(User Mode)程式就能與實體GPU溝通並存取其資源。

WDDM 2.9還能支援多路GPU,讓Linux程式得以存取所有GPU,同時它也沒有設下任何權限限制,WSL2中的程式能與Windows宿主機動態調整共享GPU資源,如果只有Linux應用程式佔用GPU,它甚至能享有全部資源。

https://cdn1.techbang.com/system/images/556756/original/bddfe32311938bfdddd6d6f4517676cf.jpg?1590330496
▲ WDDM 2.9透過VM Bus讓WSL2的程式能夠透過Windows宿主機接觸到實體GPU。

加速AI應用程式

Microsoft透過libd3d12.so與libdxcore.so函數庫為WSL2提供完整的D3D12DxCore功能,但因為WSL2沒有圖型化介面,僅提供命令列介面,雖然D3D12 API支援畫面外繪圖(Offscreen Rendering),但不支援可以將畫面複製到螢幕的Swapchain,因此繪圖功能的實用價值並不大。

值得注意的是,Microsoft為WSL2移植了許多AI、機器學習所需的API,首先D3D12中整合了DirectML,能針對機器學習運算的效能最佳化。至於Linux使用者比較常用的OpenGL、OpenCL、Vulkan等API部分,WSL2透過映射層(Mapping Layer)將OpenCL和OpenGL硬體加速功能架構於DirectX 12之上,來解決相容性問題,而Vulkan的相關細節將於未來公布。

而業界常見的NVIDIA CUDA加速,則能讓程式透過Windows的WDDM GPU抽象層或Linux上的NVIDIA GPU抽象層與GPU溝通以相容CUDA-X函數庫(libcuda.so),以達到相容cuDNN、cuBLAS、TensorRT等運算框架的效果。

https://cdn1.techbang.com/system/images/556757/original/1eda1b344370efd6d98908eb66958796.jpg?1590330497
▲ D3D12可以透過libd3d12.so與libdxcore.so函數庫在WSL2環境運作。
https://cdn1.techbang.com/system/images/556758/original/800a934162f8c03bb322c22a2f63ff1a.jpg?1590330499
▲ DirectML也可以透過相同的方式運作。
https://cdn1.techbang.com/system/images/556759/original/87fb986c2e1f886a6ebfa8c93eba3774.jpg?1590330500
▲ OpenCL和OpenGL則是透過Mesa函數庫達成相容。
https://cdn0.techbang.com/system/images/556760/original/8ea5abbddc6c97740e2ceef1106a07e7.jpg?1590330502
▲ CUDA則藉由libcuda.so函數庫相容,可以提供AI加速運算效果。

雖然libd3d12.so和libdxcore.so仍是閉源程式,但Microsoft已將Linux版Dxgkrnl開源並與社群共享,有興趣的讀者可以在GitHub上取得更多資訊。

👉 歡迎加入T客邦telegram  ( https://t.me/TechbangNEWS )