DirectX가 Linux 용 Windows 서브 시스템에 제공됩니다
에서 // 빌드 2020 우리는 GPU 하드웨어 가속 리눅스 2 (WSL 2)에 대한 Windows 하위 시스템에오고 발표했다.
WSL이란 무엇입니까? WSL 은 사용자가 Windows PC에서 편안하게 Linux 응용 프로그램을 실행할 수있는 환경입니다. Linux 컨테이너 내부의 클라우드에 배치 될 컨테이너화 된 워크로드를 작업하는 개발자 인 경우 익숙한 기본 Linux 도구를 사용하여 Windows PC에서 로컬로 이러한 워크로드를 개발하고 테스트 할 수 있습니다. 대중적인 요구에 부응하여 이러한 Linux 응용 프로그램 및 도구는 이제 GPU 가속의 혜택을 누릴 수 있습니다.
이 블로그의 목적은이 지원이 달성되는 방법과 다양한 부분이 어떻게 조화를 이루는 지 보여주는 것입니다.
GPU 가상화
지난 몇 개의 Windows 릴리스에서 우리는 클라이언트 GPU 가상화 기술 개발에 바빴습니다. 이 기술은 WDDM (Windows Display Driver Model)에 통합되어 있으며 모든 WDDMv2.5 이상 드라이버는 GPU 가상화를 기본적으로 지원합니다. 이 기술을 WDDM GPU 반 가상화 또는 GPU-PV라고합니다. GPU-PV는 이제 Windows의 기본 부분으로 Windows Defender Application Guard , Windows Sandbox 또는 Hololens 2 에뮬레이터 와 같은 시나리오에서 사용됩니다 . 오늘날이 기술은 Windows 게스트, 즉 VM 또는 컨테이너 내부에서 실행되는 Windows로 제한됩니다.
WSL 2에 GPU 가속을 지원하기 위해 WDDMv2.9는 GPU 게스트의 범위를 Linux 게스트로 확장합니다. 이는 GPU-PV 프로토콜을 활용하여 GPU를 사용자 모드 Linux에 노출시키는 새로운 Linux 커널 드라이버를 통해 달성됩니다. GPU의 계획된 추상화는 WDDM GPU 추상화 모델을 따르므로 해당 추상화에 대해 작성된 API 및 드라이버를 Linux 환경에서 사용하기 위해 쉽게 이식 할 수 있습니다.
dxgkrnl (Linux Edition) 소개
Dxgkrnl은 / dev / dxg 장치를 사용자 모드 Linux에 노출시키는 Linux 용 최신 커널 드라이버입니다 . / dev / dxg 는 Windows에서 기본 WDDM D3DKMT 커널 서비스 계층과 매우 유사한 IOCTL 세트를 제공합니다. Linux 커널 내부의 Dxgkrnl은 VM 버스를 통해 Windows 호스트의 빅 브라더에 연결하고이 VM 버스 연결을 사용하여 물리적 GPU와 통신합니다.
호스트에 여러 개의 GPU가있는 경우 모든 GPU가 투영되고 Linux 환경에서 사용 가능합니다 (이러한 GPU 모두 WDDMv2.9 드라이버를 실행한다고 가정).
Linux 환경 내에서 실행되는 응용 프로그램은 Windows의 기본 응용 프로그램과 동일한 GPU 액세스 권한을 갖습니다. Linux와 Windows간에 리소스를 분할하거나 Linux 응용 프로그램에 부과 된 제한이 없습니다. 누가 무엇을 필요로하는지에 따라 공유는 완전히 역동적입니다. 기본적으로 GPU와 Linux를 공유하는 두 Windows 응용 프로그램과 동일한 GPU를 공유하는 Windows 응용 프로그램에는 차이가 없습니다. Linux 응용 프로그램이 GPU에만있는 경우 모든 리소스를 사용할 수 있습니다!
Windows 호스트에 올바른 GPU 드라이버가 설치되어 있다고 가정하면 / dev / dxg 는 추가 패키지를 설치하지 않고도 설치된 WSL 배포판에 자동으로 노출되어 사용할 수 있습니다. GPU에 액세스하려면 배포판 을 WSL 버전 2 모드 ( wsl –set-version <Distro> 2 )에서 실행해야합니다.
Linux 커널 내부의 dxgkrnl 버전은 이름을 공유하지만 GPU-PV 프로토콜을 기반으로 한 Linux GPU 드라이버의 클린 룸 구현이며 비슷한 Windows 이름과 공통으로 다른 것을 공유하지 않습니다. Dxgkrnl Linux 에디션은 오픈 소스로 만들어져 커뮤니티와 다시 공유됩니다. 이 새 드라이버를 업스트림하는 과정에서 WSL 2 용 Microsoft 공식 Linux 커널 지점에서 소스 코드를 사용할 수 있습니다.
https://github.com/microsoft/WSL2-Linux-Kernel/tree/linux-msft-wsl-4.19.y/drivers/gpu/dxgkrnl
Linux의 DxCore 및 D3D12
Linux 내부의 GPU에 WDDM 호환 추상화를 투영하면 WSL에서 실행될 때 최고의 그래픽 API를 Linux로 다시 컴파일하고 가져올 수있었습니다.
이것은 실제적이고 완전한 D3D12 API이며 여기에 모방, 가해자 또는 재 구현이 없습니다 ... 이것은 실제 거래입니다. libd3d12.so는 Windows의 d3d12.dll과 동일한 소스 코드에서 컴파일되었지만 Linux 대상 용으로 컴파일되었습니다. 동일한 수준의 기능과 성능을 제공합니다 (가상화 오버 헤드 제외). 유일한 예외는 Present ()입니다. WSL은 오늘날 콘솔 전용 환경이므로 WSL과의 프리젠 테이션 통합은 현재 없습니다. D3D12 API는 오프 스크린 렌더링 및 계산에 사용될 수 있지만 픽셀을 화면에 직접 복사하기위한 스왑 체인 지원은 없습니다.
DxCore (libdxcore.so)는 API의 레거시 측면이 최신 버전으로 대체 된 dxgi의 단순화 된 버전입니다. DxCore는 Windows와 Linux 모두에서 사용할 수 있습니다. DxCore는 Windows의 WDDM 기반 드라이버가 GPU와 통신하기 위해 사용하는 플랫 버전의 D3DKMT API를 호스팅하는 데에도 사용됩니다. 이 API는 다양한 WDDM 서비스가 커널 (Windows의 서비스 테이블과 Linux의 IOCTL)에 이르는 방식의 차이점을 추상화합니다.
libd3d12.so 및 libdxcore.so는 Windows의 일부로 제공되는 사전 컴파일 된 폐쇄 소스 사용자 모드 바이너리입니다. 이 바이너리는 glibc 기반 배포판과 호환되며 / usr / lib / wsl / lib에 자동으로 마운트되어 로더에 표시됩니다. 다시 말해, 이러한 API는 추가 패키지를 설치하거나 배포판 구성을 조정할 필요없이 바로 사용할 수 있습니다. 지원은 현재 Ubuntu, Debian, Fedora, Centos, SUSE 등과 같은 glibc 기반 배포판으로 제한됩니다.
D3D12는 GPU 제조업체 파트너가 제공 한 GPU 특정 사용자 모드 드라이버 (UMD)가 없으면 작동 할 수 없습니다. UMD는 셰이더를 하드웨어 특정 바이트 코드로 컴파일하고 API 렌더링 요청을 명령 버퍼의 실제 GPU 명령어로 변환하여 GPU에서 실행하는 것과 같은 작업을 담당합니다. 파트너와 긴밀히 협력하여 D3D12 UMD를 Linux 대상으로 다시 컴파일하여 WSL 환경에서 이러한 드라이버를 실행할 수 있습니다. 이 지원은 곧 출시 될 WDDMv2.9 드라이버에 통합되어 최종 사용자에게 WSL의 GPU 지원이 원활하게 이루어집니다. WDDMv2.9 드라이버는 Linux 용으로 컴파일 된 DX12 UMD 버전을 제공합니다. 호스트 드라이버 패키지는 / usr / lib / wsl / drivers의 WSL 내부에 마운트되며 d3d12 API에 직접 액세스 할 수 있습니다. WDDMv2가있는 경우
DirectML 및 AI 교육
D3D12 및 DxCore 외에도 WSL에서 실행할 때 Linux에서 작동하도록 기계 학습 API 인 DirectML을 포팅했습니다. DirectML의 머신 러닝 추론 기능을 Linux로 가져와 교육 워크 플로우를 지원하기 위해 기능을 확장했습니다! DirectML은 D3D12 API를 기반으로하며 기계 학습 워크로드를위한 컴퓨팅 작업 및 최적화 모음을 제공합니다.
DirectML 팀은 이러한 하드웨어 가속 추론 및 교육 기능을 널리 사용되는 ML 도구, 라이브러리 및 프레임 워크와 통합하는 것을 목표로합니다. DirectML을 통한 교육 워크 플로 지원에서 학생과 초보자의 ML 워크 플로에 중점을두고 있습니다. 우리는 대학생과 업계 엔지니어가 광범위한 Windows 하드웨어를 활용하여 새로운 ML 기술을 배우고 습득 할 수 있도록하려고합니다. DirectML을 활용하면 이러한 학생과 초보자는 WSL 2에서 실행되는 Linux 기반 ML 도구에서 DirectX 12 가능 GPU를 활용하여 기존 시스템의 하드웨어 가속을 활용할 수있는 간단한 경로를 제공합니다.
DirectML의 기능을 확장하는 데 투자 한 것처럼 실리콘 파트너와의 멋진 공동 엔지니어링은 Windows 에코 시스템의 광범위한 GPU가 이러한 ML 중심 투자로부터 이익을 얻는 데 필수적이었습니다. 이것이 바로 이번 여름부터 DirectML을 통한 교육을 미리보기로 발표하게 된 것을 기쁘게 생각합니다!
고객이 DirectML을보다 쉽게 교육 할 수 있도록 DirectML 백엔드가 통합 된 TensorFlow의 미리보기 패키지를 출시합니다. 학생과 초보자는 TensorFlow 튜토리얼을 시작하고 미래를위한 토대를 구축 할 수 있습니다. 또한 TensorFlow 커뮤니티에 참여하고 있으며 RFC 프로세스를 진행 중입니다! 미리보기가 공개되면 계속해서 투자하여 DirectML에 새로운 기능을 추가하고 TensorFlow를 사용한 종합적인 교육 기능을 지속적으로 개선하여 교육 워크 플로우를 더욱 개선 할 것입니다.
실습 교육을위한 DirectML 하드웨어 가속에 대해 관심이 있다면 // AI의 Windows AI : 하드웨어 가속 ML 이라는 빌드 기술 세션을 확인하십시오 .
OpenGL, OpenCL 및 Vulkan
Linux에서 사용자는 일반적으로 그래픽에 Khronos API를 사용합니다. 그렇다면 OpenGL, OpenCL 또는 Vulkan에 대한 GPU 가속 지원은 어떻습니까?
우리는 최근 DX12 위에 OpenCL 및 OpenGL의 하드웨어 가속을 제공하는 매핑 계층에 대한 작업을 발표했습니다 . 이 계층을 사용하여 Mesa 라이브러리를 통해 하드웨어 가속 OpenGL 및 OpenCL을 WSL에 제공합니다. 작업이 완료된 후 WSL 배포판은이 가속을 밝히기 위해 Mesa를 업데이트해야합니다. 배포판이이 Mesa 업데이트를 선택하면 Windows 호스트에 WDDMv2.9 드라이버 이상이 설치 될 때마다 가속이 자동으로 활성화됩니다.
불칸은 어때요? 우리는 여전히 WSL에서 Vulkan을 지원하는 최선의 방법을 모색하고 있으며 앞으로 더 자세한 내용을 공유 할 것입니다. 게다가, 우리는 한 번에 모든 계획을 공개 할 수 없습니다.
엔비디아 CUDA
오늘날 가장 인기있는 컴퓨팅 API는 어떻습니까?
NVIDIA CUDA 가속도 WSL에 제공 될 예정입니다. CUDA는 크로스 플랫폼 API이며 Windows의 WDDM GPU 추상화 또는 Linux의 NVIDIA GPU 추상화를 통해 GPU와 통신 할 수 있습니다.
NVIDIA와 협력하여 / dev / dxg에 의해 노출 된 WDDM 추상화를 직접 대상으로하는 Linux 용 CUDA 버전을 빌드했습니다 . 이것은 cuDNN, cuBLAS, TensorRT와 같은 CUDA-X 라이브러리의 가속을 가능하게하는 완전한 기능의 libcuda.so 버전입니다.
WSL에서 CUDA에 대한 지원은 NVIDIA의 WDDMv2.9 드라이버에 포함됩니다. D3D12 지원과 마찬가지로 CUDA API 지원은 NVIDIA GPU가있는 경우 모든 glibc 기반 WSL 배포판에 자동으로 설치되어 사용 가능합니다. libcuda.so 라이브러리는 libd3d12.so와 함께 호스트에 배포되고 앞에서 설명한 것과 동일한 메커니즘을 사용하여 로더 검색 경로에 추가 및 추가됩니다.
CUDA 지원 외에도 WSL 내에서 NVIDIA-docker 도구도 지원합니다. 클라우드에서 실행되는 동일한 컨테이너화 된 GPU 워크로드는 WSL 내부에서 그대로 실행될 수 있습니다. NVIDIA-docker 도구는 사전 설치되지 않고 오늘날처럼 사용자가 설치 가능한 패키지로 남아 있지만 이제 패키지는 하드웨어 가속을 통해 WSL에서 호환되고 실행됩니다.
WSL에서 곧 제공 될 NVIDIA CUDA 지원에 대한 자세한 내용과 최신 정보는 http://developer.nvidia.com/cuda/wsl을 방문 하십시오 .
GUI 어플리케이션
에서 // 빌드 우리는 리눅스 GUI 응용 프로그램에 대한 지원이 WSL에오고 발표했다. 오늘날 WSL은 콘솔 전용 환경이지만 곧 Windows 데스크톱에서 다른 Windows 응용 프로그램과 함께 자주 사용하는 Linux IDE 또는 기타 GUI 응용 프로그램을 사용할 수 있습니다.
Linux 응용 프로그램과이를 호스팅하는 Windows 데스크톱간에 픽셀이 어떻게 흐르고 다양한 창이 통합되고 완벽한 환경에 통합됩니까? 그것은 또 다른 이야기가 될 것 입니다.
WDDMv2.9 출시
이 시점까지 모든 것을 읽었다면 아마도이 모든 것들에 대해 흥분했을 것입니다. 이제 실제로 언제부터 게임을 시작할 수 있을지 궁금합니다!
DxCore, D3D12, DirectML 및 NVIDIA CUDA에 대한 지원이 곧 Windows Insider Fast 빌드에 제공 될 예정입니다. 고속 링은 현재 망간 (Mn) OS 지점에 있습니다. 우리는 Fast 링이 6 월 후반 철 (Fe) 지점으로 전환되어이 새로운 기능이 내부자에게 노출 될 것으로 예상합니다. TensorFlow의 미리보기는 PyPI.org의 기존 TensorFlow 패키지와 함께 설치 가능한 PyPI 패키지와 거의 동시에 제공됩니다. 이 시점에서 멋진 // build 데모를 모두 복제 할 수 있습니다.
미리보기를 위해 aka.ms/gpuinwsl로 계속 조정하고 ML에 대한 향후 투자를 조정하려면 잠시 시간을내어 설문 조사를 완료 하십시오 .
내부자 빌드 비행을 통해 OpenGL / OpenCL 매핑 계층 및 GUI 응용 프로그램에 대한 지원이 나중에 제공 될 예정입니다. 이러한 기술을 준비하는 데 가까워 질수록 Windows Insider 빌드 릴리스 노트와 블로그 업데이트를 통해 계속 알려 드리겠습니다.
이 흥미로운 발견 바랍니다! 이것을 시도하고 의견을 공유하십시오!
출처 : https://devblogs.microsoft.com/directx/directx-heart-linux/
'Visualization Programming > DirectX12' 카테고리의 다른 글
DirectX12 - 참고 사이트 (0) | 2020.08.16 |
---|