Microsoft将DriectX带到Windows Subsystem for Linux,AI应用直接获益 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,它甚至能享有全部资源。

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等运算框架的效果。

D3D12可以透过libd3d12.so与libdxcore.so函数库在WSL2环境运作。

DirectML也可以透过相同的方式运作。

OpenCL和OpenGL则是透过Mesa函数库达成相容。

CUDA则借由libcuda.so函数库相容,可以提供AI加速运算效果。

虽然libd3d12.so和libdxcore.so仍是闭源程式,但Microsoft已将Linux版Dxgkrnl开源并与社群共享,有兴趣的读者可以在GitHub上取得更多资讯。

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

相关文章