👽

WindowsにおけるGPUの環境構築

2021/12/20に公開

はじめに

Windows10 November 2021 Update(version 21H2)が配信されたため、
Windows Inseider Programを申し込まずともWSL2を利用できるようになりました。

本記事では、Windows HomeのユーザがWSL2を利用したDocker Desktopを用いて
GPUが利用できる環境を構築することを目指します。

本記事は以下を参考にしてます。
NVIDIAの@_ksasakiさんが書いているため、本記事よりもより詳しい説明が記載されています。
https://qiita.com/ksasaki/items/ee864abd74f95fea1efa

Windows10 Update

まず、Windows10をverion21H2に更新します。

配信から一ヶ月以上(記事作成時点)経っているので、おそらくこの作業については
終えている方も多いと思いますが、以下を行い、一応バージョンを確認してください。

  • [Win] + [R]で"ファイル名を指定して実行"を起動させる。
  • winverと入力し、"OK"を押す。
  • "Windowsのバージョン確認"が表示されるのでバージョンを確認する。

自分の環境が"バージョン 21H2"であれば更新作業は不要です。

そうでない方はWindows10の更新を行ってください。
ここで躓いた方は、以下が参考になると思います。
https://docs.microsoft.com/ja-jp/windows/whats-new/whats-new-windows-10-version-21h2

WSL2の導入

以前では、

  • 設定でWSLと仮想マシンプラットフォームを有効にする。
  • WSL2用のLinuxカーネルのダウンロードとインストール
  • WSL2をデフォルトに設定する。
    等が必要でしたが、現在ではコマンド一つでWSL2を導入できます。

管理者権限で開いたPowerShellで以下を実行します。

> wsl --install

次に、WSL2が有効になっているかを確認します。

> wsl --status

ここで既定のバージョンが2でなければ、以下を実行します。

> wsl --set-default-version 2

WSLのコマンドについては以下を参照してください。
https://docs.microsoft.com/ja-jp/windows/wsl/basic-commands

NVIDIA drivers for WSLのインストール

ホスト環境にNVIDIA Driverを入れましょう。

以下のページのGet CUDA Driverボタンを押し、GeForce DriverかQuadro Driverのいずれかを
ホスト環境に合わせてダウンロードしてください。
https://developer.nvidia.com/cuda/wsl

途中ログインを求められますが、アカウントがない方は作成して続けてください。

インストールはすべてデフォルトの設定で行っても問題ないと思います。

Docker Desktop for Windowsのインストール

次にDocker Desktopを入れます。
https://www.docker.com/products/docker-desktop

インストールの際に注意したいのが、Configurationで以下のように、
必ずWSL2 バックエンドのオプションにチェックを入れてインストールしてください。

  • Install required Windows components for WSL 2

インストールが終了したらPowerShellで以下を確認してください。

> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

STATE等は少し異なるかもしれませんが、docker-desktopdocker-desktop-data
VERSION 2となっていれば問題ありません。

Dockerでコンテナ起動

WSL2のUbuntuからDockerを使用してGPUが利用できる環境を構築します。
一例として、次のコマンドを実行してコンテナを起動します。

$ docker run --shm-size=1g \
	--ulimit memlock=-1 \
	--ulimit stack=67108864 \
	--gpus all \
	-p 8888:8888 \
	-it nvcr.io/nvidia/tensorflow:21.08-tf2-py3

コンテナが起動したらnvidia-smiコマンドを実行してみてください。
以下のようにGPUが認識されていることが確認できると思います。

# nvidia-smi
Mon Dec 20 07:41:48 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.50       Driver Version: 471.21       CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:09:00.0  On |                  N/A |
| 40%   34C    P8    16W / 184W |    991MiB /  8192MiB |    ERR!      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

まとめ

以上で、WSL2を用いたGPU環境の構築ができたかと思います。

GPUを利用すれば機械学習などの作業をより速く行うことができます。
また、あらかじめDockerfiledocker-compose.ymlを作成することで、どこでも同様の環境を構築できるため、ぜひドキュメント等を参照しながら自分好みの環境を構築してみてください。

参考資料

https://docs.nvidia.com/cuda/wsl-user-guide/index.html
https://docs.microsoft.com/ja-jp/windows/ai/directml/gpu-cuda-in-wsl
https://docs.docker.com/desktop/windows/wsl/
https://docs.docker.com/
https://docs.docker.jp/
https://biomedicalhacks.com/2020-12-01/docker-jupyter/

Discussion