このページの本文へ

前へ 1 2 次へ

Windows Info 第232回

Windows 10のWSL2からGPUが使えるようになった

2020年07月12日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

WSL2からGPUを使うための仮想化ドライバーがプレビュー版のWindows 10で利用できるようになった

 現在公開中の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側にも拡張した。

WDDMドライバーが拡張され、GPU仮想ドライバーが仮想マシン環境で利用できるようになった。これをWSL2でも利用できるようにしたのが現在プレビュー中のWindows 10(ビルド20150以上)である

 これにより、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アクセスが可能というのは、かなり敷居が低い。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン