現在公開中のWindows 10プレビュー版Build 20161(Dev Channel)では、WSL2(Windows Subsystem for Linux 2)からNVIDIA GPUが利用できるようになった。
とはいえ、現状のWSL2自体にはグラフィックス描画機能はなく(XをWindows 10側に入れれば、WSL2側からGUIアプリケーションを起動できる)、GPUを使ってLinuxでゲームとはいかないのだが、GPUを計算に利用することができる。
マイクロソフトは、将来的にWSL2でのGUIアプリケーションのサポートを計画しており、これはその前段階になるものだ。どのような形でのサポートになるのかは不明だが、少なくとも、これでWSL2側からWindowsが管理しているGPUへのアクセスが可能になる。
特にメリットがあるのがDockerを使った開発やAI関連のコンテナーの利用である。コンテナーとは、アプリケーションと実行環境を「パッケージ化」したもので、Dockerでコンテナーを読み込めば、すぐに設定済みのアプリケーションが動き出す。この中には、開発環境やディープラーニングフレームワークなどがあり、インストールや初期設定などに悩まされることなく、すぐにアプリケーションを利用できる。
DirectXが改良され、WSL2からGPUへのアクセスが可能に
WDDMv2.5以降のデバイスドライバーは、GPU-PV(WDDM GPU Paravirtualization。WDDM GPU準仮想化)と呼ばれるGPU仮想化機能を実装している。ただし、この仮想化は、Windows上のVMやコンテナーに対してしか動作させることができない。逆に言えば、Windows 10の仮想マシンやコンテナーの中であれば、GPU-PVにより仮想化されたGPUを利用することが可能になる。これは、Windows Sandboxなどにも適用される。
WDDM v2.9では、これをWSL2側にも拡張した。
これにより、GPU-PVに対応したLinuxカーネルを使うことで、WSL2内からGPUを利用したアプリケーションが動作できるようになる。GPU-PVに対応したLinuxカーネルには仮想GPUデバイスドライバーのdgxkrnlが組み込まれ、ユーザーモード側からは/dev/dxgデバイス経由でGPUを利用する。dgxkenlは、VM Bus経由でWindows側のGPUカーネルモードドライバーに接続する。
このような仕組みが搭載されたため、Linux側でDirectX12(libd3d12)やDirectML(libdirectml)が、mesaがlibd3d12上で動作するようになるため、OpenGL経由でのグラフィックスも可能になる。さらにNVIDIA CUDA(libcude)もLinux環境から利用できる。
現状のWSL2は、グラフィックスプレーンを持たないが、マイクロソフトは、WSL2のGUIアプリケーションへの対応を計画している。WSL2のGUI対応は、おそらくOpenGL(正確にはEGL)を使うWaylandをMesaと組みあわせてGUIを実現するのではないかとと思われる。つまり、今回のGPU対応はGUI対応の一環なのである。
Linuxカーネル側に対応デバイスドライバーを組み込む必要があることからGPUにアクセスできるのはWSL2で起動しているLinuxディストリビューション(動作バージョンが2)のみで、WSL1(動作バージョンが1)で動作するLinuxディストリビューションでは動作しない。
Linuxの機械学習コンテナーが利用可能に
しかもGPUへのアクセスまで平易
WSL2でサポートされるDirect3DやDirectMLは、WindowsのAPIなので、Linux側には現状アプリケーションがない。サードパーティが、Direct3DやDirectMLを使うWindows用アプリケーションを移植するのは簡単になるが、Windows用アプリケーションは多くがGUIアプリケーションであるため、WSL2がGUIに対応してからになると思われる。
しかし、dgxデバイス(/dev/dgx)のMesa(OpenGL実装の1つ)対応、そしてCUDA対応はLinuxの既存アプリケーションなどに大きな影響がある。これらを使ってGPUにアクセスしているLinuxアプリケーションをWSL2内で動作させることが可能になるからだ。
特に機械学習関係では、NVIDIAが環境整備に力を入れており、さまざまなサポートアプリケーションや既存のディープラーニングフレームワーク対応などを進めている。これらは、ソースコードとして入手し、コンパイルなどのうえ利用することもできるが、ほとんどDockerのコンテナーとして提供されている。
コンテナーとは、簡単に説明すると、ソフトウェアのインストールと環境設定をファイルとして保存できるようにしたものだ。Dockerなどのコンテナー管理ソフトウェアが、コンテナー実行環境にコンテナーファイルを読み込むと、コンテナー保存時のアプリケーションの状態が復元される。それは、すでに設定が終了し、テストも終わって正しく動作することが確認されたアプリケーションであり、これを使うことでコンパイルやイスントール、設定といった問題にわずらわされことなく利用できる。
これまでは、GPUボードを搭載したLinux環境が必須であったため、デスクトップマシンやゲーミングノートなどにLinuxをインストールして、機械学習用のマシンを作る必要があった。ところが比較的簡単に手に入るゲーミングノートの多くが、省電力のためにCPU内蔵GPUと外付けGPUを切り替える仕組みが入っており、Linuxがインストール時にCPU内蔵GPUを検出してしまって、環境構築が面倒になるという問題があった。
今回、WSL2でNVIDIA GPUとCPU内蔵GPUを持つゲーミングノートにGPU対応をインストールしてみた。WSL2のインストールはWindows側できちんと管理されており、GPUが2つあっても正しく認識されて、GPU利用が可能だった。Linuxのインストールが不要で、ドライバー関係はWindows側で管理されるため、ほとんど手間がない。買ってきたPCですぐにWSL2を使ってGPUアクセスが可能というのは、かなり敷居が低い。
この連載の記事
-
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ - この連載の一覧へ