【記事】Windows Subsystem for Linux 2(WSL2)のGPUサポートについて【1/3】

■こちらは、2020年8月15日に投稿された記事のため、情報の内容が古い可能性があります。

昨今、GPUを並列計算処理やシミュレーション、AI基盤として利用するGPGPUがますます広がりを見せており、弊社でもこの用途でのコンピュータのお問い合わせを多数いただいております。

この際問題になるのが、コンピュータのOS環境です。「普段利用しているのはWindowsコンピュータだが、目的の用途はLinux上で行われることが多いので、別途Linuxコンピュータを用意する必要があるのではないか」…こういった懸念がある方は多いのではないでしょうか。

今回は、Windows上でLinux向けバイナリを実行する方法の一つであるWindows Subsystem for Linuxを利用し、Linux向けGPGPUコードを実行する手順をご紹介します。

 

仮想環境でLinuxを使ってみよう

Windows 10(とWindows Server 2016以降)にはWindows上でLinux向けのバイナリを実行する互換レイヤー”Windows Subsystem for Linux(WSL)”が搭載されています。現在WSLはバージョン2がリリースされており(WSL2)、このバージョンからほぼそのままのLinuxカーネルをWindows上で実行することが可能になりました。

現時点ではWSL2へのアップグレードに若干の手順が必要となりますが、対応するLinuxディストリビューションがWindowsストアからダウンロード可能なこともあり、比較的手軽にWindows上でLinux環境をテストできるようになっています。

WSL上のLinuxカーネルからCUDAプログラムを実行する

はじめに

2020年7月現在、開発者向けWindows検証用サービス「Windows Insider Program」でリリースされているPreview版のWSL2では、WSL上でのGPUサポートが有効になりました。今回は、このPreview版を利用してWSL上のLinuxカーネルからCUDAプログラムを実行する検証を行いたいと思います。

CUDAプログラムの実行のためには、「Windows Insider Program」の”Devチャネル * “を有効にし、最新のPreview版を取得する必要があります。なおPreview版は頻繁に更新されるため、バージョンによっては本記事で紹介する機能が正常に動作しない場合もございます。また開発サイクルの中で最も早いビルドが提供されているDevチャネルのため、正式リリースの際に同機能の保持をお約束するものではございません。あらかじめご了承ください。

* Windows Insider Programは開発者向けのWindowsの検証用サービスで、開発者は開発段階の異なる最新のバージョン(OS)を3つのチャネル「Dev」「ベータ」「リリースプレビュー」から選択して試すことができます。

Devチャネル: 開発サイクルで最も早いビルドが提供(更新頻度が高く、不安定要素あり)
ベータ: ブランチ後のビルド(初期採用層向け、比較的信頼が高く安定しているOS)
リリースプレビュー: リリース間近なビルド(公開前のOSの中で最も信頼性も高く安定)

Windows Insider Program のドキュメンテーション
https://docs.microsoft.com/ja-jp/windows-insider/

 

1.WSLセットアップの下準備

1-1.WindowsへのNVIDIAグラフィックドライバのインストール

本記事ではCUDAに対応したNVIDIA GPUを搭載したコンピュータの利用を前提としていますが、WSL2でのCUDA実行にあたって対応するグラフィックドライバをインストールします。2020/7/22現在、バージョン455.41以降のドライバがWSL2でのCUDA実行に対応しています。

※グラフィックドライバのインストールはWindows上のみで行ってください。このあとセットアップするWSL上でLinux対応版ドライバのインストールを行うと、CUDAが正常に動作しない恐れがあります。

1-2.Windows Insider Programの有効化

Windows 10設定の「更新とセキュリティ」からWindows Insider ProgramのDevチャネルを有効化します。有効化すると、DevチャネルのビルドがWindows Update経由でダウンロードされますので、これを適用してWindows 10のビルドを更新します。

2.WSLのセットアップ

2020/7/22現在、WSL2はデフォルトのバージョンとして設定されないため、手動でWSL2を導入する必要があります。具体的な手順の説明に関しては本記事では割愛しますが、Microsoft公式サイトにて手順が公開されていますので、こちらをご覧ください。

Windows 10 用 Windows Subsystem for Linux のインストール ガイド
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

以下、WSL2のセットアップが完了し、ディストリビューションとしてUbuntu 18.04がインストールされた状態をもとに解説を進めます。

3.CUDA Toolkitのセットアップ

3-1.Ubuntu 18.04上にCUDA Toolkit* を インストールします。

* 本記事執筆時点では、WSL2上でのGPGPUをサポートしているのはCUDA Toolkit 11.0のみとなるため、注意してください。

3-2.CUDA ToolkitはUbuntu上にNVIDIAリポジトリ*経由でダウンロード、インストールを行います。

*リポジトリの登録手順に関しては、NVIDIA公式サイトをご覧ください。

CUDA Toolkit 11.0 Download
https://developer.nvidia.com/cuda-downloads

なお、リポジトリにはCUDA Toolkitを含むメタパッケージが複数存在します。上述のようにUbuntu上にグラフィックドライバをインストールすると問題が発生する可能性があるため、パッケージ名は下記のようにCUDA Toolkitのみがインストールされるよう指定する必要があります。

$sudo apt-get install cuda-toolkit-11-0

4.サンプルプログラムの実行

CUDA Toolkitのインストールが完了すると、Ubuntu上でCUDAプログラムの実行が可能になります。標準インストールを行った場合、CUDA Toolkit のディレクトリはネイティブ環境同様/usr/local/cuda/以下に配置されます。サンプルファイルは sample/ 以下に保存されます。

弊社にて動作確認を兼ねてnbodyプログラムをコンパイル実行した結果を掲載します。

次回、第二回は、WSL2上で実行するGPGPU計算のパフォーマンス測定を行う予定です。

この記事を書いた人 : 技術部 和田
この記事を書いた日 : 2020.7.22
2020/11/13 追記:
【記事】Windows Subsystem for Linux 2(WSL2)のGPUサポートについて【2/3】を公開しました!