NVIDIAのコンピューティングプラットフォーム「CUDA」がWSLで利用可能に
2020年6月17日にリリースされたWindows 10 Insider Previewの最新バージョン「Build 20150」にて、WSLがNVIDIAのコンピューティングプラットフォーム「CUDA」をサポートしました。この機能強化により、Linuxのみに対応している計算ソフトや専門的なツールを、WSL上で動作させることが可能になります。
Announcing CUDA on Windows Subsystem for Linux 2 | NVIDIA Developer Blog
https://devblogs.nvidia.com/announcing-cuda-on-windows-subsystem-for-linux-2/
WSL1は「LXCore」と呼ばれるプログラムを経由してLinuxのアプリケーションを提供していたため、動作不可能なLinuxアプリケーションも存在していました。それに対して最新版のWSL2からは実際のLinuxカーネルをHyper-V上で動かすことで、ほとんどのLinuxアプリケーションを動作させることが可能になっています。WSL2やGPU準仮想化技術の「GPU-PV」により、DirectXのサポートなど、WSL上でのGPU計算が実現したわけです。
WSLでCUDAを有効にするためには、まずNVIDIAのGPUを搭載したPCにWindows 10 Insider Previewの最新バージョン「Build 20150」をインストールする必要があります。さらに、WDDM 2.9に対応したNVIDIAのプレビュー版GPUドライバーをホストOSにインストールし、WSL2を利用する必要があるとのこと。通常のWindowsで使用されるDirextX用カーネルドライバー「dxgkrnl」と、Linux用カーネルドライバー「dxgkrnl」はVM Busで接続されており、仮想化されたGPUはデバイスファイル「/dev/dxg」を経由してWSLのカーネル空間からユーザー空間へと露出しています。CUDAドライバーの「libcuda」が共有ライブラリ「libdxcore」を経てGPUを利用するという仕組みを採用しました。
機械学習ライブラリのTensorFlowをWSL上で動作させている様子が以下。WSLのターミナルである左下の赤枠部分に「Geforce GTX 1070」の文字が見えます。NVIDIAはWSL上でCUDAを動作させるプロジェクトに積極的に取り組み、調整を行っていくとのこと。また、GPU-PVによるパフォーマンスの低下をできるだけ減らしていくとNVIDIAはコメントしています。
NVIDIAはWSLによるCUDAサポートに加え、DockerコンテナでホストOSのGPUを利用可能にする「NVIDIA Container Toolkit」のWSL対応も発表。これによりWSL上で動作するDockerコンテナでもGPUが利用できるようになります。「libnvidia-container」ライブラリによってlibdxcoreが検知され、CUDAライブラリなどとともにコンテナ内に取り込まれるという仕組みになっています。
WSL上のDockerコンテナでN体シミュレーションを実行した画像も公開されており、「GeForce GTX 1070」という赤文字が見えることから、GPUがホストOSからWSL、そしてDockerコンテナへパススルーされていることがわかります。
dxgkrnlドライバーを含んだプレビュー段階のWSL2用Linuxカーネルは、以下からソースコードを確認することができます。
microsoft/WSL2-Linux-Kernel at linux-msft-wsl-4.19.y
https://github.com/microsoft/WSL2-Linux-Kernel/tree/linux-msft-wsl-4.19.y
・関連記事
MicrosoftがBuild 2020でWSL2のGUIアプリ動作やパッケージマネージャー「winget」などを発表 - GIGAZINE
MicrosoftがWindowsに完全なLinuxカーネルを組み込む予定を明らかに - GIGAZINE
NVIDIAが次世代「Ampere」アーキテクチャのデータセンター向けGPU「NVIDIA A100」を発表 - GIGAZINE
NVIDIA RTX 2080 Tiのディープラーニング性能をGTX 1080 Ti・Titan V・Tesla V100と比較 - GIGAZINE
・関連コンテンツ